You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Nginx配置proxy_pass反向代理访问/subscribe返回404如何解决

问题原因
  • 核心问题是Nginx location块内的指令执行优先级:try_files优先级高于proxy_pass。当前配置下,所有请求进入location /后,Nginx会优先在本地磁盘查找和请求路径匹配的文件、目录,查找失败直接返回404,不会执行反向代理逻辑把请求转发给8064端口的NodeJS应用。
  • 访问根路径/能正常打开首页,是因为Nginx本地站点根目录下存在index.html等默认首页文件,被try_files命中直接返回,并非反向代理规则生效。
解决方法

根据实际部署需求二选一即可,注意proxy_pass的路径拼接规则:如果proxy_pass值包含除了ip+端口外的路径(比如末尾的/、/subscribe这类后缀),Nginx会把请求中匹配location前缀的部分替换成该路径;如果proxy_pass只写ip+端口,会把完整请求路径直接拼接到后端地址上。

场景1:所有请求全部转发给NodeJS应用

如果不需要Nginx处理本地静态文件,所有路径的请求都要转发给8064端口的服务,直接删除try_files指令即可,推荐补充反向代理通用头配置,方便后端获取真实客户端信息:

location / {
    proxy_pass http://localhost:8064/;
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto $scheme;
}

场景2:静态文件由Nginx本地处理,仅接口转发

如果首页等静态资源存放在服务器本地由Nginx直接返回,只有/subscribe这类接口需要转发给NodeJS,就保留根路径的静态文件规则,单独给代理路径配置location块:

# 静态资源走本地文件查找
location / {
    try_files $uri $uri/ =404;
    index index.html index.htm;
}

# /subscribe路径单独走反向代理
location /subscribe {
    proxy_pass http://localhost:8064;
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto $scheme;
}

配置修改完成后,依次执行以下命令校验配置合法性并重载Nginx生效:

# 校验Nginx配置是否有语法错误
nginx -t
# 校验通过后重载配置
nginx -s reload

内容的提问来源于stack exchange,提问作者user3362334

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.11 16:16:22