Express.js站点通过Nginx发布时返回404 Not Found nginx/1.18.0 (Ubuntu)排查
问题原因及修复方案
核心错误原因
你遇到的404报错是因为Nginx的HTTPS配置段没有配置反向代理规则,所有HTTPS请求都被Nginx引导到本地磁盘查找静态文件,而没有转发到运行在3001端口的Express服务。同时配置中存在多处冗余错误设置。
具体错误点
- 443端口监听的server块中,
location /仅配置了错误的root参数,没有添加转发到3001端口的反向代理规则,这是404报错的直接诱因 - 所有
root参数配置错误:root指令需要指向静态资源所在的目录,你填写的是app.js的文件路径,属于无效配置,可直接删除 - 80端口的server块已经配置了全局301跳转到HTTPS,该块内的location /代理规则完全不会触发,属于冗余配置
修正后的Nginx配置
server { listen 80; server_name manucompany.com www.manucompany.com; return 301 https://www.manucompany.com$request_uri; access_log /var/log/nginx/access.log; error_log /var/log/nginx/error.log; } server { listen 443 ssl http2; listen [::]:443 ssl http2; server_name manucompany.com www.manucompany.com; ssl_certificate /etc/nginx/ssl/manucompany_chain.crt; ssl_certificate_key /etc/nginx/ssl/manucompany.key; ssl_session_timeout 1d; ssl_session_cache shared:MozSSL:10m; ssl_session_tickets off; # modern configuration ssl_protocols TLSv1.2 TLSv1.3; ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305; ssl_prefer_server_ciphers on; add_header Strict-Transport-Security "max-age=63072000" always; resolver 8.8.8.8; location / { proxy_pass http://localhost:3001; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection 'upgrade'; proxy_set_header Host $host; proxy_cache_bypass $http_upgrade; } }
后续操作步骤
- 保存修改后的配置文件,执行
nginx -t检查配置语法是否正确 - 确认无报错后执行
systemctl reload nginx重载Nginx配置 - 验证Express服务正常运行,可在服务器本地执行
curl http://localhost:3001确认服务能正常返回内容
内容的提问来源于stack exchange,提问作者Mahdi Ayyad
相关产品推荐
相关产品推荐

