Réponse étrange 302 du serveur Apache

J'ai cette situation qui est complètement confuse:

Installation

Server récemment configuré (centos 7, apache, mysql, rien de spécial), qui contient une application simple php, Avec qui j'ai besoin d'interagir de mon application principale sur un autre serveur. Ce service est configuré pour fonctionner sur service-name.domain.tld, Tandis que l'application principale est sur domain.tld (Juste mentionner si cela compte).

Ce problème

Pour une raison quelconque, lorsque j'essaie d'accéder à l'application de service à partir du serveur principal, je reçois un cycle infini de 302 Redirection.

Si je fais

curl -D - [url=http://service-name.domain.tld]http://service-name.domain.tld[/url]

Depuis le serveur principal, je reçois:

HTTP/1.1 302 Found
Date: Wed, 03 Aug 2016 12:30:26 GMT
Server: Apache
Location: [url=http://service-name.domain.tld]http://service-name.domain.tld[/url]
Content-Length: 218
Connection: close
Content-Type: text/html; charset=iso-8859-1

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="[url=http://email-blasts.upgradesale.co">here</a>.</p>]http://email-blasts.upgradesal ... gt%3B[/url]
</body></html>

Si je remplisse la même commande de mon ordinateur, le résultat sera

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.

Comme cela devrait être. La même chose arrive avec n'importe quelle demande (Même avec des fichiers statiques). Je dois également indiquer que la même situation se produit pour

wget

et

get_file_contents

dans php

Je me suis vraiment perdu en ce moment, ne sachant pas où aller plus loin. Donc, n'importe quelle direction est la bienvenue.

Mettre à jour №1:

Je dois mentionner que 2 Les serveurs ne sont pas sur le même réseau. L'application principale est placée sur LiquidWeb, Un nouveau serveur - sur Linode.

Aussi pour spécifier un sous-domaine sur le serveur Linode, J'ai créé un enregistrement A en éditeur DNS CPanel.

Fonctionnement ping avec serveur domain.tld Donne:


64 bytes from li1014-180.members.linode.com (xx.xx.xx.xxx): icmp_seq=1 ttl=64 time=0.022 ms

La même équipe avec mon ordinateur local:


64 bytes from (xx.xx.xx.xxx): icmp_seq=0 ttl=52 time=114.982 ms

Suivre les instructions de Damiano, en cours d'exécution tcpdump, J'ai trouvé que les questions du serveur principal n'atteignent pas le nouveau serveur, mais il semble que le serveur principal répond également. Quest continue de savoir pourquoi.

Aussi sur le serveur principal en cours d'exécution CPanel, Donc, cela peut avoir une sorte d'attitude envers cela ...

Mettre à jour 2

Pendant le jogging

sudo tcpdump -n -i eth0 icmp

sur le serveur de service si je

ping service-name.domain.tld

De mon ordinateur local, je peux voir le trafic entrant et sortant sur le serveur, mais la même commande à partir du serveur principal ne me donne rien sur le serveur de service. (La même chose se produit si je filtre le trafic http avec tcpdump Et je fais des demandes curl) .

Mettre à jour 3

J'ai abandonné et cloné Linode, Je suis de nouveau IP, Et maintenant ça marche bien ... ¯_ (ツ) _ / ¯
Invité:

Giselle

Confirmation de:

Tu as demandé "route", de sorte que ... Voici le mien.

Dans deux de vos dossiers, j'ai vu ce qui suit dans le premier:

[...]
Server: Apache
[...]

Et en seconde - c'est:

[...]
Server: Apache/2.4.6 (CentOS) PHP/5.6.24
[...]

Même si ce sont deux réponses HTTP différentes (

302 Found

première;

200 OK

deuxième), Je parie que ces deux réponses viennent de

différent

Serveurs Web. Alors essayons d'explorer une telle hypothèse ...

Comme une première étape, comme déjà mentionné dans les commentaires @HBruijn, Nous devons nous assurer que les deux clients HTTP ouvrent une connexion HTTP avec le même serveur HTTP. Pour chacun d'entre eux, effectuez:


ping service-name.domain.tld

Et assurez-vous que dans la sortie, vous voyez la même adresse IP. Sinon, concentrons-nous et ... Vous pouvez aller à une autre question :-)

