由于是海外项目,web有多台服务器而且是多语言,sitemap文件是在定时服务器上生成之后再同步到web服务器,比较麻烦,于是就想通过代理解决此问题,故而在web服务器nginx配置中添加proxy_pass

需求:

https://zh.xxx.com/sitemap/zh/topic-cht.xml.gz代理到后端172.31.20.89/sitemap/zh

location ^~ /sitemap/ {
        proxy_pass http://172.31.20.89;
}

当通过域名请求时返回404,但ll我肯定上面的配置是没错的,那就试试后端代理是否正常

[root@web1 vhost]# curl -I http://172.31.20.89/sitemap/zh/topic-cht.xml.gz
HTTP/1.1 200 OK
Server: nginx
Date: Thu, 26 Oct 2023 09:31:48 GMT
Content-Type: application/octet-stream
Content-Length: 173176
Last-Modified: Wed, 25 Oct 2023 02:30:29 GMT
Connection: keep-alive
Keep-Alive: timeout=20
ETag: "65387dc5-2a478"
Accept-Ranges: bytes
v2-f41b6b4503f26e7d67e1ee2e7f8cdf43_720w.webp

很明显后端也是正常的

然后就在配置文件中看看是不是有其他优先级比较高的规则,导致加的代理规则没有匹配

于是就在配置中找到了下面这个

v2-5eff362d8c5a1d8fe59cc2fd54a80710_720w.webp

之后稍作修改,过滤掉sitemap目录

if (!-e $request_filename){
     rewrite ^/(?!sitemap)(.*)$ /index.php?r=$1 last;
}
v2-843e22aa8c28220816a4131792c4dbb6_720w.webp

reload nginx之后测试就正常了