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

2022-08-30 14:51:57

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

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

...以便允许使用不同的域名访问网站。

但是,在本例中,PHP 总是返回 的第一个条目。$_SERVER['SERVER_NAME']server_namehttp://www.example1.com

所以我没有办法从PHP代码中知道用户使用哪个域访问该网站。

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


到目前为止,我发现的唯一解决方案是为每个域重复整个块,并带有不同的条目,但显然我正在寻找一个更好的块。serverserver_name


答案 1

设置为在配置中使用。SERVER_NAME$hostfastcgi_params

fastcgi_param   SERVER_NAME         $host;

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


答案 2

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

您应该解释为经过验证的服务器名称,以及可以很容易地修改的用户输入,因此不应被信任。SERVER_NAMEHTTP_HOST


推荐