Nginx多子域名多location配置中/viewer路由不生效问题咨询
问题排查及修复方案
问题根源
- 路径拼接逻辑错误:
root指令会把匹配到的URI完整拼接到根目录后,你访问sub.domain.com/viewer时,Nginx实际查找的文件路径是/opt/viewer/viewer/index.html,而你的静态文件大概率直接存放在/opt/viewer/根目录下,找不到对应文件就触发回退逻辑返回了根路径的页面。 try_files回退路径错误:你配置的try_files $uri /index.html里的/index.html是站点根路径的绝对路径,匹配失败后会直接走location /的规则返回对应页面。- 额外注意:当前配置的
server_name是www.sub.domain.com subdomain.com,和你预期的sub.domain.com不匹配,访问sub.domain.com时不会命中这个server块。
修复后的配置
events { } http { server { listen 80; listen [::]:80; # 补全你需要的子域名 server_name www.sub.domain.com sub.domain.com subdomain.com; location /viewer { # 把root换成alias,去掉前缀拼接逻辑 alias /opt/viewer/; try_files $uri $uri/ /viewer/index.html; index index.html; } location / { root /opt/client-bo/; try_files $uri /index.html; index index.html; } location /api { proxy_pass http://localhost:3001; } } server { listen 80; server_name www.sub2.domain.com sub2.domain.com; listen [::]:80; location / { proxy_pass http://localhost:3000; } } }
生效操作
配置修改完成后执行以下命令验证配置正确性,再重载Nginx即可:
# 验证配置语法 nginx -t # 重载Nginx配置 systemctl reload nginx
如果重载后仍然无法访问,检查/opt/viewer目录的权限是否为Nginx运行用户(通常是nginx)可读,可执行以下命令修复权限:
chmod -R 755 /opt/viewer chown -R nginx:nginx /opt/viewer
内容的提问来源于stack exchange,提问作者Skizo
相关产品推荐
相关产品推荐

