Skip to content

访问服务器 IP 时未显示 Nginx 默认的 “Welcome to nginx!” 页面,可能是 Nginx 未正常启动、端口被占用、配置错误或防火墙拦截等原因导致。以下是逐步排查步骤:

一、确认 Nginx 是否正常运行

首先检查 Nginx 进程是否启动,避免“安装成功但服务未运行”的情况。

  1. 查看 Nginx 进程
    bash
    ps -ef | grep nginx
    • 正常情况下会显示 master process(主进程)和 worker process(工作进程),例如:
      root      1234     1  0 10:00 ?        00:00:00 nginx: master process /opt/nginx/sbin/nginx
      nobody    1235  1234  0 10:00 ?        00:00:00 nginx: worker process
    • 若没有进程,说明 Nginx 未启动,执行启动命令:
      • 源码安装(/opt/nginx):sudo /opt/nginx/sbin/nginx
      • 包管理器安装:sudo systemctl start nginx

二、检查 Nginx 监听端口是否正确

Nginx 默认监听 80 端口(HTTP),若端口被占用或配置了其他端口,会导致无法访问。

  1. 查看 Nginx 监听的端口
    检查配置文件中 listen 指令(默认在 nginx.conf 或虚拟主机配置中):

    • 源码安装:cat /opt/nginx/conf/nginx.conf | grep "listen "
    • 包管理器安装(Ubuntu):cat /etc/nginx/nginx.conf /etc/nginx/sites-enabled/* | grep "listen "

    正常应显示 listen 80;(或其他自定义端口,如 8080)。

  2. 确认端口是否被占用
    若端口被其他程序(如 Apache、PHP-FPM)占用,Nginx 可能启动失败或无法监听该端口:

    bash
    # 查看 80 端口占用情况(替换为实际监听的端口)
    sudo netstat -tulpn | grep 80
    • 若显示其他进程占用(如 apache2),需停止该进程或修改 Nginx 监听端口(在配置文件中改 listen 8080;,再重载配置)。

三、检查防火墙是否拦截端口

即使 Nginx 正常运行,防火墙若未开放监听端口(如 80),外部也无法访问。

  1. 查看防火墙规则

    • Ubuntu/Debian(ufw)

      bash
      sudo ufw status

      若状态为 active,需确认 80/tcpNginx Full 规则已允许:

      bash
      # 若未允许,添加规则
      sudo ufw allow 80/tcp
      sudo ufw reload
    • CentOS/RHEL(firewalld)

      bash
      sudo firewall-cmd --list-all

      services 中无 http(对应 80 端口),添加规则:

      bash
      sudo firewall-cmd --permanent --add-service=http
      sudo firewall-cmd --reload
    • 临时关闭防火墙测试(快速验证是否为防火墙问题):

      bash
      # Ubuntu:
      sudo ufw disable
      # CentOS:
      sudo systemctl stop firewalld

      若关闭后可访问,说明是防火墙规则问题,重新配置允许端口即可。

四、检查 Nginx 配置是否正确

配置文件错误(如路径错误、语法错误)可能导致 Nginx 启动成功但无法加载默认页面。

  1. 检查配置文件语法

    bash
    # 源码安装:
    /opt/nginx/sbin/nginx -t
    # 包管理器安装:
    sudo nginx -t
    • 若显示 nginx: configuration file ... test failed,根据提示修改错误(如缺少分号、路径不存在)。
  2. 确认默认页面路径是否正确
    Nginx 默认页面(index.html)的路径由配置文件中的 root 指令指定:

    • 源码安装默认路径:/opt/nginx/html/index.html
    • 包管理器安装(Ubuntu):/usr/share/nginx/html/index.html

    检查该文件是否存在:

    bash
    # 替换为实际路径
    ls /opt/nginx/html/index.html
    • 若文件不存在,手动创建一个测试页面:
      bash
      echo "<h1>Welcome to nginx!</h1>" | sudo tee /opt/nginx/html/index.html
  3. 检查虚拟主机配置冲突
    若配置了多个 server 块,可能存在监听端口或 server_name 冲突,导致默认页面被覆盖。

    • 确保默认 server 块(通常 server_name localhost)的 root 路径正确,且无更高优先级的 server 块抢占请求。

五、通过日志定位错误

Nginx 错误日志会记录访问失败的具体原因(如权限不足、文件不存在)。

  1. 查看错误日志

    • 源码安装:cat /opt/nginx/logs/error.log
    • 包管理器安装:cat /var/log/nginx/error.log

    常见错误及解决:

    • Permission denied:Nginx 运行用户(如 nobody)无权限访问 root 目录或 index.html,执行 sudo chmod -R 755 /opt/nginx/html 并确保用户有读取权限。
    • No such file or directoryroot 路径或 index.html 不存在,检查路径是否正确。

六、其他测试方法

  1. 本地 curl 测试
    在服务器本地执行 curl http://localhostcurl http://127.0.0.1:80(替换为实际端口),若能返回页面内容,说明 Nginx 本身正常,问题可能在防火墙或网络层面(如服务器公网 IP 未绑定、端口映射错误)。

  2. 更换浏览器或清除缓存
    浏览器缓存可能导致旧页面残留,尝试用隐私模式访问或清除缓存后重试。

总结

按优先级排查:

  1. 确认 Nginx 进程正常运行 → 2. 检查监听端口是否被占用/防火墙是否开放 → 3. 验证配置文件语法和默认页面路径 → 4. 查看错误日志定位具体原因。
    多数情况是防火墙未开放端口、Nginx 未启动或配置文件路径错误,逐步排查即可解决。

Released under the MIT License.