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

由于各种原因,我们遵循一个内部DNS计划,其中www.test.com的内部testing网站将是“p.test-tst.com.local”。 我不会详细说明为什么我们结束了我们正在使用的计划。

现在,我可以添加“p.test-tst.com.local”,“p.test-tst.de.local”,“p.test-tst.co.uk.local”(等等)到Nginx此特定testing网站的configuration文件。 但是,这样做没有更灵活的方法吗? 我可以以某种方式让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_HOSTvariables设置为test.com。 Drupal查看$ SERVER ['HTTP_HOST']的值来确定主机名。 您可以将其他映射添加到map {}因此它非常灵活。

如果您希望您的站点回答这些主机值,那么您别无select,您必须将它们放在server_name指令中(可以使用通配符或正则expression式使configuration更短)。

 server { server_name www.test.com; include /path/to/server_names; [ ... ] location / { [ ... ] fastcgi_param HTTP_HOST "www.test.com"; } } 

文件/path/到/ server_names:

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