我目前无法浏览托管在我的 EC2 实例上的网站(我收到“无法连接”错误)。
我尝试在我的 EC2 实例上设置 Node.js,作为该过程的一部分,我执行了以下命令:
iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to 3000
Node.js 运行正常,但我想删除上面创建的新规则。最终我意识到执行以下操作将删除该规则:
iptables -t nat -D PREROUTING -p tcp --dport 80 -j REDIRECT --to 3000
然而,这样做之后我仍然无法浏览该网站。
我遇到了类似问题的答案,并遵循了概述的步骤:https://serverfault.com/a/387774。
防火墙
- 我允许来自 TCP 端口 80 的所有来源的入站流量。
- 我不相信有任何 iptable 规则会阻止端口 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
服务器问题
- Apache 正在我的实例上运行,我已多次重启它。这是输出
ps -ef | grep apache
:
root 630 1 0 19:29 ? 00:00:00 /usr/sbin/apache2 -k start www-data 665 630 0 19:29 ? 00:00:01 /usr/sbin/apache2 -k 启动 www-data 666 630 0 19:29 ? 00:00:00 /usr/sbin/apache2 -k 启动 www-data 667 630 0 19:29 ? 00:00:00 /usr/sbin/apache2 -k 启动 www-data 668 630 0 19:29 ?00:00:00 /usr/sbin/apache2 -k 启动 www-data 671 630 0 19:29 ? 00:00:00 /usr/sbin/apache2 -k 启动 www-data 878 630 0 19:44 ?00:00:00 /usr/sbin/apache2 -k 启动 www-data 879 630 0 19:44 ?00:00:00 /usr/sbin/apache2 -k 启动 www-data 880 630 0 19:44 ?00:00:00 /usr/sbin/apache2 -k 启动 ubuntu 896 760 0 20:15 pts/0 00:00:00 grep --color=auto apache
- 我已经检查了我的“ports.conf”文件,并且 Apache 设置为监听端口 80。但是,这是输出
netstat -pant | grep :80
:
(无法读取“-p”的信息:geteuid()=1000 但您应该是 root 。) tcp 0 0 0.0.0.0:80 0.0.0.0:* 侦听 -
并且lsof -Pnl +M -i4
没有给我任何条目。所以,我不确定这是否配置正确。Apache 没有监听任何其他端口。
有人知道可能是什么问题吗?
PS 在删除 iptables 规则之前我确实执行了iptables -F
。我不确定这是否会导致问题。
PPS 我使用 SSH 连接到我的实例ssh -i mywebsite.pem ubuntu@<ip address of my instance>
,但是,每当我这样做时,它总是超时。我的解决方法是将 IP 地址替换为我的实例的公共 DNS,这样我就可以连接了。我不确定这是否相关。
更新:
我iptables -L -t nat
得到:
链 PREROUTING(策略接受) 目标 保护 优化 源 目标 链输入(策略接受) 目标 保护 优化 源 目标 链输出(策略接受) 目标 保护 优化 源 目标 链 POSTROUTING(策略接受) 目标 保护 优化 源 目标
答案1
从你的帖子和评论中的跟进来看,你似乎做对了所有事情。根据我的经验,这意味着我忽略了一些细小而基本的事情。基于这个前提,我发现有两件事可能会给你带来麻烦:
- iptables - 我发现 AWS 安全组足以满足防火墙需求,因此至少作为实验,您可以关闭 iptables 以查看是否可以访问您的 Web 服务器。如果它们是您的安全配置文件的重要组成部分,您可以在实验后立即重新启动它们。
- IP 地址 - 您提到将
ssh
连接从实例 IP 更改为公共 DNS,这告诉我您正在运行弹性 IP,但您没有明确说明要使用哪个 IP 地址进行 Web 连接。我一直发现,一旦我将弹性 IP 与实例关联,我就无法再通过内部 IP 以任何方式访问该实例。在这种情况下,这意味着需要协调多个层:允许 TCP/80 流量到服务器的 DNS 和安全规则、配置为允许流量到该地址的防火墙规则、配置为响应该地址(或 0.0.0.0)的 Web 服务器。
答案2
事实证明我的弹性 IP 不知为何与我的实例断开了关联。重新关联后问题就解决了。