有一个后端服务,地址是 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/ 能返回正常的请求
试试这个:
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;
}
这个需求就不再是 proxy 了, 应该是 rewrite
rewrite 再 proxy_pass
nginx 重写里面 规则的 末尾 带不带 / 不是一个意思...
参考 1 楼...
这样请求就变成 http://ip:port/web-test/test/ 了
最简化配置
```
location ^~ /test/ {
rewrite ^/test/(.*) /web-test/$1 break;
proxy_pass http://127.0.0.1:8888;
}
```
你这种跟我给出的是一样的作用
location ^~ /test/ {
proxy_pass http://127.0.0.1:8888/web-test/;
}
找到解决办法了
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;
}
就可以了
你有实际测试吗?
v2ex 没法放图,搜一个博客给你看看 https://xuexb.com/post/nginx-url-rewrite.html
请看此博客中"简单例子"的第 14 行.
一样的