Назад | Перейти на главную страницу

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 '?

Одна из основных причин, по которой это было бы хорошо, заключается в том, что мне тогда не пришлось бы думать о добавлении дополнительной логики в 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 {} так что это довольно гибко.