有一个后端服务,地址是 http://127.0.0.1:8888/web-test/
nginx 配置如下
location ^~ /web-test/ {
proxy_set_header X-Real-Ip $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_pass http://127.0.0.1:8888;
}
访问 http://ip:port/web-test/ 是可以访问的
但我想改写成访问 http://ip:port/test/ 替代 访问 http://ip:port/web-test/ nginx 配置如下
location ^~ /test/ {
proxy_set_header X-Real-Ip $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_pass http://127.0.0.1:8888/web-test/;
}
重写后访问 http://ip:port/test/ 后出现问题,看到请求下面的 url 都返回 404
http://127.0.0.1:8888/web-test/resource/...
http://127.0.0.1:8888/web-test/image/...
http://127.0.0.1:8888/web-test/system/...
http://127.0.0.1:8888/web-test/其他 URI/...
这种情况 nginx 要怎样配置重写规则?访问 http://ip:port/test/ 能返回正常的请求
1
yuikns 2018-11-12 05:49:35 +08:00
试试这个:
location /test { proxy_pass http://127.0.0.1:8888/web-test; proxy_set_header X-Real-Ip $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header Host $http_host; } |
2
beginor 2018-11-12 07:47:50 +08:00 via Android
这个需求就不再是 proxy 了, 应该是 rewrite
|
3
0ZXYDDu796nVCFxq 2018-11-12 08:39:04 +08:00 via Android
rewrite 再 proxy_pass
|
4
imdong 2018-11-12 08:54:23 +08:00
nginx 重写里面 规则的 末尾 带不带 / 不是一个意思...
参考 1 楼... |
6
JavaFirstMaster 2018-11-12 09:30:06 +08:00
最简化配置
``` location ^~ /test/ { rewrite ^/test/(.*) /web-test/$1 break; proxy_pass http://127.0.0.1:8888; } ``` |
7
awker OP |
8
awker OP 找到解决办法了
1、 location ^~ /test/ { proxy_set_header X-Real-Ip $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header Host $http_host; proxy_pass http://127.0.0.1:8888/web-test/; } 其他请求也 proxy_pass 到后端服务 location /web-test/resource/ { proxy_pass http://127.0.0.1:8888; } location /其他请求 { } 这种方式要找到所有请求到后端的 uri,一个个重写 2、 直接修改后端服务路由为 http://127.0.0.1:8888/test/,规则变为 location ^~ /test/ { proxy_set_header X-Real-Ip $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header Host $http_host; proxy_pass http://127.0.0.1:8888; } 就可以了 |
9
JavaFirstMaster 2018-11-12 17:49:49 +08:00
@awker 你有实际测试吗?
v2ex 没法放图,搜一个博客给你看看 https://xuexb.com/post/nginx-url-rewrite.html 请看此博客中"简单例子"的第 14 行. |
10
awker OP @JavaFirstMaster 一样的
|