Nginx:将“p.test-prd.com.local”的请求重写为“www.test.com”

Nginx:将“p.test-prd.com.local”的请求重写为“www.test.com”

由于各种原因,我们遵循内部 DNS 方案,其中“www.test.com”的内部测试站点将是“p.test-tst.com.local”。我不会详细说明我们最终采用该方案的原因。

现在,我可以将“p.test-tst.com.local”、“p.test-tst.de.local”、“p.test-tst.co.uk.local”(等等)添加到此特定测试站点的 Nginx 配置文件中。但是,有没有更灵活的方法来实现这一点?我能否以某种方式让 Nginx 接受“p.test.tst.com.local”,并让其在内部将其重写为“www.test.com”,以便网站(在 Drupal 上运行)认为请求来自“www.test.com”?

这样做的一个主要原因是,当涉及到语言处理(为“com.local”设置语言)时,我不必考虑向 Drupal 添加更多逻辑。

答案1

如果我理解你的意思,你需要这样的东西:

map $http_host $name { hostnames; p.test.tst.com.local test.com; ... } ... server { ... location / { fastcgi_pass unix:/var/run/php5-fpm.sock include fastcgi_params fastcgi_param HTTP_HOST $name; }

如果实际请求的主机名是 p.test.tst.com.local,这将把 $SERVER 中的 HTTP_HOST 变量设置为 test.com。Drupal 查看 $SERVER['HTTP_HOST'] 值来确定主机名。您可以添加其他映射,因此map {}它非常灵活。

答案2

如果您希望您的网站响应这些主机值,那么您别无选择,您必须将它们放在指令中server_name(您可以使用通配符或正则表达式来使配置更短)。

server {

    server_name www.test.com;
    include /path/to/server_names;

    [ ... ]

    location / {
        [ ... ]
        fastcgi_param HTTP_HOST "www.test.com";
    }

}

文件 /path/to/server_names:

server_name p.test-tst.co.uk.local;
server_name p.test-tst.de.local;

相关内容