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

如何修复Nginx中的404错误?附Nginx与Node.js配置求助

修复Nginx 404错误的方案

一、优先修改Nginx配置(核心问题)

你的Nginx配置里location /块的try_files指令逻辑错误,导致请求还没转发到Node服务就直接返回404。具体修复如下:

  1. 打开Nginx配置文件(通常路径为/etc/nginx/sites-available/default)
  2. 调整location /块的内容:
    方案一(推荐):直接移除错误的try_files指令,因为静态文件已由Node服务处理,Nginx无需提前校验本地文件:
server {
    listen 80;
    listen [::]:80 default_server;
    listen 4x.2xx.8x.9x;
    root /home/ubuntu/jilgyungyi_gpt;

    access_log /var/log/nginx/reverse-access.log;
    error_log /var/log/nginx/reverse-error.log;
    index index.html index.htm index.nginx-debian.html;

    server_name 4x.2xx.8x.9x;

    location / {
        proxy_set_header HOST $host;
        proxy_pass http://127.0.0.1:3000;
        proxy_set_header X-Real-IP $remote_addr;
    }
}

方案二:如果需要Nginx优先处理本地静态文件,再转发Node服务,可修改try_files逻辑:

server {
    listen 80;
    listen [::]:80 default_server;
    listen 4x.2xx.8x.9x;
    root /home/ubuntu/jilgyungyi_gpt;

    access_log /var/log/nginx/reverse-access.log;
    error_log /var/log/nginx/reverse-error.log;
    index index.html index.htm index.nginx-debian.html;

    server_name 4x.2xx.8x.9x;

    location / {
        try_files $uri $uri/ @node_server;
        proxy_set_header HOST $host;
        proxy_set_header X-Real-IP $remote_addr;
    }

    location @node_server {
        proxy_pass http://127.0.0.1:3000;
        proxy_set_header HOST $host;
        proxy_set_header X-Real-IP $remote_addr;
    }
}
  1. 验证配置合法性并重启Nginx:
sudo nginx -t
sudo systemctl restart nginx

二、Node.js端补充检查(若Nginx修改后仍有问题)

  1. 确认路由定义完整性:检查./routes/pages.js是否包含根路径/的路由,示例:
// pages.js
const express = require('express');
const router = express.Router();

router.get('/', (req, res) => {
    res.render('index'); // 对应你的hbs模板文件
});

// 其他业务路由...

module.exports = router;
  1. 添加全局404处理中间件(需放在所有路由定义之后):
// 在app.use(...路由...)代码块后添加
app.use((req, res) => {
    res.status(404).render('404'); // 或返回JSON格式:res.status(404).json({msg: '页面不存在'})
});
  1. 校验静态文件路径:确认publicDirectory = path.join(__dirname, "./public")指向的目录存在,且静态文件路径与路由无冲突。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 19:40:01