web-dev-qa-db-ja.com

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

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

  • envディレクティブを使用してnginxに環境変数を設定し、getenv()または_$_ENV_を使用してPHPから環境変数をフェッチします。問題は、envmain context でのみ動作するのに対し、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_を表示したのは_$_SERVER_だけでした:

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

しかし、nginxに設定した値は考慮されません。

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

Q2:_fastcgi_param_ディレクティブは、事前定義されたパラメーターのリストに制限されていますか(たとえば、_PATH_INFO_を設定できますが、FOOなどの独自のカスタム変数は設定できません)?

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

10
Max

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
14

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

proxy_set_header Variable-name-here Value-here;

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

0
Mahmoud Zalt