![无法浏览 EC2 实例](https://linux22.com/image/583771/%E6%97%A0%E6%B3%95%E6%B5%8F%E8%A7%88%20EC2%20%E5%AE%9E%E4%BE%8B.png)
我目前对我的实例所属的默认安全组有以下设置。
但是,我无法浏览该网站。浏览器(Firefox)的响应是“Firefox 无法与 ec2-50-16-10-32.compute-1.amazonaws.com 上的服务器建立连接。”
更新#1:无输出netstat -pant | grep :80
输出自iptables -nvL
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
更新#2:
输出ps -ef | grep nginx
root 1080 1 0 01:22 ? 00:00:00 nginx: master process /opt/nginx/sbin/nginx
nobody 1082 1080 0 01:22 ? 00:00:00 nginx: worker process
nobody 1083 1080 0 01:22 ? 00:00:01 nginx: worker process
nobody 1084 1080 0 01:22 ? 00:00:01 nginx: worker process
nobody 1085 1080 0 01:22 ? 00:00:01 nginx: worker process
ubuntu 4001 3983 0 18:57 pts/1 00:00:00 grep --color=auto nginx
root 2601 842 0 06:52 pts/0 00:00:00 grep nginx
没有输出netstat -pant | grep nginx
答案1
“无法连接”错误通常可以从字面上理解 - 浏览器无法与远程服务器建立连接。这通常归结为以下两个原因之一:
- 网络问题,例如:
- 防火墙问题
- 本地和远程端
- 在远程端,这包括安全组和操作系统防火墙(例如 iptables)
- 连接(互联网/网络)问题
- 防火墙问题
- 服务器问题
- 通常,服务器没有监听指定的端口(对于 Web 服务器为 80)或者没有运行 Web 服务器。
您要么需要证明某事正在发生,要么反驳所有其他选项。
防火墙:
- 检查您的 EC2 安全组设置
- 您需要允许 TCP 端口 80 上来自所有来源的入站流量。
- Iptables:
- 确保没有规则会阻止端口 80(有时可能需要明确打开;例如,如果默认输入策略是 DROP,或者您以 DROP 结束规则集)。使用以下命令检查您的 iptables 配置:
iptables -nvL
- 确保没有规则会阻止端口 80(有时可能需要明确打开;例如,如果默认输入策略是 DROP,或者您以 DROP 结束规则集)。使用以下命令检查您的 iptables 配置:
- 检查您的 EC2 安全组设置
服务器问题:
如果您的计算机已连接到服务器(例如,可以通过 SSH 进入计算机,并且没有防火墙问题) - 那么您需要检查是否有服务器正在监听传入连接并能够对其做出响应。
检查你的 Web 服务器是否正在运行(对于 nginx 来说):
ps -ef | grep nginx
- 这应该会列出所有包含名称 nginx 的进程 - 如果没有,则表示 nginx 未运行。如果是这种情况,您应该尝试启动 nginx(启动服务器 nginx),并且(如果它之前正在运行,但现在不再运行)您应该检查错误日志。如果您在启动 nginx 时遇到错误,则必须先解决这些错误,然后才能使用它。
一旦确定服务器确实在运行,您需要验证它是否在监听正确的端口。虽然如果服务器尝试绑定的端口正在使用中,它通常会显示错误并且不会启动,但如果它只是使用不常见的端口(或仅使用 ipv6),问题可能并不明显。另一个常见问题是让 Web 服务器只监听环回接口,而不是所有接口或公共接口。
使用以下命令检查端口 80 上正在监听的内容(如果有):
netstat -pant |复制代码
如果您有理由怀疑 netstat(或者只是想尝试不同的方法),您将从以下位置获得类似的信息:
lsof -Pnl +M -i4
如果你看不到任何条目,则表示没有任何内容在监听端口 80
- 如果你看到 127.0.0.1:80,那么你的 Web 服务器正在监听环回接口,而不是公共接口 0.0.0.0:80 表示所有接口
- 10.xxx:80(私有 IP)表示公共接口(通常为 eth0)。值得注意的是,EC2 接口与私有 IP 地址相关联 - 公共地址单独通过 NAT 连接到实例。
您还可以使用以下命令检查 Nginx 是否正在监听 80 以外的端口:
netstat -pant | grep nginx
如果您发现自己处于异常情况,即 nginx 正在运行,但未侦听任何端口,则很有可能是您的配置存在问题。特别是,Nginx 仅在存在阻止时才绑定侦听器
server{}
- 如果您没有server{}
阻止,则无需绑定侦听器。(您可能还希望重新启动 Nginx,以确保您使用的是当前配置,并且没有其他问题)。