如何修复Nginx中的404错误?附Nginx与Node.js配置求助
修复Nginx 404错误的方案
一、优先修改Nginx配置(核心问题)
你的Nginx配置里location /块的try_files指令逻辑错误,导致请求还没转发到Node服务就直接返回404。具体修复如下:
- 打开Nginx配置文件(通常路径为
/etc/nginx/sites-available/default) - 调整
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; } }
- 验证配置合法性并重启Nginx:
sudo nginx -t sudo systemctl restart nginx
二、Node.js端补充检查(若Nginx修改后仍有问题)
- 确认路由定义完整性:检查
./routes/pages.js是否包含根路径/的路由,示例:
// pages.js const express = require('express'); const router = express.Router(); router.get('/', (req, res) => { res.render('index'); // 对应你的hbs模板文件 }); // 其他业务路由... module.exports = router;
- 添加全局404处理中间件(需放在所有路由定义之后):
// 在app.use(...路由...)代码块后添加 app.use((req, res) => { res.status(404).render('404'); // 或返回JSON格式:res.status(404).json({msg: '页面不存在'}) });
- 校验静态文件路径:确认
publicDirectory = path.join(__dirname, "./public")指向的目录存在,且静态文件路径与路由无冲突。
内容的提问来源于stack exchange,提问作者lucas
相关产品推荐
相关产品推荐

