Nginx 如何反向代理多个端口到同一端口不同目录上?

发布于 2022-09-11 17:39:11 字数 1050 浏览 24 评论 0

如何配置 Nginx 的反向代理,使多个端口代理到同一端口的不同目录上?

我有应用 a 、b 和 c ,各自运行在 8001 、8002 和 8003 端口上。
服务器没有配置域名,所以访问地址是 ip:8001ip:8002ip:8003
现在我想用 Nginx 实现,只开放一个 80 端口,然后通过不同的目录来访问不同的服务。
我期望访问地址可以变成 ip:80/aip:80/bip:80/c 。并且该应用下所有的资源请求都是基于该路径下。
比如 ip:80/a 可以跳转到 ip:80/a/login ,而不是 ip:80/login ,注意目录的不同。
我的 /etc/nginx/conf.d/default.conf 如下:

server {
    listen       80;
    server_name  localhost;
    location /a {
        proxy_pass http://127.0.0.1:8001/;
    }
    location /b {
        proxy_pass http://127.0.0.1:8002/;
    }
    location /c {
        proxy_pass http://127.0.0.1:8003/;
    }
}

按我上面的配置,输入 ip:80/a 的确看到成功代理了 ip:8001 的应用,只看首页,一切都是正常的。
但是一跳转 ip:80/a/user/** 这样的多级目录,就失败了,变成 ip:80/user/**
我也试过按官方文档,用正则配置 location 或用 rewrite ,都无法实现我想要的效果。
谢谢指教。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(7

墨洒年华 2022-09-18 17:39:11

请问你这个问题解决了吗,我现在遇到和你一样的情况,想讨教下最后怎么解决的。

简单爱 2022-09-18 17:39:11

问题在这里:proxy_pass http://127.0.0.1:8001/;
这个是绝对路径的意思,所以他会忽略掉你的/a
你改成:proxy_pass http://127.0.0.1:8001;
就可以了,答案对的话就采纳吧

梦年海沫深 2022-09-18 17:39:11

location后面改成正则匹配啊

痞味浪人 2022-09-18 17:39:11

你最好看下官网

地狱即天堂 2022-09-18 17:39:11

可以用Nginx的Module ngx_http_sub_module解决,并且需要注意反向代理的时候取消gzip
sub_filter + proxy_pass requires no gzip encoding - Today I Learned

美胚控场 2022-09-18 17:39:11

我试过了,不可以的,除非有域名。

滥情空心 2022-09-18 17:39:11

映射目录,代理的后端也要相应改动才行, 否则目录之间的关系无法一一保持。rewrite也是改写url, 没法改写后端页面html的a标签的url。大费周折得不偿失。
比较合理的办法是用二级域名对应不同后端服务。

server {
        listen       80;
        server_name  sub1.example.com;
        location / {
                proxy_pass http://127.0.0.1:8001;
        }       
    }
    server {
        listen 80;
        server_name  sub2.example.com;
        location / {
               proxy_pass http://127.0.0.1:8002;
        }
    }
    ......
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文