web-dev-qa-db-ja.com

ApacheのSetEnvに似たNginx変数?

ApacheでSetEnvを使用して、PHP using $_SERVER[the_variable]

現在、私はPerl CatalystとNginxに切り替えていますが、Nginxの「env」ディレクティブは同じではないようです。それは動作しません。どうすれば達成できますか?

誰かがより良いアプローチを提案できる場合や、以前のシステムがNginxで動作しない場合に備えて、背景画像を次に示します。

  • 多くのドメインで同じアプリを使用しています。すべてのデータは、同じ構造を持つ異なるデータベースから取得されます。
  • データベース名は、その環境変数で仮想ホストにハードコードされています。
  • データベース名を知っているように、すべてのクエリは最初のクエリから適切なデータベースに移動します。
  • 同じ変数をディレクティブに含めるだけで、同じデータベースを使用して複数のドメインを作成できます。
76
MIguelele

NGINXは、Apacheのようにバックエンドプロセスを管理しないため、環境に影響を与えることはできません。 NGINXから新しい$_SERVER PHP変数を設定するには、残りの新しいfastcgi_paramエントリを追加する必要があります。fastcgi_paramsまたはfastcgi.conf

54
kolbyjack
location / {
...
   fastcgi_param   APPLICATION_ENV  production;
   fastcgi_param   APPLICATION_CONFIG user;
...
}

しかし、それはPHP-CGI用です

104
TREx

NginxはApacheのようにphpプロセスを管理しないことに注意してください。サーバーでphpを実行するものに依存して、php-fpmまたはphp-cgiを構成する必要があります。

php-cgi

...
env[APP_ENV] = production
...

php-fpm

location / {
    ...
    fastcgi_param APP_ENV production; 
    ...
}
40
Oleg

fastcgi_passソケットの場所が最初に来てから、それぞれのfastcgi_paramパラメーターが必要です。 nginx configフォルダー内のファイルに変数をリストし、そのファイルを含めることもできます。通常、インクルードファイルの名前はfastcgi_paramsです。環境パラメーターは、PHP処理ブロックに簡単に追加できます。

        location ~ \.php$ {
            fastcgi_pass     unix:/your_sock_location/nginxFastCGI.sock;
            fastcgi_param    SCRIPT_FILENAME $document_root$fastcgi_script_name;
            fastcgi_param    APP_ENV production;
            include          fastcgi_params;
        }

Nginx.confと同じディレクトリにあるfastcgi_paramsファイルは次のようになります。

fastcgi_param  SCRIPT_FILENAME    $document_root$fastcgi_script_name;
fastcgi_param  QUERY_STRING       $query_string;
fastcgi_param  REQUEST_METHOD     $request_method;
fastcgi_param  CONTENT_TYPE       $content_type;
fastcgi_param  CONTENT_LENGTH     $content_length;

fastcgi_param  SCRIPT_NAME        $fastcgi_script_name;
fastcgi_param  REQUEST_URI        $request_uri;
fastcgi_param  DOCUMENT_URI       $document_uri;
fastcgi_param  DOCUMENT_ROOT      $document_root;
fastcgi_param  SERVER_PROTOCOL    $server_protocol;
fastcgi_param  HTTPS              $https if_not_empty;

fastcgi_param  GATEWAY_INTERFACE  CGI/1.1;
fastcgi_param  SERVER_SOFTWARE    nginx/$nginx_version;

fastcgi_param  REMOTE_ADDR        $remote_addr;
fastcgi_param  REMOTE_PORT        $remote_port;
fastcgi_param  SERVER_ADDR        $server_addr;
fastcgi_param  SERVER_PORT        $server_port;
fastcgi_param  SERVER_NAME        $server_name;
9
i_a