记录一个访问nginx欢迎页失败的奇怪问题

本文记录了一次在64位CentOS7系统中安装Nginx并配置防火墙允许80端口访问的详细过程。在遇到电脑无法访问网站而手机可以访问的奇怪现象后,通过深入排查发现重启防火墙配置为解决问题关键,并对可能原因进行了探讨。

今天,在64位centos7系统上装了nginx服务,碰到如下问题

  • 检查80端口是否开启
    firewall-cmd --query-port=80/tcp
    显示‘no’

  • 开启80端口
    firewall-cmd --zone=public --add-port=80/tcp --permanent
    显示‘success’

  • 开启nginx服务
    systemctl restart nginx

验证步骤如下:

  1. 用电脑谷歌浏览器访问ip地址,打不开
  2. 用电脑谷歌浏览器访问域名,同样打不开
  3. 换成手机浏览ip和域名都能看到nginx的欢迎页面
  4. 清除电脑谷歌浏览器缓存,更改dns,打不开
  5. 换成电脑搜狐和ie浏览器,打不开
  6. 用电脑连接手机的热点,访问打不开
  7. 把电脑调成disable path mtu discovery,打不开
  8. 用电脑ping 域名能返回正确的ip地址
  9. telnet 域名 80 连接失败
  10. telnet ip 80 连接失败
  11. 登录centos7,执行firewall-cmd --query-port=80/tcp显示‘no’

???????????嘛情况?

  1. 重新执行 firewall-cmd --zone=public --add-port=80/tcp --permanent显示‘success’
  2. 再次执行firewall-cmd --query-port=80/tcp显示‘no’
  3. 执行firewall-cmd --reload # 重新载入防火墙配置,显示‘success’
  4. 执行firewall-cmd --query-port=80/tcp显示‘yes’
  5. 用电脑访问域名和ip都能打开了

虽然现在把问题解决了,但是出现的两个问题倒是有点奇怪:

  1. 我之前执行 firewall-cmd --zone=public --add-port=80/tcp --permanent没有执行reload就可以直接把80端口打开,为什么这次失败了?
  2. 既然80端口没打开,电脑不能访问网站,但是手机为什么却可以?(手机浏览器缓存清除,更换手机浏览器测试,都能正常访问)

第1个问题不好排查,毕竟问题不太容易复现(懒的搞),为了找出第2个问题的原因所在,做了如下尝试:

  1. 登录centos7系统关闭80端口,执行reload确认80端口已关闭
  2. 电脑浏览器访问域名,失败
  3. 手机自带浏览器访问域名,成功
  4. 进入手机设置页面,清除自带浏览器数据(相当于给手机浏览器恢复出厂设置),访问域名,失败
  5. 用手机谷歌浏览器访问域名,失败

总结:
问题已经得到处理,但是出现的原因未能十分确定
打开80端口必须要reload才能生效吗?
在设置里彻底清除手机浏览器数据才能更好的做测试?

