带有多个"server_name"条目的nginx"server"指令:始终将第一个传递给PHP的$ _SERVER ['SERVER_NAME']

Pao*_*olo 27 php configuration fastcgi nginx

我的配置文件有一个server以...开头的指令块

server {
    server_name www.example1.com www.example2.com www.example3.com;
Run Code Online (Sandbox Code Playgroud)

...为了允许使用不同的域名访问该站点.

但是,在这种情况下,PHP $_SERVER['SERVER_NAME']始终返回第一个条目server_namehttp://www.example1.com

所以我无法从PHP代码中知道用户用来访问该站点的域.

有没有办法告诉nginx/fastcgi传递用于访问该网站的真实域名?


到目前为止,我发现的唯一解决方案是server使用不同的server_name条目为每个域重复整个块,但显然我正在寻找更好的块.

Tan*_*Tat 38

设置SERVER_NAME$hostfastcgi_params配置中使用.

fastcgi_param   SERVER_NAME         $host;
Run Code Online (Sandbox Code Playgroud)

资料来源:http://nginx.org/en/docs/http/ngx_http_fastcgi_module.html#fastcgi_param


Sjo*_*jon 8

这是有意的,而正确的解决方案是$_SERVER['HTTP_HOST']在您的代码中使用.

您应该将其解释SERVER_NAME经过验证的服务器名称,以及HTTP_HOST可以非常容易地修改的用户输入,因此不应该被信任.