有一个后端服务,地址是 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 0ZXYDD796nVCFxq 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 一样的 |