由于各种原因,我们遵循内部 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 添加更多逻辑。
如果我正确理解你,你需要这样的东西:
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 {}
因此它非常灵活。如果您希望您的站点响应这些 Hosts 值,那么您别无选择,您必须将它们放在
server_name
指令中(您可以使用通配符或正则表达式来缩短 conf)。文件 /path/to/server_names :