如何调试从计算机到服务器的连接,服务器端

How to debug connection from computer to server, server-side

我的 Centos 7 服务器是 运行 apache 2.4.6,并且正在使用 mod_wsgi 提供 django webapp。我的问题是我无法从另一台计算机的浏览器访问服务器 url。我没有从 apache 及其启动程序中收到任何错误,运行 没问题。我已经在 http.conf 文件中将错误日志设置为 'debug',但仍然没有错误。我知道服务器实际上是通过 ping 连接到互联网的,我知道它正在通过 运行

监听端口 :80

netstat -tunlp | grep 80.

tcp        0      0 0.0.0.0:60080           0.0.0.0:*               LISTEN      3841/name-gu 
tcp6       0      0 :::80                   :::*                    LISTEN      13882/httpd  

我也暂时关闭了服务器端的所有防火墙

我的 settings.py 在 ALLOWED_HOSTS

下有 url、ip 地址和本地主机

如何调试此问题以便我可以查看错误?


日志: 让我知道是否需要更多信息 运行 tcpdump -nn tcp port 80 在服务器计算机上 然后在我的机器上 运行 curl -v myurl.com 并在我的服务器上得到这些结果:

13:11:52.225076 IP 10.0.24.67.40658 > 10.0.26.20.80: Flags [S], seq 3327782620, win 29200, options [mss 1460,sackOK,TS val 36451589 ecr 0,nop,wscale 7], length 0
13:11:52.225355 IP 10.0.26.20.80 > 10.0.24.67.40658: Flags [S.], seq 1689726058, ack 3327782621, win 28960, options [mss 1460,sackOK,TS val 73904848 ecr 36451589,nop,wscale 7], length 0
13:11:52.225960 IP 10.0.24.67.40658 > 10.0.26.20.80: Flags [.], ack 1, win 229, options [nop,nop,TS val 36451590 ecr 73904848], length 0
13:11:52.226198 IP 10.0.24.67.40658 > 10.0.26.20.80: Flags [P.], seq 1:101, ack 1, win 229, options [nop,nop,TS val 36451590 ecr 73904848], length 100: HTTP: GET / HTTP/1.1
13:11:52.226448 IP 10.0.26.20.80 > 10.0.24.67.40658: Flags [.], ack 101, win 227, options [nop,nop,TS val 73904849 ecr 36451590], length 0
13:11:52.231414 IP 10.0.26.20.80 > 10.0.24.67.40658: Flags [P.], seq 1:286, ack 101, win 227, options [nop,nop,TS val 73904854 ecr 36451590], length 285: HTTP: HTTP/1.1 200 OK
13:11:52.232052 IP 10.0.24.67.40658 > 10.0.26.20.80: Flags [.], ack 286, win 237, options [nop,nop,TS val 36451596 ecr 73904854], length 0
13:11:52.232814 IP 10.0.24.67.40658 > 10.0.26.20.80: Flags [F.], seq 101, ack 286, win 237, options [nop,nop,TS val 36451597 ecr 73904854], length 0
13:11:52.233003 IP 10.0.26.20.80 > 10.0.24.67.40658: Flags [F.], seq 286, ack 102, win 227, options [nop,nop,TS val 73904856 ecr 36451597], length 0
13:11:52.233414 IP 10.0.24.67.40658 > 10.0.26.20.80: Flags [.], ack 287, win 237, options [nop,nop,TS val 36451597 ecr 73904856], length 0

首先,我将重点验证您是否可以访问 Apache 服务器上的某些静态测试页面,因为它仅在 IPv6 端口上侦听。 (这是您的服务器上出现的最可疑的细节。也许您只为 IPv4 地址配置了 DNS,或者您没有对 IPv6 地址执行 ping6。如果它是 public 服务器,那么它最终也应该在 IPv4 上监听。很明显,没有服务在 IPv4 tcp 端口 80 上监听,也没有代理。)如果不是问题,那么我将描述一个策略“调试”:

...太好了,您检查了一些有用的特定事实,但最有效的策略是尝试 平分 一大片可能出现问题的区域,将其分成“一半”大小的区域可以独立检查它们是否有效,以及如果该区域的任何内容损坏,它将如何具体表现出来。

我会在 访问日志 /var/log/httpd/access_log(CentOS 上的默认 Apache 日志)中查看 Apache 已收到请求以及状态代码是什么以及响应大小为零或非零,Apache 和浏览器之间一切正常。在您开始怀疑防火墙等之前,通过来自同一服务器 的一个请求 轻松测试服务器更有用,例如通过命令行实用程序 wget -S -O - http://mysite.example.comcurl -i http://mysite.example.com 对其进行测试。如果您通过浏览器检查任何内容,您应该使用 开发人员工具 检查 (Ctrl+Shift+I),网络选项卡并查看问题是仅与响应有关还是与发送请求有关.

我最终还会验证来自 Python/Django 的日志记录是否有效,并且您正在查看正确的 Python 日志 ,例如通过在 models.py 的末尾添加 log.info("something") 命令,不仅您没有看到任何错误。

文本“我无法从我的浏览器访问服务器 url”需要更多信息,了解其确切含义。从字面上看,这将意味着问题不会与 Django/Python 相关,但在 Apache 和浏览器之间,如果它真的无法启动连接并发送请求 headers 。缺少响应需要主要考虑 Django/Python。即使是未配置的 Apache 也会显示一个测试页面,并且可以通过 ip 地址访问,而无需有效的 DNS:http;//numeric.ip.address。您可以验证是否可以在同一域中临时配置一个简单的测试静态站点...

编辑 调试通过评论中的回复和建议以及问题中添加的格式化日志继续进行。逻辑流程比简历更重要