由于各种原因,我们遵循内部 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;