我有这种情况完全让我感到困惑:
一个新设置的服务器(centos 7,apache,mysql,没什么奇怪的),它提供了一个简单的php应用程序,我需要在另一台服务器上与我的主应用程序进行交互。 这个服务被设置为在service.name.domain.tld上运行,而主应用程序在domain.tld上(只是提及以防万一)。
由于某些原因,当我尝试从主服务器访问服务应用程序时,我得到了一个无限循环的302redirect。
如果我从主服务器上执行curl -D - http://service-name.domain.tld ,我会得到:
HTTP/1.1 302 Found Date: Wed, 03 Aug 2016 12:30:26 GMT Server: Apache Location: http://service-name.domain.tld Content-Length: 218 Connection: close Content-Type: text/html; charset=iso-8859-1 <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN"> <html><head> <title>302 Found</title> </head><body> <h1>Found</h1> <p>The document has moved <a href="http://email-blasts.upgradesale.co">here</a>.</p> </body></html>
如果我从我的电脑执行相同的命令,结果是
HTTP/1.1 200 OK Date: Wed, 03 Aug 2016 12:31:39 GMT Server: Apache/2.4.6 (CentOS) PHP/5.6.24 X-Powered-By: PHP/5.6.24 Cache-Control: no-cache Content-Length: 30 Content-Type: text/html; charset=UTF-8 Welcome.
它应该是。 对于我所做的任何请求也是如此(甚至是静态文件)。 另外我应该指定相同的情况发生在PHP中的wget和get_file_contents
我现在真的迷失了,不知道从哪里出发。 所以任何一种方向都非常感激。
我应该提到2台服务器不在同一个networking上。 主应用程序托pipe在LiquidWeb上,新服务器在Linode上。
同样为了将子域指向Linode服务器,我在CPanel的DNS编辑器中创build了一个Alogging。
从domain.tld服务器运行ping会产生:
64 bytes from li1014-180.members.linode.com (xx.xx.xx.xxx): icmp_seq=1 ttl=64 time=0.022 ms
来自我的本地电脑的相同命令:
64 bytes from (xx.xx.xx.xxx): icmp_seq=0 ttl=52 time=114.982 ms
按照达米亚诺的指示运行tcpdump,我发现主服务器的请求没有到达新的服务器,而是似乎主服务器也响应。 任务继续找出原因。
另外,主服务器正在运行CPanel,所以可能与此有关…
在服务服务器上运行sudo tcpdump -n -i eth0 icmp时,如果从本地计算机ping service-name.domain.tld ,则可以看到服务器上的stream量进出,但是从主服务器运行相同的命令服务器在服务器上不给我任何东西(如果我使用tcpdump过滤HTTPstream量并发出curl请求,也是如此)。
我放弃了克隆Linode,得到了一个新的IP,现在它工作正常…¯_(ツ)_ /¯
你问“方向”,所以…这是我的。
在你的两个成绩单中,我看到了第一个成绩单:
[...] Server: Apache [...]
在第二个,这个:
[...] Server: Apache/2.4.6 (CentOS) PHP/5.6.24 [...]
即使是那些两个不同的HTTP响应( 302 Found第一个, 200 OK第二个),我敢打赌,这两个响应来自不同的 Web服务器。 所以我们试着去调查这样一个假设…
作为第一步,正如@HBruijn评论中已经提到的那样,我们需要确保两个HTTP客户端都打开对同一个HTTP服务器的HTTP连接。 请每个人运行:
ping service-name.domain.tld
并确保在输出中看到相同的IP地址。 如果不是的话,让我们在这里停下来,并且…在不同的问题上向前迈进:-)
如果两个pingparsing为相同的IP地址,那么故障排除过程实际上是不同的,根据三台主机的“相对”位置:“客户端A”和“客户端B”是否连接到同一个以太网LAN /网段? 是“服务器C”连接到同一个以太网LAN /网段?
如果三台计算机连接到同一个局域网,那么要检查的可能是“客户端A”和“客户端B”从“服务器C”IP地址的ARP分辨率获得的MAC地址。 在PING之后(在“客户端A”和“客户端B”与“服务器C”之间),运行(在“客户端A”和“客户端B”上)一个arp -an <ip.of.server.c> 。 你会得到像这样的东西:
verzulli@iMac-Chiara:~$ ping 192.168.2.1 PING 192.168.2.1 (192.168.2.1) 56(84) bytes of data. [...] verzulli@iMac-Chiara:~$ arp -an 192.168.2.1 ? (192.168.2.1) associato a c0:c1:c0:e8:0f:12 [ether] su wlan0 verzulli@iMac-Chiara:~$
在上面你看到我的“服务器”(192.168.2.1)的MAC地址是c0:c1:c0:e8:0f:12 。 在你的情况下,确保“客户端A”和“客户端B”都是一样的。 请再次注意, 只有当客户端A和客户端B位于服务器C的同一个以太网段时,才有效 。
如果“客户端A”和“客户端B”在不同的networking上和/或“服务器C”远离他们,那么我们唯一的机会是当“客户端A”和“客户端B”都检查到“服务器C” “试图达到它。 不幸的是,在这里我们也有不同的方法,取决于三个主机的相对位置。 让我们假设最坏的情况:连接到两个不同的局域网(可能是一个大公司的两个远程站点)的“客户端A”和“客户端B”连接到第三个站点(大公司总部) 。 当到达“服务器C”时,“客户端A”和“客户端B”都被NAT。
在这种情况下,我们需要在到达“服务器C”时发现分配给“客户端A”和“客户端B”的“公共”IP地址。 有很多方法可以得到这个信息。 作为一种快速(…非常肮脏)的方式来获得结果,你可以启动:
verzulli@iMac-Chiara:~$ curl -s http://ipinfo.io | grep '"ip":' "ip": "2.239.77.181",
在那里你可以看到我的NAT地址(由我的提供商分配给我的主机离开它的networking时)是2.239.77.181 。
所以,现在我终于可以请求“服务器C”向我展示来自我的IP的stream量,并且……只要注意是否真的有什么东西进来。
在服务器上:
[root@srv-01 ~]# tcpdump -n -i eth0 host 2.239.77.181 and icmp tcpdump: verbose output suppressed, use -v or -vv for full protocol decode listening on eth0, link-type EN10MB (Ethernet), capture size 65535 bytes
它会….开始等待,来自2.239.77.181传入的icmp(ping)数据包。 只要我从客户端,将PING,这样的数据包将显示:
[root@srv-01 ~]# tcpdump -n -i eth0 host 2.239.77.181 and icmp tcpdump: verbose output suppressed, use -v or -vv for full protocol decode listening on eth0, link-type EN10MB (Ethernet), capture size 65535 bytes 16:28:21.031355 IP 2.239.77.181 > 78.47.127.152: ICMP echo request, id 60237, seq 1, length 64 16:28:21.031392 IP 78.47.127.152 > 2.239.77.181: ICMP echo reply, id 60237, seq 1, length 64
在那里你可以看到来自我的客户端的PING(icmp echo request)以及来自服务器的响应(icmp echo reply)。
如果你喜欢检查每种stream量(而不仅仅是ICMP),你可以尝试(在“服务器C”上):
tcpdump -n -i eth0 host 2.239.77.181
的,如果你只想检查HTTPstream量:
tcpdump -n -i eth0 host 2.239.77.181 and port 80
就这样。
根据以上所述,您应该能够检查“客户端A”和“客户端B”是否到达“服务器C”(而不是两个不同的Web服务器)。 一旦得到这个信息,回到这里确认这一点,我可以更新这个答案一步。