You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

同服务器内curl域名失败但外部可访问,请求排查解决方法

排查服务器本地无法访问自身域名的连接拒绝问题

咱们先明确你的环境和现象:
你的Web架构是:cloudflare CDN ----> Nginx ---> Web,示例域名为www.weba.com

  • 外部机器访问完全正常:执行 curl www.weba.com 能拿到正常响应
  • 服务器本地终端访问出问题:
    • curl www.weba.com 返回 url: (7) Failed to connect to www.weba.com port 80: Connection refused
    • ping www.weba.com 能正常收到回复
    • traceroute www.weba.com 只显示一跳就结束

一步步排查的思路和操作

1. 先搞清楚服务器本地的DNS解析结果

首先得确认服务器自己解析www.weba.com拿到的是什么IP——毕竟Cloudflare的解析,服务器本地和外部可能拿到不同的节点IP,或者甚至是服务器自身的内网/回环IP?
执行下面的命令看解析结果:

dig www.weba.com
# 或者用nslookup,更简单
nslookup www.weba.com
  • 如果解析出来的是Cloudflare的公网IP:那大概率是服务器本地的防火墙/网络策略阻止了出站到这个IP的80端口请求
  • 如果解析出来的是服务器的内网IP或者127.0.0.1:那问题基本在Nginx的监听配置上——Nginx没监听这个IP的80端口

2. 检查Nginx的监听配置

打开你的Nginx站点配置文件(通常在/etc/nginx/sites-available/www.weba.com或者/etc/nginx/conf.d/www.weba.com.conf),看listen指令的写法:

  • 如果是 listen 80; 或者 listen 0.0.0.0:80;:这表示监听所有网卡的80端口(包括回环、内网、公网),那监听层面没问题,继续往下排查
  • 如果是 listen 你的公网IP:80;:那Nginx只监听公网网卡的80端口,服务器本地用内网/回环IP访问时自然连不上

如果是第二种情况,把listen改成listen 0.0.0.0:80;(或者直接写listen 80;),然后重启Nginx生效:

systemctl restart nginx

3. 检查服务器本地的防火墙/安全组

如果解析到的是Cloudflare的公网IP,那得确认服务器的防火墙允许出站访问80端口:

  • 用iptables查看出站规则:
iptables -L OUTPUT -n -v

看看有没有拒绝目标端口80的规则

  • 用firewalld的话,先看当前规则:
firewall-cmd --list-all

如果不确定,临时关闭firewalld测试一下:

systemctl stop firewalld
# 再执行curl www.weba.com试试,如果能通,说明是firewalld的规则问题,再重新配置允许出站http即可

4. 检查Cloudflare的安全策略

有时候Cloudflare的WAF或者安全规则会把服务器自身的公网IP识别为“异常来源”,直接拦截请求:
你可以登录Cloudflare后台检查:

  • 防火墙 -> WAF规则:有没有针对服务器IP的拦截规则
  • 安全 -> 安全级别:是不是设得过高(比如“高”或者“本质上有害”)
  • 也可以临时把服务器的公网IP加入Cloudflare的“信任IP列表”,再测试看看

5. 检查服务器的hosts文件

看看服务器本地的/etc/hosts有没有把www.weba.com指向错误的IP,比如指向127.0.0.1但Nginx没监听回环的80端口?
执行命令查看:

cat /etc/hosts | grep weba.com

如果有错误的映射行,直接删掉就行。

6. 用telnet/nc测试端口连通性

直接测试服务器到解析出的IP的80端口能不能连通:

# 假设解析出来的IP是104.16.88.100,替换成你实际的IP
telnet 104.16.88.100 80
# 或者用nc,输出更清晰
nc -zv 104.16.88.100 80
  • 如果连不通:说明是网络层面的问题(防火墙、路由或者Cloudflare那边拦截)
  • 如果能通:那可能是Nginx的虚拟主机配置问题——比如Nginx没匹配到www.weba.com的虚拟主机,检查配置里的server_name是不是正确写了www.weba.com

内容的提问来源于stack exchange,提问作者鄭元傑

火山引擎 最新活动