Nginx反向代理多服务器:/quicklinks路径访问异常求助
问题原因及解决方案
这个错误的核心原因是Nginx的proxy_pass路径拼接错误,导致静态资源请求被错误转发,最终返回了HTML页面而非JS文件,浏览器解析HTML时自然会碰到<符号报错。
具体来说:
- 你的
location /quicklinks配置中,proxy_pass http://localhost:3001末尾没有加斜杠,当浏览器请求a.com/quicklinks/main_5454354.js时,Nginx会把完整的路径拼接成http://localhost:3001/quicklinks/main_5454354.js发送给后端服务。 - 但你的3001端口的Next.js应用,其静态资源(比如
main_5454354.js)实际是部署在根路径下的(即对应http://localhost:3001/main_5454354.js),并不存在/quicklinks/前缀的资源路径,所以后端返回的是404页面的HTML代码。 - 浏览器拿到HTML却以为是JS文件,解析时就会抛出
Unexpected token '<'的语法错误。
修正方法很简单,给proxy_pass末尾加上斜杠,让Nginx把/quicklinks后面的路径直接拼到后端根路径:
server { listen 80; server_name a.com; location / { proxy_pass http://localhost:3000; proxy_set_header Host $host; } location /quicklinks { # 末尾添加斜杠 proxy_pass http://localhost:3001/; proxy_set_header Host $host; } }
修改后重载Nginx,访问a.com/quicklinks就能正常加载静态资源了。
内容的提问来源于stack exchange,提问作者vaniel reddington
相关产品推荐
相关产品推荐

