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

Nginx反向代理仅根路径可用,子路径报404问题求助

问题解决:Nginx反向代理仅根路径可访问,其余返回404

你的核心问题出在try_files $uri $uri/ =404这行配置上:Nginx会优先检查本地服务器是否存在请求的文件或目录,找不到就直接返回404,完全跳过了反向代理流程,所以只有根路径(本地可能存在默认首页)能正常访问,其他路径都被拦截返回404。

修改后的完整配置

将两个零散的server块合并,并移除错误的try_files指令,确保所有请求都转发到容器服务:

server {
    listen 80;
    listen [::]:80;
    server_name example.com;

    location / {
        # 注意:如果容器服务用HTTP而非HTTPS,这里要改成http://localhost:3030
        proxy_pass https://localhost:3030;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header Host $http_host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;

        # 用default替代硬编码地址,自动适配后端返回的重定向
        proxy_redirect default;
    }
}

关键修改说明

  1. 合并server块:原配置拆分了两个server块,一个指定域名但未监听端口,一个监听端口但未指定域名,容易导致请求匹配混乱。合并后确保example.com的所有80端口请求都走代理逻辑。
  2. 移除try_files:反向代理场景下,除非你需要Nginx先处理本地静态资源,否则不需要这行指令——它会阻断非本地存在路径的代理流程。
  3. 优化proxy_redirect:用default替代硬编码的地址,Nginx会自动替换后端返回的重定向地址中的主机和端口,适配性更强。

特殊场景适配(需本地静态资源支持)

如果项目有部分静态文件存放在Nginx服务器本地,需要优先读取本地文件再代理其他请求,可使用以下配置:

server {
    listen 80;
    listen [::]:80;
    server_name example.com;

    location / {
        # 先尝试本地文件/目录,找不到则转发到后端容器
        try_files $uri $uri/ @proxy;
    }

    # 专门处理代理的location
    location @proxy {
        proxy_pass https://localhost:3030;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header Host $http_host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_redirect default;
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 08:50:13