全球主机交流论坛

标题: nginx问题请教下,如何端口转发到虚拟目录 [打印本页]

作者: 比特鼻    时间: 2024-6-12 15:37
标题: 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;
}
作者: thaizxj    时间: 2024-6-12 15:48
问chatgpt
作者: xiaxiapi    时间: 2024-6-12 15:58
本帖最后由 xiaxiapi 于 2024-6-12 16:02 编辑

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

如果你80端口或者443的端口是开放的,你抄来的代码是对的。。proxy_pass是你服务端口。等于80端口访问目录代理到proxy_pass的端口
作者: 比特鼻    时间: 2024-6-12 16:10
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
作者: masir    时间: 2024-6-12 16:18
  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/。根据需要调整具体的路径和端口配置。






复制代码

作者: 比特鼻    时间: 2024-6-12 16:25
masir 发表于 2024-6-12 16:18

纯纯答非所问,这个本来就是搜索引擎排前列的一个网页内容。
作者: kennyS    时间: 2024-6-12 16:39
要消除/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/;

作者: 比特鼻    时间: 2024-6-12 16:45
kennyS 发表于 2024-6-12 16:39
要消除/bt 路径,除非bt可以配置这个路由

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

当然就算是VPS也挺好用,调试各种源码,用虚拟目录总比一堆端口方便
作者: kennyS    时间: 2024-6-12 16:47
比特鼻 发表于 2024-6-12 09:45
我测试下,不需要走域名,反代域名80反而简单,
就是内网用用,

你把域名换成localhost就好了,其他得自己摸索了
作者: HOH    时间: 2024-6-12 16:49
肯定是可以啊,我在公司就这么干,测试环境开端口要提表麻烦的要命

我自己就申请了个端口偷偷开nginx反代,现在我都成了地下网管时不时给同事开服务了,虽然不合规,但是测试环境怎么方便怎么来了
作者: luckyc    时间: 2024-6-12 16:53
介个叫反代
加个
  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. }
复制代码

作者: Microcharon    时间: 2024-6-12 17:02
  1. upstream grafana {
  2.     server localhost:3000;
  3. }

  4. upstream prometheus {
  5.     server localhost:9090;
  6. }

  7. upstream alertmanager {
  8.     server localhost:9093;
  9. }

  10. server
  11.     {
  12.         listen 80;
  13.         listen [::]:80;
  14. ...
  15. ...
  16.     }

  17. server
  18.     {
  19.         #listen 443 ssl http2;
  20.         #listen [::]:443 ssl http2;
  21.         listen 443 ssl;
  22.         listen [::]:443 ssl;
  23. ...
  24. ...

  25.         location / {
  26.             proxy_http_version 1.1;
  27.             proxy_set_header Upgrade $http_upgrade;
  28.             proxy_set_header Connection "Upgrade";
  29.             proxy_redirect off;
  30.             proxy_set_header Host $http_host;
  31.             proxy_set_header X-Real-IP $remote_addr;
  32.             #proxy_set_header X-Real-IP $http_x_real_ip;
  33.             #proxy_set_header X-Forwarded-For $remote_addr;
  34.             proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  35.             proxy_pass http://grafana;
  36.         }

  37.         location /api/live {
  38.             proxy_http_version 1.1;
  39.             proxy_set_header Upgrade $http_upgrade;
  40.             proxy_set_header Connection "Upgrade";
  41.             proxy_set_header Host $http_host;
  42.             proxy_pass http://grafana;
  43.             rewrite ^/(.*)  /$1 break;
  44.         }

  45.         location /prometheus/ {
  46.             proxy_pass http://prometheus/;
  47.             auth_basic "Prometheus";
  48.             auth_basic_user_file /home/wwwroot/....../.htpasswd;
  49.         }

  50.         location /alertmanager/ {
  51.             proxy_pass http://alertmanager/;
  52.             auth_basic "Alertmanager";
  53.             auth_basic_user_file /home/wwwroot/....../.htpasswd;
  54.         }

  55.     }
复制代码


反代404应该还是在配置上出了问题,自己写的反代可以参考
作者: 比特鼻    时间: 2024-6-12 17:54
luckyc 发表于 2024-6-12 16:53
介个叫反代
加个

谢谢大佬,加上可以了

但有另外一个遇到新问题,这个它自身就反代了自己的api,就是它有自己的虚拟目录 /api
这样怎么要怎么改?
作者: luckyc    时间: 2024-6-12 19:33
比特鼻 发表于 2024-6-12 17:54
谢谢大佬,加上可以了

但有另外一个遇到新问题,这个它自身就反代了自己的api,就是它有自己的虚拟目录  ...

建议用域名,没有路径问题




欢迎光临 全球主机交流论坛 (https://fd.vvwvv.eu.org/) Powered by Discuz! X3.4