请教一个关于 nginx 根据子目录进行反向代理的问题

2022-08-22 17:18:22 +08:00
 Moris

请教一个关于 nginx 根据子目录进行反向代理的问题

我现在有三个网页控制台,一个是 frps 的,一个是 cloudreve 的,还有一个是 portainer 的。

我想要用 nginx 实现 https://abc.com/frps 转发到本地的 http://127.0.0.1:8080 ,对应的是 frps 控制台服务,

https://abc.com/cloudreve 转发到本地的 http://127.0.0.1:8081 对应的是 cloudreve 控制台服务,

https://abc.com/portainer 转发到本地的 http://127.0.0.1:8082 对应的是 portainer 控制台服务。

nginx 对应配置文件部分如下

server {	
		
        listen 443
		...
        location /cloudreve/ { #cloudreve 控制台
                proxy_pass http://127.0.0.1:8081/;
                }

        location /portainer/ { #docker portainer 控制台
                proxy_pass https://127.0.0.1:8082/;
                }

        location /frps/ { #frps 控制台
                proxy_pass http://127.0.0.1:8080/;
                }
}

但是只有 portainer 实现了需求,其余两个都没有办法访问。 /frps/和 /cloudreve/并没有被传递到对应的 url 后面,但是没办法访问,结果都显示 nginx 的 404 页面。 请教一下这是为什么?

如果我开启对子域名的解析,让 cloudreve.abc.com 能够被解析到 http://127.0.0.1:8081 , 而且 location 匹配的是根目录,nginx 配置文件如下

server
        {

        listen 443 ssl;
        server_name  frps.abc.com;
        ...

        location / {
                proxy_pass http://127.0.0.1:8080;
                }
        }
        
server
        {

        listen 443 ssl;
        server_name  cloudreve.abc.com;
        ...

        location / {
                proxy_pass http://127.0.0.1:8081;
                }
        }

此时直接访问 https://frps.abc.comhttps://cloudreve.abc.com 都能够成功访问。

我不理解为什么 location 改为非根目录就无法访问了,按理来说 https://abc.com/frps/ 也应该指向 http://127.0.0.1:8080 才对啊,问题出在哪呢?

2029 次点击
所在节点    NGINX
7 条回复
akira
2022-08-22 17:30:49 +08:00
错误日志呢,看他实际访问的是哪个后端地址去了
Seanfuck
2022-08-22 17:32:14 +08:00
不要斜杠结尾
location /frps { #frps 控制台
proxy_pass http://127.0.0.1:8080;
}
Moris
2022-08-22 17:34:47 +08:00
@Seanfuck 我试过不加斜杠和加上斜杠的区别,frps 不加斜杠可以加载出网页,但是详细的 frps 数据却没有,反正还是不正常工作。cloudreve 无论加不加斜杠都不行
zhongjun96
2022-08-22 17:37:42 +08:00
LindsayZhou
2022-08-22 19:28:39 +08:00
猜测原因是后端项目里用了绝对路径,比如说如果某个项目需要加载 "/js/script.js",或者 "/socket" ,这样不会击中你 nginx 的规则。
sutra
2022-08-22 19:35:55 +08:00
也许你需要 X-Forwarded-Prefix ,然后让后端也支持它。或者利用 sub_filter 来过滤响应内容里的路径。
zbinlin
2022-08-22 20:14:30 +08:00
proxy_pass 参数后不加斜杠是对的,至于这样还不能正常工作,应该在后端程序里查下

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/874610

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX