端口转发 - 未收到请求

端口转发 - 未收到请求

在我的路由器上,我将端口转发:80到我的 ubuntu 电脑的端口:80

在 ubuntu 电脑上运行Nginx反向代理将请求转发到其他机器。

问题是,Nginx没有收到任何请求,因此设置不起作用。

我已经sudo tcpdump -ni any port 80 -vv -s0 -w http.pcap在 ubuntu pc 上运行了,看到机器收到了请求。

当我http.pcap打开wireshark我看到了带有 TCP 重传的黑色数据包:

https://i.stack.imgur.com/RHuG3.png

Nginx 没有收到任何消息,PC 上没有启用防火墙。客户端接收超时。

我只收到这些数据包。这是什么意思?如何解决?

将端口重定向到不同的机器即可。

答案1

您的捕获显示端口 80 上的数据包已经收到,但你的 Ubuntu 服务器没有回应他们。您会看到客户端在一秒钟后再次尝试,然后又过了几秒钟,但没有 SYN + ACK 响应,从而无法建立 TCP 连接。

(黑色只是表示 Wireshark 将其识别为先前看到的数据包的重新传输。)

真正的 HTTP 请求只会显示从第四数据包,即只有 TCP 连接完全建立后才会发送。在连接建立前,Nginx 也不会收到有关连接的通知。

  • 检查服务器的防火墙(iptables、ufw、nft)以确保它允许入站连接。(此外,如果您的配置非常严格,请确保它也不会阻止出站响应...)

  • 是的,即使“电脑上没有启用防火墙”,也要检查防火墙反正。sudo iptables-save,再跑sudo nft list ruleset

  • 检查其他软件是否可以在80端口接收连接:停止nginx,安装netcat,运行sudo nc -vvlp 80,尝试连接。

  • 检查服务器是否响应其他端口上的连接,例如 443 或 8080 或 12345。

  • 如果您的服务器有多个网络接口,请检查sysctl net.ipv4.conf.all.rp_filter参数 - 如果将其设置为“1”,则会导致数据包被丢弃。(“2”是可以的,虽然有点没意义。)

相关内容