Nginx配置Meteor服务器动态子域名代理时出现404错误求助
问题根源排查
你遇到的JS文件404问题,核心原因是Meteor的静态资源(比如框架JS、样式文件)都是从网站根路径(/)加载的,但你当前的Nginx配置把所有请求都转发到了Meteor的/booking/子路径下。举个例子:当浏览器请求your-sub.domain.com/meteor_runtime_config.js时,Nginx会把它转发到localhost:3000/booking/meteor_runtime_config.js,但这个文件实际在Meteor的根目录(localhost:3000/meteor_runtime_config.js),所以就返回404了。
修复后的Nginx配置
你需要拆分代理规则,区分页面路由请求和静态资源请求,让静态资源直接走Meteor的根路径,页面路由才转发到/booking/。下面是调整后的完整配置:
# 先定义WebSocket的升级规则(放在server块外面,全局生效) map $http_upgrade $connection_upgrade { default upgrade; '' close; } server { server_name *.domain.com; listen 80; # 处理Meteor的静态资源请求:直接代理到根路径 location ~* ^/(meteor|packages|.*\.(js|css|png|jpg|svg|ico|woff2))$ { proxy_pass http://localhost:3000; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection $connection_upgrade; proxy_set_header X-Forwarded-For $remote_addr; proxy_set_header Host $host; } # 处理页面路由:转发到/booking/路径 location / { proxy_pass http://localhost:3000/booking/; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection $connection_upgrade; proxy_set_header X-Forwarded-For $remote_addr; proxy_set_header Host $host; # 修正Meteor返回的跳转路径,避免出现/booking/重复的问题 proxy_redirect http://localhost:3000/booking/ /; } }
关键细节说明
- 静态资源的匹配规则
~* ^/(meteor|packages|.*\.(js|css|png|jpg|svg|ico|woff2))$覆盖了Meteor常用的静态资源目录和文件类型,确保这些请求不会被转发到/booking/ proxy_redirect指令是为了避免Meteor返回的页面中出现/booking/重复的路径(比如跳转链接变成/booking/booking/some-page)- WebSocket的
map配置建议放在全局(和server块同级),这样所有需要WebSocket支持的server配置都能复用
修改完配置后,执行nginx -s reload重启Nginx,再访问子域名应该就能正常加载JS文件和/booking/页面了。
内容的提问来源于stack exchange,提问作者Allreadyhome
相关产品推荐
相关产品推荐

