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

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 nginx
    
  • Node.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 3000
    
  • Nginx Location匹配优先级冲突
    如果配置文件中有其他优先级更高的Location规则(比如精确匹配location = /test.html),且该规则指向的路径不存在文件,就会返回404。检查配置中的所有Location规则,确保反向代理的location /能正确匹配请求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 17:31:09