Nginx子域名反向代理:父目录访问异常及主代理失效问题
解决Nginx子域名反向代理后/_nuxt资源404且主路径代理失效的问题
我来帮你搞定这个问题——你碰到的是Nginx location匹配优先级和代理配置的小坑,下面是修正后的完整配置,再给你唠唠问题出在哪:
修正后的完整Server块配置
server { listen 80; server_name ~^(?<tenant>.+)\.mysalon\.test$; gzip on; gzip_types text/plain application/xml text/css application/javascript; gzip_min_length 1000; # 优先处理/_nuxt/开头的请求,直接代理到后端根目录的对应路径 location ^~ /_nuxt/ { proxy_redirect off; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header x-Tenant $tenant; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; proxy_read_timeout 1m; proxy_connect_timeout 1m; proxy_pass http://127.0.0.1:3000/_nuxt/; } # 其他所有请求代理到/subdomain/路径下 location / { expires $expires; proxy_redirect off; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header x-Tenant $tenant; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; proxy_read_timeout 1m; proxy_connect_timeout 1m; proxy_pass http://127.0.0.1:3000/subdomain/; } }
问题原因和配置说明
- location匹配优先级是关键:
^~这个修饰符会让/_nuxt/的location拥有最高优先级,比普通前缀匹配(比如location /)更早被匹配到。这样当请求是/_nuxt/开头的资源时,会直接走这个块,不会落到后面的location /里,也就不会被错误地代理到/subdomain/_nuxt/路径下,完美解决404问题。 - 主路径代理失效的坑:你之前出现主路径指向后端根目录的问题,大概率是配置顺序搞反了——如果把
location /放在/_nuxt/的前面,或者在新增/_nuxt/的location时不小心改动了主location的proxy_pass配置,就会导致主路径代理异常。按上面的配置,把/_nuxt/的location放在前面,同时保留所有必要的代理头,就能避免这个问题。 - 别漏了租户变量:在
/_nuxt/的location里也要传递x-Tenant变量,万一后端服务需要根据租户信息做处理,也能正常获取到。
这样配置后,访问{tenant}.mysalon.test会正常代理到http://127.0.0.1:3000/subdomain/,而/_nuxt/开头的资源会直接代理到后端根目录下的对应路径,两边都能正常工作啦。
内容的提问来源于stack exchange,提问作者Acework
相关产品推荐
相关产品推荐

