web-dev-qa-db-fra.com

Passerelle Nginx 502 Bad sur hébergement mutualisé

J'ai un site Web sur un fournisseur d'hébergement partagé. Depuis le début, mes visiteurs ont plusieurs types d’erreurs, dont 502 Bad Gateway / nginx (page vierge avec le texte de l’erreur). J'ai contacté le support plusieurs fois, et à la fin, ils prétendent toujours que l'erreur est dans mes scripts PHP. Je ne vois aucune erreur dans les journaux PHP et mon code fonctionne parfaitement sur mes serveurs domestiques.

Autres types d'erreurs que j'ai vus:

open_basedir restriction in effect. File(A PHP FILE ON MY SITE) is not
within the allowed path(s): (/home/u514320864:/tmp:/var/tmp:/opt/php-5.3/pear) in ...

Tout d'abord, l'utilisateur u514320864 n'est pas mon nom d'utilisateur. Cette chaîne n'apparaît nulle part dans mon code. Au hasard, mon répertoire personnel ne se trouve pas dans les chemins d'accès autorisés, jusqu'à ce que je rafraîchit la page et que tout recommence à fonctionner.

Ensuite, j'ai également vu une page vierge avec le message No input file specified. Voilà, rien dans les journaux d'erreur.

J'ai vu les deux dernières erreurs assez rarement (une douzaine de fois), mais la première (502) est pénible. Les "mauvais jours", il apparaît à chaque demande de 10ème page environ. Cela revient toujours à la normale avec une actualisation de la page.

Je développe des applications mobiles et l'erreur 502 rend parfois nos applications Android presque inutilisables (chaque action de l'utilisateur nécessite une certaine communication entre l'application et le serveur).

Y a-t-il quelque chose que je puisse faire? J'ai un accès SSH au serveur hôte avec des privilèges très limités. J'ai vérifié les paramètres DNS et ils semblent être corrects.

4
Aleksiv95

En me basant uniquement sur le message d'erreur, je vous suggère de vous assurer que tous les fichiers de votre application se trouvent dans le dossier dans lequel vous êtes autorisé à placer des données. Dans la mesure du possible, utilisez des chemins absolus pour référencer des fichiers.

Par exemple, supposons que la mise en page de votre site soit la suivante:

In your document root folder you have
   Folder named Scripts, and a script named index.php

In the Scripts folder you have 
   File named 123.php that represents the script you want to load

Dans cette configuration, si quelqu'un n'accède qu'à votre nom de domaine, alors son index.php risque de charger son contenu. Ce fichier peut contenir le contenu suivant:

<?php
include "Scripts/123.php";
// rest of startup code goes here
?>

Si vous le pouvez, obtenez les informations complètes sur le chemin d'accès à la racine de votre document (je suppose ici que ce chemin est /path/to/document/root), puis créez votre fichier d'index php comme ceci:

<?php
include "/path/to/document/root/Scripts/123.php";
// rest of startup code goes here
?>

De cette façon, vous savez que vous pointez au moins le bon fichier. Aller simplement dans ssh à la racine de votre document et taper pwd et appuyer sur entrée devrait vous donner le chemin absolu vers la racine de votre document.

Si vous ne spécifiez qu'un nom de fichier sans information de dossier, php analysera tous les dossiers inclus prédéfinis (à partir du fichier de configuration php) ("chemins autorisés") pour votre script, et certains de ces dossiers sont probablement en dehors de votre espace utilisateur.

Il est possible que la mauvaise passerelle puisse être renvoyée si le fichier que vous demandez commence par un protocole inhabituel ou indéfini (tel que xx: //).

Ma recommandation est d'utiliser des fichiers et des chemins d'accès absolus pour référencer d'autres fichiers à partir de scripts.

1
Mike