Si les deux

ping

Autorisé à la même adresse IP que le processus de dépannage diffère vraiment en fonction de l'emplacement "relatif" des trois hôtes: le client Li "est connecté A» et "client. B» au même réseau local / Segment Ethernet? "Serveur C" connecté au même réseau local / Segment Ethernet?

Si trois machines sont connectées au même réseau local, il peut être nécessaire de vérifier l'adresse MAC qui "client A», et "client. B» Obtenir de la permission ARP Adresses IP "Server C». Juste après PING (sur "client A» et "client B» Par rapport au "serveur C») Fonctionnement (sur "client A» et "client B»)

arp -an <ip.of.server.c>

. Vous obtiendrez quelque chose comme:

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:~$

Vous voyez ici que l'adresse MAC de mon serveur (192.168.2.1) -

c0:c1:c0:e8:0f:12

. Dans votre cas, assurez-vous qu'il est identique pour le "client A" et "Client B". Encore une fois, note que

il n'est valide que si le client A et client B sont dans un segment Ethernet Serveur C

.

Si "client. A» et "client. B» sont dans différents réseaux et / ou "serveur. C» est loin d'eux, alors notre seule chance - Vérifiez ce qui entre dans le "serveur C», quand et "client A», et "client. B» "Essayez d'y parvenir. Malheureusement, nous avons une approche différente en fonction de l'emplacement relatif des trois hôtes. Supposons le pire scénario: "Client A» et "client. B» Connecté à deux réseaux locaux différents (Peut-être deux sites distants d'une grande entreprise), Un serveur. C» Connecté au troisième site (Siège Big Company). . Et "client. A», et "client. B» Connecté à k. NAT En atteignant le "serveur C».

Dans ce cas, nous devons détecter une "adresse IP d'une adresse IP publiquement accessible". A» et "client B» En atteignant le "serveur C». Il existe de nombreuses façons d'obtenir cette information. Aussi vite (... Et très sale) Le moyen d'obtenir le résultat peut être lancé:

verzulli@iMac-Chiara:~$ curl -s [url=http://ipinfo.io]http://ipinfo.io[/url] | grep '"ip":'
"ip": "2.239.77.181",

où vous pouvez voir mon adresse NAT (J'ai nommé mon fournisseur à mon hôte lors de la sortie de son réseau)

2.239.77.181

.

Alors, maintenant je peux enfin demander au "serveur C» montre-moi la circulation venant de mon adresse IP et ... Il suffit de regarder si quelque chose est inclus.

Sur le serveur:

[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

est-il .... commencera à attendre des paquets entrants icmp (ping), Sortant ot 2.239.77.181. Dès que je fais du client PING, De tels paquets seront affichés:

[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 &gt; 78.47.127.152: ICMP echo request, id 60237, seq 1, length 64
16:28:21.031392 IP 78.47.127.152 &gt; 2.239.77.181: ICMP echo reply, id 60237, seq 1, length 64

où vous pouvez voir PING (Demande d'écho icmp), venant de mon client, et après cela, la réponse du serveur (Écho-réponse icmp).

Si vous préférez vérifier tous les types de trafic (pas seulement ICMP), tu peux essayer (sur le serveur C») par:

tcpdump -n -i eth0 host 2.239.77.181

of, Si vous souhaitez vérifier uniquement le trafic HTTP:

tcpdump -n -i eth0 host 2.239.77.181 and port 80

C'est tout.

Basé sur ce qui précède, vous devriez être capable de vérifier si les deux "clients A» et "client. B» Votre "serveur C» (pas deux serveurs Web différents). Après avoir reçu cette information, revenez ici pour le confirmer, et ... Je peux mettre à jour cette réponse pour aller.
</ip.of.server.c>

Pour répondre aux questions, connectez-vous ou registre