Accès au serveur distant

L'auteur de ce sujet a trouvé une solution à son problème.
Auteur du sujet

Salut,

Je viens vers vous car je suis désespéré et ne sais plus où chercher. Je suis entrain de développer une application (avec codeIgniter) et ça marche en local sans problème, ainsi que sur un que chez OVH (l'application n'est pas le domaine principal). Maintenant, nous avons pris un nom de domaine chez Funio (serveur canadien) et c'est là que tous les problèmes se posent).

En effet, l'application avec codeIgniter n'est que la partie présentation, car tout la logique est en java, du coup nous communiquons via REST (même la connexion). De ce fait, la communication REST est impossible depuis le nouvel hébergeur ce pour une raison de TimeOut, même en augmentant le TimeOut de 10 min toujours rien.

Pour vérifier cela, nous avons fait un test de services REST avec un serveur C# et lui il marche sans problème. Nous avons même changer de port pour la communication REST (avec le serveur Java), toujours pas de réponses.

Je m'en remets à vous, car ne trouvant pas de solution, ni l'hébergeur d'ailleurs malgré le ticket ouvert.

Voici ce que donne la comparaison de la configuration PHP des serveurs

You got it.

+0 -0
Staff

Avez-vous accès au serveur canadien? Avez-vous acces au serveur qui fait le REST?

Il faut regarder les règles firewall du serveur qui sert le REST. Il est fort probable que ce dernier n'accepte pas les connexion du serveur canadien. De ce fait il faudra créer une règle dans le firewall pour que les requête depuis l'application php du serveur canadien puisse être acceptée par le serveur qui sert le REST.

+0 -0
Auteur du sujet

Avez-vous accès au serveur canadien? Avez-vous acces au serveur qui fait le REST?

Oui nous avons accès aux deux serveurs.

Il faut regarder les règles firewall du serveur qui sert le REST. Il est fort probable que ce dernier n'accepte pas les connexion du serveur canadien. De ce fait il faudra créer une règle dans le firewall pour que les requête depuis l'application php du serveur canadien puisse être acceptée par le serveur qui sert le REST.

Pour le firewall, je vais passer l'information à mon collègue pour qu'il regarde, car c'est lui qui gère ce serveur. Mais j'ai quand même des doutes, car lorsqu'on regarde les logs de Glassfish (c'est le serveur qui sert le REST), on ne voit même pas de requêtes entrantes qui ont été bloquées.

You got it.

+0 -0
Auteur du sujet

Mon collègue me fait comprendre qu'il n'y a pas de firewall activé sur le VPS. Et j'aurais dû le savoir depuis car le serveur REST qui est en C# et qui répond normalement est sur ce même serveur.

You got it.

+0 -0
Auteur du sujet

Bon je recommence un peu.

Mon application php est sur le serveur canadien et appelle un service REST (en java sur un VPS) chez OVH et ce dernier ne réponds pas (timeOut). La même application php déplacée chez OVH (sous un autre nom de domaine) appelle le même service REST et ce dernier réponds sans problème.

