По разным причинам мы следуем внутренней схеме 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 '?
Одна из основных причин, по которой это было бы хорошо, заключается в том, что мне тогда не пришлось бы думать о добавлении дополнительной логики в Drupal, когда дело доходит до обработки языка (установка языка для com.local).
Если вы хотите, чтобы ваш сайт отвечал этим значениям Hosts, тогда у вас нет выбора, вы должны поместить их в server_name
директива (вы можете использовать подстановочный знак или регулярное выражение, чтобы сделать conf короче).
server {
server_name www.test.com;
include /path/to/server_names;
[ ... ]
location / {
[ ... ]
fastcgi_param HTTP_HOST "www.test.com";
}
}
Файл / путь / к / имена_серверов:
server_name p.test-tst.co.uk.local;
server_name p.test-tst.de.local;
Если я вас правильно понял, вам нужно что-то вроде этого:
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;
}
Это установит переменную HTTP_HOST в $ SERVER на test.com, если фактическое запрошенное имя хоста было p.test.tst.com.local. Drupal смотрит на значение $ SERVER ['HTTP_HOST'], чтобы определить имя хоста. Вы можете добавить другие сопоставления в map {}
так что это довольно гибко.