NGINX变量配置proxy_pass返回text/html而非application/javascript如何解决
问题根因
两种配置的表现差异来自NGINX的两个默认行为:
- 当
proxy_pass的值包含变量时,NGINX会停用默认的路径自动替换逻辑,不会自动把location匹配到的路径前缀替换为proxy_pass中指定的路径,导致实际发往上流的路径不符合预期,上游返回404错误页,对应Content-Type就是text/html - 当
proxy_pass走HTTPS协议且上游是多虚拟主机站点(比如appspot),带变量的场景默认不会发送SNI(服务端名称指示)扩展,上游无法匹配到正确的站点配置,返回默认错误页面
修复方案
调整对应location块的配置即可:
location ^~ /mypath/ { # 手动完成路径前缀替换,break标识重写后直接走当前location的代理逻辑 rewrite ^/mypath/(.*)$ /theirpath/$1 break; # 变量形式proxy_pass仅保留协议+上游地址,路径由rewrite处理 proxy_pass https://$myupstream; proxy_set_header Host "$myupstream"; # 开启HTTPS SNI支持,让上游可以正确识别目标站点 proxy_ssl_server_name on; }
调整后Case B的行为就会和Case A完全一致,上游返回的Content-Type也会恢复正常。
内容的提问来源于stack exchange,提问作者Rakib
相关产品推荐
相关产品推荐

