Ubuntu 16.04下HTTP网站无法访问但HTTPS正常的问题求助
嗨,我来帮你解决Ubuntu 16.04里只能访问HTTPS、无法打开HTTP网站的问题!这种情况大概率是系统层面的网络规则、服务配置或者底层连接出了问题,咱们一步步排查:
HTTP默认用80端口,有可能iptables规则把这个端口拦住了。先看看当前的防火墙规则:
sudo iptables -L -n
如果看到有DROP或REJECT针对80端口的条目,先临时清空规则测试:
sudo iptables -F
清空后再试试访问HTTP网站,要是能打开了,就说明是防火墙的问题,之后可以用ufw来重新配置规则,避免误拦截。
虽然你已经禁用了浏览器代理,但系统里可能还有后台运行的代理服务(比如privoxy、squid)没彻底关掉,偷偷拦截HTTP请求。先看看正在运行的服务:
sudo systemctl list-units --type=service | grep -E '(proxy|filter)'
如果发现类似privoxy.service这类可疑服务,先停止并禁用:
sudo systemctl stop privoxy sudo systemctl disable privoxy
操作完再测试HTTP访问是否恢复。
HTTPS能访问不代表HTTP解析没问题,试试直接用IP访问HTTP站点:
curl -v http://93.184.216.34 # 这是example.com的官方IP
如果用IP能打开,说明是DNS解析的锅。可以切换到公共DNS服务器试试,比如Google的8.8.8.8:
编辑/etc/resolv.conf(如果是systemd-resolved管理的,改/etc/systemd/resolved.conf更稳妥):
sudo nano /etc/resolv.conf
修改成:
nameserver 8.8.8.8 nameserver 8.8.4.4
保存后测试解析是否正常:
nslookup wiki.ros.org
有时候网络管理器的代理设置可能没完全生效,哪怕你选了“无”。打开网络管理器,找到当前连接的网络,进入设置里的“代理”标签,确保选项是“无”,然后重启网络管理器:
sudo systemctl restart NetworkManager
透明代理的NAT规则如果没清理干净,会把HTTP请求转发到不存在的代理地址。查看NAT表:
sudo iptables -t nat -L -n
如果看到PREROUTING或OUTPUT链里有针对80端口的REDIRECT规则,清空NAT表:
sudo iptables -t nat -F
用nc工具测试和目标站点80端口的连接:
nc -zv wiki.ros.org 80
如果显示“connection refused”或者超时,说明网络层面连不上80端口,可能是ISP、路由器拦截了HTTP流量。可以试试切换手机热点上网,排除本地网络设备的问题。
恶意软件或错误配置可能修改hosts文件,把HTTP网站指向错误IP。查看hosts内容:
cat /etc/hosts
如果发现wiki.ros.org或其他HTTP站点的异常条目,直接删除后保存。
要是以上步骤都试过还是不行,把curl -v http://wiki.ros.org/lunar/Installation/Ubuntu的完整输出贴出来,我就能更精准地定位问题啦!
内容的提问来源于stack exchange,提问作者Mohammad_Hosseini