<think>好的,我现在需要帮助用户解决在Linux系统启动Nginx后无法访问欢迎面的问题。首先,我应该按照用户提供的系统级指令来组织回答,确保使用正确的中文和LaTeX格式。用户提到启动Nginx后无法看到欢迎面,可能的原因有很多,我需要一步一步来排查。 首先,用户可能没有正确安装Nginx,或者安装过程中出现了问题。但用户已经启动了Nginx,所以可能安装没问题,但服务没有正常运行。第一步应该是确认Nginx是否真的在运行。可以通过检查服务状态来确定,比如使用`systemctl status nginx`命令。如果状态显示为active (running),说明服务已经启动;否则可能需要进一步查看错误日志。 接下来,如果服务确实在运行,但无法访问,可能是防火墙的问题。Linux系统常见的防火墙有ufw和firewalld,用户可能没有开放80或443端口。需要指导用户检查防火墙设置,确保对应的端口是开放的。例如,使用`sudo ufw allow 80`来开放HTTP端口。 另外,SELinux也可能阻止Nginx访问端口。用户可能需要暂时禁用SELinux或者调整策略,但这可能涉及安全风险,所以需要提醒用户谨慎操作,或者设置正确的SELinux规则。 然后是配置文件的问题Nginx的默认配置文件通常包括对欢迎面的配置,但用户可能修改了默认配置,导致根目录指向错误的位置。需要检查`/etc/nginx/sites-enabled/default`或类似的配置文件,确认`root`指令指向正确的目录,比如`/usr/share/nginx/html`,并且index指令包括`index.html`。 此外,端口冲突也是一个可能性。例如,Apache或其他服务可能占用了80端口,导致Nginx无法绑定。用户可以使用`sudo lsof -i :80`来查看是否有其他进程占用了该端口,如果有,需要停止这些服务或重新配置Nginx使用其他端口。 还有可能是网络问题,比如本地回环测试无法反映实际情况。用户应该在另一台机器上访问,或者使用curl在本地测试,比如`curl http://localhost`,看看是否能获取欢迎面的HTML内容。如果curl能获取到,说明问题可能出在外部网络或客户端配置上。 最后,日志文件是排查问题的关键。Nginx的错误日志通常位于`/var/log/nginx/error.log`,访问日志在`/var/log/nginx/access.log`。查看这些日志可以帮助定位具体的错误信息,比如权限问题、文件未找到,或配置语法错误。用户需要检查这些日志,并根据错误信息进行相应的调整。 总结下来,我需要按步骤引导用户检查服务状态、防火墙设置、配置文件、端口占用、网络连接以及日志文件,逐步排除可能的原因,直到找到问题所在。同时,在回答中使用正确的LaTeX格式,比如行内公式用`$...$`,独立公式用`$$...$$`,并确保结构清晰,用中文详细解释每个步骤。</think>当Linux系统中Nginx已启动但无法访问欢迎面时,可按以下步骤排查: --- ### **1. 确认Nginx服务状态** - **检查运行状态**: ```bash systemctl status nginx ``` - 若显示 `active (running)`,则服务已启动。 - 若未运行,尝试启动并观察报错: ```bash sudo systemctl start nginx ``` --- ### **2. 排查防火墙或SELinux限制** - **开放80/443端口**: - 使用`ufw`(Ubuntu): ```bash sudo ufw allow 80/tcp sudo ufw reload ``` - 使用`firewalld`(CentOS): ```bash sudo firewall-cmd --permanent --add-service=http sudo firewall-cmd --reload ``` - **临时禁用SELinux**(仅测试用): ```bash sudo setenforce 0 ``` --- ### **3. 检查Nginx配置文件** - **验证默认站点配置**: - 确认配置文件(如`/etc/nginx/sites-enabled/default`)包含以下内容: ```nginx server { listen 80; root /usr/share/nginx/html; index index.html; } ``` - 检查配置文件语法: ```bash sudo nginx -t ``` - **重启Nginx**: ```bash sudo systemctl restart nginx ``` --- ### **4. 排查端口冲突** - **查看80端口占用**: ```bash sudo lsof -i :80 ``` - 若其他进程(如Apache)占用端口,需停止冲突服务或修改Nginx监听端口。 --- ### **5. 本地访问测试** - **使用`curl`验证本地响应**: ```bash curl http://localhost ``` - 若返回HTML内容,说明Nginx正常,问题可能为网络或客户端配置。 - 若失败,检查Nginx错误日志: ```bash tail -f /var/log/nginx/error.log ``` --- ### **6. 检查文件权限** - **确认欢迎面文件存在**: ```bash ls /usr/share/nginx/html/index.html ``` - **调整目录权限**: ```bash sudo chmod -R 755 /usr/share/nginx/html sudo chown -R nginx:nginx /usr/share/nginx/html ``` --- ### **7. 网络问题排查** - **检查IP地址绑定**: - 确认Nginx绑定到`0.0.0.0`而非`127.0.0.1`: ```nginx server { listen 80 default_server; listen [::]:80 default_server; } ``` --- ### **总结** 按以上步骤依次排查,重点关注: - 服务是否实际运行 - 防火墙/SELinux是否放行 - 配置文件语法和路径正确性 - 端口是否被占用 - 日志中的明确错误提示(如`Permission denied`或`File not found`) 若仍无法解决,请提供以下信息: 1. `systemctl status nginx`输出 2. `sudo nginx -T | grep "server"`的配置片段 3. 错误日志内容(`/var/log/nginx/error.log`)
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值