NginxからPHPにカスタムパラメータを渡す方法は?


10

パスとNginx 1.2.4組み合わせて使用してPHP-FPM 5.4.8おり、fastcgiカスタムパラメータをに渡そうとしていますPHP。これまでに見つけたオプションは次のとおりです。

  • envディレクティブを使用して環境変数を設定し、nginxで、getenv()または$_ENVからフェッチしPHPます。問題はenvmainコンテキストでのみパラメーターを設定する必要があるのに対し、コンテキストでのみ動作するserverことです。

  • fastcgi_paramそのために設計されたディレクティブを使用します。

を使用して一部のパラメーターの値を変更しようとしましfastcgi_paramたが、失敗しました:

nginx:

fastcgi_param PATH_INFO "/var/tmp";

PHP:

私は見つけることができるすべての事前定義された配列をチェックしました:

echo '<pre>';
echo "\n".'$GLOBALS'."\n"; var_dump($GLOBALS);
echo "\n".'$_SERVER'."\n"; var_dump($_SERVER);
echo "\n".'$_GET'."\n"; var_dump($_GET);
echo "\n".'$_POST'."\n"; var_dump($_POST);
echo "\n".'$_FILES'."\n"; var_dump($_FILES);
echo "\n".'$_REQUEST'."\n"; var_dump($_REQUEST);
echo "\n".'$_SESSION'."\n"; var_dump($_SESSION);
echo "\n".'$_ENV'."\n"; var_dump($_ENV);
echo "\n".'$_COOKIE'."\n"; var_dump($_COOKIE);
echo "\n".'$php_errormsg'."\n"; var_dump($php_errormsg);
echo "\n".'$HTTP_RAW_POST_DATA'."\n"; var_dump($HTTP_RAW_POST_DATA);
echo "\n".'$http_response_header'."\n"; var_dump($http_response_header);
echo "\n".'$argc'."\n"; var_dump($argc);
echo "\n".'$argv'."\n"; var_dump($argv);
echo '</pre>';

表示するのPATH_INFOは1つだけでした$_SERVER

var_dump($_SERVER); // ["PATH_INFO"]=> string(0) ""

しかし、私が設定した値nginxは考慮されていません。

Q1:ディレクティブを有効にするにnginx/phpは、レベルで何かを設定する必要がありますfastcgi_paramか?

Q2:fastcgi_paramディレクティブは事前定義されたパラメーターのリストに制限されていますか(例:PATH_INFOのような独自のカスタム変数は設定できませんがFOO)?

Q3:はいの場合、Q2:NginxからPHPにカスタムパラメータを渡す方法はありますか?

回答:


14

fastcgi_paramディレクティブを介して追加のパラメーターを渡すことができます。この機能を使ったので間違いない。

私の典型的なnginx設定

server {
    server_name localhost;
    include     conf/defaults.conf;
    root        /var/www;

    location    ~* "\.php$" {
        fastcgi_param CRS "crs";
        include conf/fastcgi-php.conf;
    }                                           
}

phpinfo()の出力の一部:

...
_SERVER["USER"] fcgi
_SERVER["HOME"] /dev/null
_SERVER["FCGI_ROLE"]    RESPONDER
_SERVER["REMOTE_USER"]  no value
_SERVER["CRS"]  crs
_SERVER["QUERY_STRING"] no value

私は持っていますが持っfastcgi.conffastcgi_paramsいませんfastcgi-php.conf:どこから入手しましたか?ペーストビンで共有してもらえますか?
最大

それは私の特定の構成ですが、魔法はありません fastcgi_pass 127.0.0.1:1028; fastcgi_index index.php; include conf/fastcgi.conf; 。conf/ fastcgi.confには、fastcgiに必要な残りのパラメーターと設定が含まれています
KrzysztofKsiężykNov

考えられる唯一のことは、コンパイル時にconfに何かを含めるのを忘れたことnginxです。一方、nginx過去にコンパイルする際に含めることを忘れていましたが、nginx使用していたいくつかのディレクティブについては知らなかったと言うことを拒否します。ここでは何もないので、文句fastcgi_paramはありませんが、それでも機能しません。 (私は元に試してみるよubuntu nginxパッケージと、それがどのようになる参照してください。
マックス

はい、デフォルトのubuntu nginxパッケージで動作します...
Max

@ user64204これは間違いなく設定の問題であり、ubuntuパッケージは設定ファイルの一部を上書きしただけです。ただし、完全な構成を示していないため、実際に問題が何であるかを判別する方法はありません。
VBart

0

リクエストヘッダーでカスタム変数を渡すことにより、リクエストを変更できます。例:

proxy_set_header Variable-name-here Value-here;

そして、PHPスクリプトのリクエストヘッダーからこれらの値を読み取ることができます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.