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

Nginx配置:仅根路径返回静态文件,其余路由走API重定向

问题原因

你当前配置的问题在于:访问根路径/时,Nginx会通过index指令触发内部重定向,把请求转向/index.html。而location = /是精确匹配,不会匹配/index.html,导致这个请求被第二个location /捕获,转发到API,最终根路径无法返回静态的index.html文件。

解决方案

下面两种方案都能解决这个问题,任选其一即可:

方案一:新增匹配/index.html的location块

专门处理内部重定向过来的/index.html请求,确保它走静态文件服务:

server {
    listen 443 ssl;
    server_name domain.com;

    ...

    # 处理根路径请求
    location = / {
        root /usr/share/nginx/html;
        index  index.html;
    }

    # 处理内部重定向的index.html请求
    location = /index.html {
        root /usr/share/nginx/html;
    }

    # 其余所有路由转发到API
    location / {
        proxy_pass http://api:3000/v1/urls/redirect$uri;
        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;
    }
}

方案二:用try_files替代index,避免内部重定向

直接指定返回根路径的静态文件,跳过内部重定向步骤:

server {
    listen 443 ssl;
    server_name domain.com;

    ...

    # 直接返回根路径的静态文件,无内部重定向
    location = / {
        root /usr/share/nginx/html;
        try_files /index.html =404;
    }

    # 其余所有路由转发到API
    location / {
        proxy_pass http://api:3000/v1/urls/redirect$uri;
        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;
    }
}
额外说明

如果你的根路径页面依赖CSS、JS、图片等静态资源,这些资源请求也需要走静态文件服务的话,得额外添加对应的location规则,比如:

# 匹配/static/开头的静态资源
location /static/ {
    root /usr/share/nginx/html;
}

# 或者按文件后缀匹配
location ~* \.(css|js|png|jpg|svg)$ {
    root /usr/share/nginx/html;
    expires 1d; # 可选:设置缓存过期时间
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 07:32:42