web-dev-qa-db-ja.com

複数の "server_name"エントリを持つnginx "server"ディレクティブ:常に最初のエントリがPHPの$ _SERVER ['SERVER_NAME']に渡されます

構成ファイルには、次で始まるserverディレクティブブロックがあります...

server {
    server_name www.example1.com www.example2.com www.example3.com;

...異なるドメイン名でサイトにアクセスできるようにするため。

ただし、PHPの$_SERVER['SERVER_NAME']は常にserver_nameの最初のエントリを返します。この場合はhttp://www.example1.com

だから、PHPコードから、ユーザーがサイトへのアクセスに使用したドメインを知る方法はありません。

サイトへのアクセスに使用される実際のドメイン名を渡すようにnginx/fastcgiに指示する方法はありますか?


私がこれまでに見つけた唯一の解決策は、serverブロック全体を各ドメインに対して個別のserver_nameエントリで繰り返すことですが、明らかにより良いものを探しています。

27
Paolo

SERVER_NAME設定で$Hostを使用するようにfastcgi_paramsを設定します。

fastcgi_param   SERVER_NAME         $Host;

ソース: http://nginx.org/en/docs/http/ngx_http_fastcgi_module.html#fastcgi_param

37
Tan Hong Tat

これは意図的なものであり、適切な解決策は、代わりにコードで$_SERVER['HTTP_Host']を使用することです。

SERVER_NAME検証済みサーバー名として解釈し、HTTP_Hostをユーザー入力として解釈する必要があります。

8
Sjon