在我的路由器上,我将端口转发: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”是可以的,虽然有点没意义。)