首页 > 解决方案 > 如何调试从计算机到服务器的连接,服务器端

问题描述

我的 Centos 7 服务器正在运行 apache 2.4.6,并且正在使用 mod_wsgi 提供 django webapp。我的问题是我无法从另一台计算机的浏览器访问服务器 url。我没有从 apache 得到任何错误,它的启动和运行没有问题。我已在 http.conf 文件中将错误日志设置为“调试”,但仍然没有错误。我知道服务器实际上是通过 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下面有url、ip地址和localhostALLOWED_HOSTS

我如何调试这个问题,以便我有一个可以查看的错误?


日志:让我知道是否需要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

标签: djangoapachecentos7

解决方案


首先,我将重点验证您是否可以访问 Apache 服务器上的某些静态测试页面,因为它只在IPv6端口上侦听。(这是您的服务器上显示的最可疑的细节。也许您只为IPv4地址配置了 DNS,或者您也没有在 IPv6 地址上 ping6。如果它是公共服务器,那么它可能最终也应该在 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. 如果您通过浏览器检查任何内容,您应该使用开发人员工具Inspect (Ctrl+Shift+I)、Network 选项卡并查看问题是否仅与响应有关或仍与发送请求有关。

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

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

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


推荐阅读