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

nginx "server" directive with multiple "server_name" entries: always first one is passed to PHP's $_SERVER['SERVER_NAME']

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

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

...为了让网站可以用不同的域名访问。

但是 PHP 的 $_SERVER['SERVER_NAME'] 始终是 returns server_name 的第一个条目,在本例中是 http://www.example1.com

所以我无法从 PHP 代码知道用户使用哪个域访问该站点。

有什么办法可以让nginx/fastcgi传递访问网站的真实域名吗?


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

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

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

在您的 fastcgi_params 配置中设置 SERVER_NAME 以使用 $host

fastcgi_param   SERVER_NAME         $host;

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