我现在有三个网页控制台,一个是 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.com 或 https://cloudreve.abc.com 都能够成功访问。
我不理解为什么 location 改为非根目录就无法访问了,按理来说 https://abc.com/frps/ 也应该指向 http://127.0.0.1:8080 才对啊,问题出在哪呢?
1
akira 2022-08-22 17:30:49 +08:00
错误日志呢,看他实际访问的是哪个后端地址去了
|
2
Seanfuck 2022-08-22 17:32:14 +08:00
不要斜杠结尾
location /frps { #frps 控制台 proxy_pass http://127.0.0.1:8080; } |
3
Moris OP @Seanfuck 我试过不加斜杠和加上斜杠的区别,frps 不加斜杠可以加载出网页,但是详细的 frps 数据却没有,反正还是不正常工作。cloudreve 无论加不加斜杠都不行
|
4
zhongjun96 2022-08-22 17:37:42 +08:00
少了 `rewrite` ?
https://s2.loli.net/2022/08/22/adh2reyoFsvL1EM.png |
5
LindsayZhou 2022-08-22 19:28:39 +08:00 1
猜测原因是后端项目里用了绝对路径,比如说如果某个项目需要加载 "/js/script.js",或者 "/socket" ,这样不会击中你 nginx 的规则。
|
6
sutra 2022-08-22 19:35:55 +08:00
也许你需要 X-Forwarded-Prefix ,然后让后端也支持它。或者利用 sub_filter 来过滤响应内容里的路径。
|
7
zbinlin 2022-08-22 20:14:30 +08:00
proxy_pass 参数后不加斜杠是对的,至于这样还不能正常工作,应该在后端程序里查下
|