Ayant constaté que le service ne réponds pas quand l'application est sur le serveur canadien, j'ai appelé un autre service REST( cette fois en C# sur le même VPS chez OVH), il réponds tout aussi bien, ce qui écarte l'hypothèse du firewall.

Je viens de tester encore une autre hypothèse, j'ai appelé le service REST (en java) directement depuis JQuery à partir de mon application sur le serveur canadien et le service réponds, donc le problème ne se pose qu'avec PHP.

Où dois je chercher maintenant?

You got it.

+0 -0
Staff

Mon application php est sur le serveur canadien et appelle un service REST (en java sur un VPS) chez OVH et ce dernier ne réponds pas (timeOut).

J'appellerai :

  • CA : la machine qui est au canada
  • OV : le VPS de chez OVH

Log toi sur CA, et ping OV. Si le ping ne passe pas, alors :

  • soit les adresses ip sont mal réglées
  • soit il y a un firewall sur OV qui bloque les connexion venant de l'extérieur.

Sinon c'est que c'est au niveau de votre application code igniter que ça va pas et que par exemple vous tentez de contacter l'api REST en faisant http(s)://127.0.0.1 ce qui forcément ne peut pas marcher.

+0 -0

Ayant constaté que le service ne réponds pas quand l'application est sur le serveur canadien, j'ai appelé un autre service REST( cette fois en C# sur le même VPS chez OVH), il réponds tout aussi bien, ce qui écarte l'hypothèse du firewall.

Ca n'exclut justement pas un problème de firewall, puisque tu y accèdes les deux fois sur la machine chez OVH pour que cela fonctionne.

Je viens de tester encore une autre hypothèse, j'ai appelé le service REST (en java) directement depuis JQuery à partir de mon application sur le serveur canadien et le service réponds, donc le problème ne se pose qu'avec PHP.

Je ne comprends pas ce que cela veut dire. Tu lances un client qui supporte JavaScript sur ton serveur canadien et tu exécutes ton jQuery (notamment via ssh -Y ?) ? ça me semblerait vraiment curieux comme comportement. Personnellement, j'ai davantage l'impression qu'il y a rééellement un firewall sur ton VPS et qu'il y a une règle particulière pour l'endroit depuis lequel tu as essayé de t'y connecter via jQuery (par exemple, les bureaux de ton entreprise).

Comme le suggère artagis, peut-être même plus que de faire un simple ping, tu peux essayer de faire un nmap -sS -p<ton port> <ton ip> afin de vérifier si celui-ci est ouvert. Si ce n'est pas le cas, c'est définitivement un problème de configuration de ton serveur. Dès lors, trois possiblités:

  • il y a un firewall et pour une raison ou une autre ton collègue ne s'en est pas rendu compte; ou, plus plausible
  • l'application codeigniter n'écoute pas au bon endroit, comme le propose artagis; ou encore
  • il n'y a pas de firewall, mais l'application Java n'écoute pas sur la bonne interface, typiquement elle écouterait sur localhost (127.0.0.1), au lieu d'écouter sur 0.0.0.0.

Édité par dab

+0 -0
Auteur du sujet

Log toi sur CA, et ping OV. Si le ping ne passe pas, alors :

  • soit les adresses ip sont mal réglées
  • soit il y a un firewall sur OV qui bloque les connexion venant de l'extérieur.

Ne pouvant pas faire de ping à partir de CA, vu que ce n'est qu'un hébergement mutualisé, j'ai dû faire un script php pour faire le ping, ce qui se passe bien. Mais par la suite j'essaye d'ouvir une socket de connexion qui se passe bien sur le port 80 mais pas 8080 (Port sur lequel tourne le service REST que j'arrive pas à joinde)

Sinon c'est que c'est au niveau de votre application code igniter que ça va pas et que par exemple vous tentez de contacter l'api REST en faisant http(s)://127.0.0.1 ce qui forcément ne peut pas marcher.

Je suis allé faire un tour encore dans mon code pour vérifier cette hypothèse, mais hélas j'ai la bonne adresse de renseignée.

Au vu de tout cela, j'en conclue (peut-être à tord) que le problème est au niveau du port 8080 et que peut-être l'hébergeur CA, refuse les connexions sortantes dessus.

Comment en être sûr? Que dois je faire ensuite pour savoir ce qui se passe?

Tu utilises quoi dans ton application PHP pour appeler l'API ? file_get_contents ? cURL ? >Faudrait peut être regarder la configuration PHP de ton serveur canadien pour voir si les >modules PHP concernés sont activés via phpinfo.

J'utilise cURL au travers d'une librairie rest-server pour codeIgniter.. Et j'ai déjà regardé le phpinfo et c'est activé sur le serveur canadien.

J'ai fait un script hors codeIgniter, juste un fichier php pour l'appel de ce service en utilisant stream_get_contents et toujours pareil (TimeOut). Avec ça je suis sûr que ce n'est pas le framework :p .

You got it.

+0 -0
Auteur du sujet

Ayant constaté que le service ne réponds pas quand l'application est sur le serveur canadien, j'ai appelé un autre service REST( cette fois en C# sur le même VPS chez OVH), il réponds tout aussi bien, ce qui écarte l'hypothèse du firewall.

Ca n'exclut justement pas un problème de firewall, puisque tu y accèdes les deux fois sur la machine chez OVH pour que cela fonctionne.

Je comprends ce que tu dis, mais j'ai dis une bêtise là, le VPS est chez Ikoula, mais j'ai un autre nom de domaine chez OVH, où je depose l'application pour tester hors canada

Je viens de tester encore une autre hypothèse, j'ai appelé le service REST (en java) directement depuis JQuery à partir de mon application sur le serveur canadien et le service réponds, donc le problème ne se pose qu'avec PHP.

Je ne comprends pas ce que cela veut dire. Tu lances un client qui supporte JavaScript sur ton serveur canadien et tu exécutes ton jQuery (notamment via ssh -Y ?) ? ça me semblerait vraiment curieux comme comportement. Personnellement, j'ai davantage l'impression qu'il y a rééellement un firewall sur ton VPS et qu'il y a une règle particulière pour l'endroit depuis lequel tu as essayé de t'y connecter via jQuery (par exemple, les bureaux de ton entreprise).

Non, pas du tout. J'affiche toujours la page telle qu'elle doit être, mais lors du clic du bouton de connexion j'appelle le serveur directement depuis JQuery via Ajax, or le comportement par défaut était l'envoie du formulaire à php et appel du service depuis PHP.

Comme le suggère artagis, peut-être même plus que de faire un simple ping, tu peux essayer de faire un nmap -sS -p<ton port> <ton ip> afin de vérifier si celui-ci est ouvert. Si ce n'est pas le cas, c'est définitivement un problème de configuration de ton serveur. Dès lors, trois possiblités:

  • il y a un firewall et pour une raison ou une autre ton collègue ne s'en est pas rendu compte; ou, plus plausible
  • l'application codeigniter n'écoute pas au bon endroit, comme le propose artagis; ou encore
  • il n'y a pas de firewall, mais l'application Java n'écoute pas sur la bonne interface, typiquement elle écouterait sur localhost (127.0.0.1), au lieu d'écouter sur 0.0.0.0.

dab

Je vais tester la dernière possibilité avant à savoir nmap là avant de prendre position donc… Mais je pense qu'il est ouvert car je peux l'accéder depuis le code sur mon PC.

Edit: J'ai effectivement effectué le nmap et le port 8080 est bel et bien ouvert. Donc je pense que le problème vient de l'hébergeur canadien

Déjà, un grand merci pour le temps que vous m'accordiez.

Édité par azeupaul

You got it.

+0 -0
Auteur du sujet

Salut,

Je viens avec une information, qui je ne sais à son importance ou pas dans ce problème. L'hébergeur canadien nous a fait comprendre que le port 8080 nous était inaccessible, vu que nous sommes sur hébergement mutualisé. Mais je voudrais savoir, si cela est à l'origine du fait que je ne puisse pas contacter un service qui écoute sur le port 8080.

Je veux dire en fait, mon application tourne sur le port 80, mais elle attaque un service sur un autre serveur qui écoute sur le 8080, Est ce que lors de mon appel, je sors de mon application par ce port ou alors par le 80 et attaquer le 8080 distant? Quelle est l'explication?

You got it.

+0 -0

Je viens de tester encore une autre hypothèse, j'ai appelé le service REST (en java) directement depuis JQuery à partir de mon application sur le serveur canadien et le service réponds, donc le problème ne se pose qu'avec PHP.

Je ne comprends pas ce que cela veut dire. Tu lances un client qui supporte JavaScript sur ton serveur canadien et tu exécutes ton jQuery (notamment via ssh -Y ?) ? ça me semblerait vraiment curieux comme comportement. Personnellement, j'ai davantage l'impression qu'il y a rééellement un firewall sur ton VPS et qu'il y a une règle particulière pour l'endroit depuis lequel tu as essayé de t'y connecter via jQuery (par exemple, les bureaux de ton entreprise).

Non, pas du tout. J'affiche toujours la page telle qu'elle doit être, mais lors du clic du bouton de connexion j'appelle le serveur directement depuis JQuery via Ajax, or le comportement par défaut était l'envoie du formulaire à php et appel du service depuis PHP.

Alors, à mon avis, ce test ne sert pas à grand chose car, l'appel en javascript est fait depuis ton poste local du coup, cela ne teste pas la connexion entre tes deux serveurs.

Je veux dire en fait, mon application tourne sur le port 80, mais elle attaque un service sur un autre serveur qui écoute sur le 8080, Est ce que lors de mon appel, je sors de mon application par ce port ou alors par le 80 et attaquer le 8080 distant? Quelle est l'explication?

azeupaul

A priori non (le port sortant n'est pas de ton ressort, surtout sur un hébergement mutualisé).

Ca serait bien qu'on sache ce que donne le nmap.

+0 -0
Auteur du sujet

Ca serait bien qu'on sache ce que donne le nmap.

OK je fais suivre les captures d'écran

Réponse nmap pour le serveur où se trouve le service REST

Réponse nmap de mon hébergeur où se trouve l'application

You got it.

+0 -0
Auteur du sujet

Ta seconde capture montre que nmap n'arrive pas à déterminer si le port 8080 est ouvert à cause d'un filtrage (il y a donc potentiellement un programme qui fait pare-feu).

grugru

Je le comprends bien évidemment et l'hébergeur a confirmé que ce port nous ait inaccessible, c'est où se situe l'application qui appelle le service REST(qui lui est ouvert à ce port).

Ma question est de savoir si le filtrage qui est effectué au niveau de l'hébergeur sur le port 8080, est aussi effectué sur l'adresse que j'essaye de contacter qui lui écoute ce port 8080?

You got it.

+0 -0

dans ton nmap (celui lancé depuis ta machine au canada) tu as mis le port 8080 et l'adresse de ton service rest de chez OVH ? Si tu as bien fait cela, c'est le port 8080 de ta machine chez OVH qui est filtré !

+0 -0
Auteur du sujet

dans ton nmap (celui lancé depuis ta machine au canada) tu as mis le port 8080 et l'adresse de ton service rest de chez OVH ? Si tu as bien fait cela, c'est le port 8080 de ta machine chez OVH qui est filtré !

grugru

C'est l'adresse et le port 8080 du serveur du canada lui même qui est mis et c'est lui qui est filtré (l'hébergeur nous l'a déjà confirmé) tandis que chez OVH c'est ouvert.

You got it.

+0 -0
Auteur du sujet

Je vais marquer le sujet en résolu. Il n'y a pas moyen de pouvoir communiquer par le port 8080. Du coup, le code est hébergé chez OVH, et on a fait redirection du nom de domaine vers ce dossier.

Merci à tous de votre aide.

You got it.

+0 -0
Vous devez être connecté pour pouvoir poster un message.
Connexion

Pas encore inscrit ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte