web-dev-qa-db-ja.com

Nginx 502共有ホスティングの不正なゲートウェイ

共有ホスティングプロバイダーにWebサイトがあります。最初から、訪問者は502 Bad Gateway / nginx(エラーテキストのある空白ページ)を含むいくつかのタイプのエラーをランダムに取得しています。私はサポートに何度か連絡しましたが、最終的に彼らは常にエラーが私のPHPスクリプトにあると主張します。 PHPログにエラーが表示されず、ホームサーバーでコードが完全に機能します。

私が見た他のタイプのエラー:

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 ...

まず、ユーザーu514320864は私のユーザー名ではありません。この文字列は私のコードのどこにも現れません。ランダムにホームディレクトリが許可されたパス内にないのは、ページを更新して作業が再開されるまでです。

それから、メッセージNo input file specified.のある空白ページも見ました。それだけです。エラーログには何もありません。

最後の2つのエラーはめったに見られませんでしたが(1ダース程度)、最初のエラー(502)はお尻の痛みです。 「悪い日」には、10ページごとのリクエストごとに表示されます。ただし、ページを更新すると常に通常に戻ります。

モバイルアプリを開発していますが、502エラーが原因でAndroidアプリがほとんど使用できなくなることがあります(ユーザーアクションごとにアプリとサーバー側の通信が必要です)。

私にできることはありますか?ホストサーバーへのSSHアクセスは非常に限られた特権しか持っていません。 DNS設定を確認しましたが、正しいようです。

4
Aleksiv95

エラーメッセージのみに基づいて、アプリ内のすべてのファイルがデータを配置できるフォルダー内にあることを確認することをお勧めします。可能な場合は、ファイルを参照するときに絶対パスを使用します。

たとえば、サイトのレイアウトが次のようになっていると仮定します。

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

この設定では、誰かがあなたのドメイン名だけにアクセスすると、index.phpがそのコンテンツをロードする可能性があります。そのファイルには次の内容を含めることができます。

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

可能であれば、ドキュメントルートへのフルパス情報を取得し(ここではパスは/path/to/document/rootと仮定します)、次のようにインデックスphpファイルを作成します。

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

そうすれば、少なくとも正しいファイルを指していることがわかります。 sshでドキュメントルートに移動し、pwdと入力してEnterキーを押すだけで、ドキュメントルートへの絶対パスが表示されます。

フォルダー情報なしでファイル名のみを指定した場合、phpはスクリプトのすべての定義済みインクルードフォルダー(php構成ファイルから)(別名「許可されたパス」)をスキャンし、これらのフォルダーの一部はおそらくユーザースペース。

要求しているファイルが異常なまたは未定義のプロトコル(xx://など)で始まる場合、不良ゲートウェイが返される可能性があります。

私の推奨事項は、スクリプト内から他のファイルを参照するときにファイルと絶対パス名を使用することです。

1
Mike