Nginx代理路径重写问题:localhost路径代理到外部域名报404
Nginx代理路径问题解决方案
问题出在Nginx的proxy_pass路径拼接逻辑上:当proxy_pass的目标URL包含具体路径(比如你的/file.txt)时,Nginx会自动把location匹配到的URI部分追加到该路径前面。你的规则匹配了/1045,所以最终拼接成了/1045/file.txt,导致目标URL多了一层路径。
修复方案
使用rewrite规则剥离掉请求路径中多余的前缀部分,再进行代理:
location ~* ^/([^/]+)/file.txt$ { # 剥离开头的/[数字段],只保留/file.txt rewrite ^/[^/]+(.*)$ $1 break; proxy_pass $scheme://$1.external.com; }
说明
- 调整后的
location精确匹配/xxx/file.txt格式的请求,避免误代理其他路径 rewrite规则将/1045/file.txt转换为/file.txt,再通过proxy_pass指向对应的外部域名,最终目标URL就是https://1045.external.com/file.txt- 如果需要匹配更多类似的文件(不只是file.txt),可以把规则改成
^/([^/]+)/(.+)$,然后rewrite为/$2,proxy_pass保持不变
内容的提问来源于stack exchange,提问作者JaTamez
相关产品推荐
相关产品推荐

