由于是海外项目,web有多台服务器而且是多语言,sitemap文件是在定时服务器上生成之后再同步到web服务器,比较麻烦,于是就想通过代理解决此问题,故而在web服务器nginx配置中添加proxy_pass
需求:
将https://zh.xxx.com/sitemap/zh/topic-cht.xml.gz代理到后端http://172.31.20.89/sitemap/zh/topic-cht.xml.gz
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

很明显后端也是正常的
然后就在配置文件中看看是不是有其他优先级比较高的规则,导致加的代理规则没有匹配
于是就在配置中找到了下面这个

之后稍作修改,过滤掉sitemap目录
if (!-e $request_filename){
rewrite ^/(?!sitemap)(.*)$ /index.php?r=$1 last;
}

reload nginx之后测试就正常了