AWS EC2 Ubuntu16.04实例Apache2网站无法访问排查求助
排查AWS EC2 Ubuntu 16.04上Apache2公网访问失败的问题
我来帮你一步步排查这个问题,这种情况通常是网络或本地配置的小疏漏,咱们逐个排除:
确认Apache2是否正确监听80端口
登录到EC2实例,执行命令:sudo netstat -tulpn | grep :80你需要看到输出里有
apache2进程,并且监听的是0.0.0.0:80或者:::80(表示监听所有网卡)。如果只显示127.0.0.1:80,说明Apache只绑定了本地回环地址,公网无法访问,这时候需要检查Apache的配置文件(比如/etc/apache2/ports.conf),确保Listen 80没有绑定特定IP。检查Ubuntu本地防火墙(UFW)
Ubuntu 16.04默认使用UFW防火墙,执行命令查看状态:sudo ufw status如果防火墙是开启状态,必须确保
80/tcp(HTTP)规则是允许的。如果没有,执行sudo ufw allow 80/tcp添加规则,然后重启UFW:sudo ufw reload。验证EC2实例的网络属性
- 确认实例是否分配了公网IP或弹性IP:在AWS控制台的EC2实例详情里,检查“公网IPv4地址”字段是否有值,如果为空,说明实例没有公网访问能力,需要分配弹性IP或者重启实例(如果是默认VPC下的实例,重启可能会自动分配临时公网IP)。
- 确认你使用的DNS地址
ec2-3-231-162-52.compute-1.amazonaws.com是否正确解析到实例的公网IP:在本地终端执行nslookup ec2-3-231-162-52.compute-1.amazonaws.com,看返回的IP是否和实例的公网IP一致。
再次核对安全组规则
- 确保安全组的入站规则里,有一条允许
TCP协议、80端口、源为0.0.0.0/0(或你需要访问的IP范围)的规则。 - 确认这个安全组已经关联到你的EC2实例:在实例详情的“安全组”标签里,检查是否是你配置的那个安全组。
- 确保安全组的入站规则里,有一条允许
测试实例本地访问Apache
在EC2实例上执行:curl http://localhost如果能返回Apache默认的HTML页面,说明服务本身没问题,问题出在网络层面;如果返回错误,说明Apache可能没正常启动,或者配置有误。可以用
sudo systemctl status apache2查看服务状态,或者sudo apache2ctl configtest检查配置文件语法。查看Apache错误日志
如果服务启动有问题,查看错误日志找线索:sudo tail -n 20 /var/log/apache2/error.log日志里会显示比如端口被占用、配置文件错误等具体问题。
内容的提问来源于stack exchange,提问作者Peter Szabo
相关产品推荐
相关产品推荐

