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

时间:2015-07-17 15:27:58

标签: php nginx configuration fastcgi

我的配置文件有一个{... 1}}指令块,以...

开头
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块,但显然我正在寻找更好的。{/ p>

2 个答案:

答案 0 :(得分:37)

SERVER_NAME配置中设置$host以使用fastcgi_params

fastcgi_param   SERVER_NAME         $host;

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

答案 1 :(得分:8)

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

您应该将SERVER_NAME解释为已验证的服务器名称,将HTTP_HOST解释为用户输入,可以很容易地进行修改,因此不应该可信的。