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

刷新页面出现Nginx 404 Not Found问题求助(已尝试try_files)

解决Nginx反向代理下单页应用刷新404问题

方案一:Nginx托管静态文件并处理前端路由

1. 调整Docker挂载配置

在Docker Compose的volumes中添加静态文件目录挂载,让Nginx容器能访问到index.html:

volumes:
  - ./nginx_data:/etc/nginx/conf.d       # Nginx configurations
  - /etc/letsencrypt/:/etc/letsencrypt/  # Certificates for https
  - /home/ubuntu/web_server/public:/usr/share/nginx/html  # 挂载前端静态文件到Nginx容器

2. 修改Nginx配置

更新server块中的location /,优先处理静态文件,找不到时返回index.html交给前端路由处理,API请求单独代理:

server {
    server_name    example.com;

    location / {
        root /usr/share/nginx/html;
        try_files $uri $uri/ /index.html;
    }

    location /api {
        proxy_pass http://192.168.x.y:5000;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection 'upgrade';
        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;
        proxy_cache_bypass $http_upgrade;
    }
}

server {
    if ($host = example.com) {
        return 301 https://$host$request_uri;
    } # managed by Certbot
    server_name    example.com;
    listen 80;
    return 404; # managed by Certbot
}

方案二:Node服务处理前端路由(静态文件由Node托管)

如果你的Node服务本身负责托管前端静态文件,无需修改Nginx挂载,只需在Node服务中添加路由 fallback:
以Express为例,添加以下代码:

const express = require('express');
const path = require('path');
const app = express();

// 托管前端静态文件
app.use(express.static(path.join(__dirname, 'public')));

// 挂载API路由
app.use('/api', require('./routes/api'));

// 所有非API、非静态文件的请求,返回index.html让前端路由处理
app.get('*', (req, res) => {
    res.sendFile(path.join(__dirname, 'public', 'index.html'));
});

app.listen(5000, () => console.log('Server running on port 5000'));

此时Nginx的原有配置无需修改,所有请求代理到Node服务后,由Node处理路由 fallback。

原配置问题说明

你之前添加try_files未生效的原因是:Nginx容器内没有挂载/home/ubuntu/web_server/public目录,导致Nginx无法找到index.html,最终还是会将请求转发给Node服务,而Node服务没有对应前端路由的处理逻辑,因此返回404。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 15:15:14