Nginx proxy_pass 后出现部分请求 404 的解决办法

在Nginx配置中,将`/web-test/`重写为`/test/`后,静态资源请求仍然指向原始路径导致404错误。解决方案包括:1) 对每个静态资源子路径单独配置proxy_pass,或者2) 修改后端服务路由为`/test/`。这两种方法分别涉及多个子配置或后端服务改造。
摘要由CSDN通过智能技术生成

有一个后端服务,地址是 http://127.0.0.1:8888/web-test/

nginx 配置如下

    location ^~ /web-test/ { 
        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_pass http://127.0.0.1:8888/web-test/;
}

重写后访问 http://ip:port/test/后出现问题,看到请求下面的 静态资源URL 都返回 404,也就是说页面的静态资源发起的请求还是访问了原来的 /web-test 路由

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、

location ^~ /test/ { 
    proxy_pass http://127.0.0.1:8888/web-test/;
}

其他 静态资源URI 请求也 proxy_pass 到后端服务

location /web-test/resource/ {
    proxy_pass http://127.0.0.1:8888;
}
location /web-test/image/ {
    proxy_pass http://127.0.0.1:8888;
}

location /其他静态资源URI请求 {
    proxy_pass http://127.0.0.1:8888;
}

这种方式要找到所有的 静态资源URL 请求,一个个重写

2、
直接修改后端服务路由为 http://127.0.0.1:8888/test/,规则变为

location ^~ /test/ { 
    proxy_pass http://127.0.0.1:8888;
}

就可以了



作者:awker
链接:https://www.jianshu.com/p/55bfbba45fed
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值