Express.js Public文件夹公网访问异常:本地正常Nginx返回404
问题原因分析及解决方向
以下是导致通过服务器IP访问返回Nginx 404的核心原因及对应解决方向:
Nginx反向代理配置缺失或错误
这是最常见的问题。如果Nginx配置未将请求转发到Node.js的3000端口,Nginx会尝试在本地服务器的根目录寻找test.html,找不到就返回404。
错误示例配置:server { listen 80; server_name 你的服务器IP; root /usr/share/nginx/html; # Nginx默认静态目录,无反向代理规则 }正确配置需添加反向代理规则:
server { listen 80; server_name 你的服务器IP; location / { proxy_pass http://localhost:3000; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; } }Nginx配置未重载生效
修改Nginx配置文件后,必须执行重载命令让新配置生效,否则旧配置仍在运行。执行以下命令之一:sudo nginx -s reload # 或针对systemd管理的Nginx sudo systemctl reload nginxNode.js应用绑定地址限制
代码中app.listen(port)默认仅绑定localhost(127.0.0.1),虽然同一服务器的Nginx理论上可以访问,但如果服务器存在网络隔离策略,可能导致Nginx无法连接到3000端口。可以修改代码绑定所有网卡地址:app.listen(port, '0.0.0.0', () => { console.log(`Listening on port ${port}`) })防火墙/安全组限制本地端口访问
部分服务器的防火墙规则可能阻止Nginx进程访问本地的3000端口。检查防火墙规则,确保允许127.0.0.1访问3000端口,比如使用ufw的话:sudo ufw allow in from 127.0.0.1 to any port 3000Nginx Location匹配优先级冲突
如果配置文件中有其他优先级更高的Location规则(比如精确匹配location = /test.html),且该规则指向的路径不存在文件,就会返回404。检查配置中的所有Location规则,确保反向代理的location /能正确匹配请求。
内容的提问来源于stack exchange,提问作者Alekk
相关产品推荐
相关产品推荐

