Nginx多域名共享静态资源配置遇阻:配置后出现404错误求助
解决Nginx中多域名共享静态文件的404问题
我来帮你搞定这个Nginx配置的问题,你的思路方向是对的,但用rewrite的方式和配置位置不太对,才导致了404错误。咱们先分析下问题出在哪,再给出正确的配置方案。
错误原因分析
你原来的配置里,把rewrite写在了location /块中,当请求domain1/assets/xxx.css时,rewrite会把路径改成/web/shared/xxx.css,但Nginx会结合当前server的root /web/domain1/,最终去查找/web/domain1/web/shared/xxx.css——这显然不是你实际存放文件的路径,自然就返回404了。
正确配置方案
对于这种静态文件路径映射的场景,Nginx的alias指令是最合适的选择,它可以直接将请求路径映射到指定的文件系统路径,不需要依赖root的拼接。下面是针对你两个域名的完整配置:
domain1的配置
server { server_name domain1; root /web/domain1/; # 处理domain1的/assets/路径映射 location /assets/ { alias /web/shared/; # 可选:添加静态文件缓存配置,优化性能 expires 30d; add_header Cache-Control "public, immutable"; } location / { # 你的其他业务逻辑配置,比如转发到后端或者返回静态文件 try_files $uri $uri/ =404; } }
domain2的配置
server { server_name domain2; root /web/domain2/; # 处理domain2的/admin/assets/路径映射 location /admin/assets/ { alias /web/shared/; # 同样可以添加缓存配置 expires 30d; add_header Cache-Control "public, immutable"; } location / { try_files $uri $uri/ =404; } }
关键说明
alias指令的作用是:当匹配到对应的location路径时,将请求中的路径部分替换为alias指定的文件系统路径。比如请求domain1/assets/img/logo.png,会直接去/web/shared/img/logo.png查找文件;请求domain2/admin/assets/js/app.js,会去/web/shared/js/app.js查找。- 注意
alias结尾的斜杠:如果你的location路径以/结尾,alias最好也以/结尾,避免路径拼接出错。
内容的提问来源于stack exchange,提问作者user3628119




