嘟嘟社区

nginx问题请教下,如何端口转发到虚拟目录


就是把端口转发成虚拟目录来访问

比如说内网用 transmission 来BT下载,需要IP+端口来使用, http://192.168.31.x:9091 但一堆端口不好记,怎样可以转发成 http://192.168.31.x/bt/ 这样虚拟目录来访问?
当然还有调试各种源码程序,也不想记一堆端口,用公网 IP + 虚拟目录,代替端口实现

网上没找到专门讲这样,找了类似来抄,发现不对,请问哪里出错,应该怎么改?

  1. location ^~ /bt/ {
  2.         client_max_body_size 1024m;
  3.         proxy_http_version 1.1;
  4.         proxy_set_header Upgrade         $http_upgrade;
  5.         proxy_set_header Connection      "Upgrade";
  6.         proxy_set_header Host            $http_host;
  7.         proxy_set_header X-Real-IP       $remote_addr;
  8.         proxy_set_header X-Forward-For   $proxy_add_x_forwarded_for;
  9.         proxy_set_header X-Forward-Proto $scheme;
  10.         proxy_redirect off;
  11.         proxy_pass http://127.0.0.1:9091;
  12. }

复制代码

location ^~/ttyd {
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto $scheme;
    proxy_set_header Host $http_host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header Range $http_range;
        proxy_set_header If-Range $http_if_range;
    proxy_redirect off;
    proxy_pass http://127.0.0.1:7681;
    # the max size of file to upload
    client_max_body_size 20000m;
}

介个叫反代
加个
  1. rewrite ^/bt/(.*)$ /$1 break;

复制代码

重写路径

  1. location ^~ /bt/ {
  2.         client_max_body_size 1024m;
  3.         proxy_http_version 1.1;
  4.         proxy_set_header Upgrade         $http_upgrade;
  5.         proxy_set_header Connection      "Upgrade";
  6.         proxy_set_header Host            $http_host;
  7.         proxy_set_header X-Real-IP       $remote_addr;
  8.         proxy_set_header X-Forward-For   $proxy_add_x_forwarded_for;
  9.         proxy_set_header X-Forward-Proto $scheme;
  10.         proxy_redirect off;
  11.         rewrite ^/bt/(.*)$ /$1 break;
  12.         proxy_pass http://127.0.0.1:9091;
  13. }

复制代码

问chatgpt
本帖最后由 xiaxiapi 于 2024-6-12 16:02 编辑

:7681是server节点上端口。想什么。

如果你80端口或者443的端口是开放的,你抄来的代码是对的。。proxy_pass是你服务端口。等于80端口访问目录代理到proxy_pass的端口

xiaxiapi 发表于 2024-6-12 15:58
:7681是server节点上端口。想什么。

如果你80端口或者443的端口是开放的,你抄来的代码是对的。。proxy_ …

内网啊,等于你 localhost ,当然80自己用没问题,我没说要外网穿透这些

就是 http://192.168.31.1:xxxx 转发成 http://192.168.31.1/xxxt/  不用记一堆端口,就是这样抄过来实现不了,给我404

  1. nginx问题请教下,如何端口转发到虚拟目录
  2. ChatGPT
  3. 在 Nginx 中,将请求转发到虚拟目录(即子路径)可以通过配置 location 指令和 proxy_pass 指令来实现。假设你有一个后端服务运行在特定端口,并且你希望通过 Nginx 将请求转发到该服务,但在特定的虚拟目录下。以下是一个示例配置:
  4. 假设:
  5. 后端服务运行在 http://localhost:8080
  6. 你希望所有请求通过 http://yourdomain.com/api/ 转发到该后端服务
  7. Nginx 配置如下:
  8. nginx
  9. 复制代码
  10. server {
  11.     listen 80;
  12.     server_name yourdomain.com;
  13.     location /api/ {
  14.         proxy_pass http://localhost:8080/;
  15.         proxy_set_header Host $host;
  16.         proxy_set_header X-Real-IP $remote_addr;
  17.         proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  18.         proxy_set_header X-Forwarded-Proto $scheme;
  19.         # 如果需要保留 /api/ 前缀,可以注释下面这行
  20.         rewrite ^/api/(.*)$ /$1 break;
  21.     }
  22. }
  23. 解释:
  24. server 块定义了一个虚拟主机,监听 80 端口,并且域名为 yourdomain.com。
  25. location /api/ 块指定了所有以 /api/ 开头的请求。
  26. proxy_pass http://localhost:8080/; 将这些请求转发到后端服务 http://localhost:8080。
  27. proxy_set_header 指令设置了一些必要的头信息,用于保持客户端的请求信息。
  28. rewrite ^/api/(.*)$ /$1 break; 这行用于移除 /api/ 前缀,将 /api/foo 重写为 /foo。如果希望保留 /api/ 前缀,可以注释掉这行。
  29. 将上述配置添加到你的 Nginx 配置文件中(通常位于 /etc/nginx/nginx.conf 或 /etc/nginx/sites-available/default),然后重新加载 Nginx 配置:
  30. sh
  31. 复制代码
  32. sudo nginx -s reload
  33. 这样,当你访问 http://yourdomain.com/api/ 时,请求将被转发到 http://localhost:8080/。根据需要调整具体的路径和端口配置。

复制代码

纯纯答非所问,这个本来就是搜索引擎排前列的一个网页内容。

要消除/bt 路径,除非bt可以配置这个路由

location ^~ /bt/ {

        proxy_pass http://127.0.0.1:9091/;
}
还有静态资源路径要不要替换,具体问题具体分析,html是相对引用就需要了
sub_filter ‘"assets/’ ‘"bt/assets/’;
或者用subs_filter

还有,自己测试下,这个应该不复杂
proxy_redirect default;
    proxy_redirect / /bt/;
    proxy_redirect  http://127.0.0.1:9091/ https://domain.com/bt/;

kennyS 发表于 2024-6-12 16:39
要消除/bt 路径,除非bt可以配置这个路由

我测试下,不需要走域名,反代域名80反而简单,
就是内网用用,

当然就算是VPS也挺好用,调试各种源码,用虚拟目录总比一堆端口方便

比特鼻 发表于 2024-6-12 09:45
我测试下,不需要走域名,反代域名80反而简单,
就是内网用用,

你把域名换成localhost就好了,其他得自己摸索了

肯定是可以啊,我在公司就这么干,测试环境开端口要提表麻烦的要命

我自己就申请了个端口偷偷开nginx反代,现在我都成了地下网管时不时给同事开服务了,虽然不合规,但是测试环境怎么方便怎么来了