You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

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

火山引擎 最新活动