Re: Маска в server name

dga65 nginx-forum at nginx.us
Fri Dec 14 09:31:44 UTC 2012


Так, я похоже разобрался в чем дело... лишний раз убеждаюсь что нельзя
решать вопрос в отрыве от задачи в целом. Общая идея: есть сервер на котором
несколько страничек девелоперов. Называются они *.dev.sample.com (ну
hotel.rexx.dev.sample.com и т д). Разумеется очень не хотелось бы чтобы на
эти странички лазили всяческие боты. Далее. На сервере стоит испманагер и
связка инжинса и апача. Когда мы заводим новый проект испманагер по шаблрну
добавляет в конфиг инжинса запись типа такой:

<------>server {
<------><------>listen 111.111.111.111 80;
<------><------>server_name shop.perov.dev.sample.com;
<------><------>rewrite ^(/manager/.*)$>https://$host$1>permanent;
<------><------>error_page 404 = @fallback;
<------><------>location ~* ^/(webstat/|awstats|webmail/|myadmin/|manimg/)
{
<------><------><------>proxy_pass http://111.111.111.111:8080;
<------><------><------>proxy_set_header Host $host;
<------><------><------>proxy_set_header X-Forwarded-For
$proxy_add_x_forwarded_for;
<------><------><------>proxy_set_header X-Real-IP $remote_addr;
<------><------><------>error_page 403 = @fallback;
<------><------><------>deny all;
<------><------>}
<------><------>location ... {...
<------><------>}
<------><------>location @fallback {
<------><------><------>proxy_pass http://111.111.111.111:8080;
<------><------><------>proxy_set_header Host $host;
<------><------><------>proxy_set_header X-Forwarded-For
$proxy_add_x_forwarded_for;
<------><------><------>proxy_set_header X-Real-IP $remote_addr;
<------><------>}
<------>}  

И так далее. В мане инжинса http://nginx.org/ru/docs/http/server_names.html
описан порядок приоритетов в обработке виртуальных серверов:  1. точное имя,
2. самое длинное имя с маской в начале, например “*.example.org”, 3. самое
длинное имя с маской в конце, например “mail.*”, 4. первое подходящее
регулярное выражение (в порядке следования в конфигурационном файле). И вот
получается что инжинс наткнувшись на конструкцию типа

server {
<------><------>listen 80;
<------><------>server_name *.dev.sample.com;
<------><------>location = /robots.txt {
<------><------>root /home;
<------><------>}
<------>}

не находит приоритетного точного имени и отдает апачу 404. Как решить
проблему я не знаю пока, решать на уровне апача - неохота, да и не очень
красиво. Да конечно можно править девелоперские сервера сразу после их
создания (так сейчас и делаю) но это тоже паллиатив.

Posted at Nginx Forum: http://forum.nginx.org/read.php?21,233961,234007#msg-234007



Подробная информация о списке рассылки nginx-ru