ApacheのSetEnvに似たNginx変数?


82

ApacheでSetEnvを使用して、PHPでを使用して回復する仮想ホストにいくつかの変数を設定し$_SERVER[the_variable]ます。

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

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

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

回答:


57

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


1
ありがとう、それはトリックをします。Perl Catalystを使用している場合、必要な値は$ c-> engine-> env-> {MY_CUSTOM_VARIABLE}にあり、phpの$ _SERVERと同様です。[リンク] search.cpan.org/dist/Catalyst-Runtime/lib/Catalyst/Engine.pm
MIguelele 2011年

これは私にとって真実ではありません...このように変数を設定すると、getenvメソッドを介してのみ変数を取得できます。変数は$ _SERVER配列に追加されません。
Pablo Ezequiel Leone 2017

@MIguelele、変数チェーン$ c-> engine-> env-> {SOME_ENV_VAR}は、fastcgiインターフェースによって配布される$ ENV {SOME_ENV_VAR}と厳密に同じです。
Znik

118
location / {
...
   fastcgi_param   APPLICATION_ENV  production;
   fastcgi_param   APPLICATION_CONFIG user;
...
}

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


22
右側のコメントの目的は何だろうと思います:
lks128 2015年

私は彼がコメントとして同等のアパッチを見せたかっただけだと思います
lloiacono 2015

5
それから彼は非常に恐ろしく失敗しました。これはApacheで環境変数を定義する方法ではないからです。
右折り2016年

...しかしそれでも非常に便利です
;

1
空の値の場合は、値の部分に ''を入力します
Subin

41

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

php-cgi

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

php-fpm

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

11

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;
        }

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

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