artzub
@artzub
Программист

В чем проблема конфига для subdomain в nginx

Добрый день!

Есть конфиг:
server {

        listen   80;
        listen   [::]:80 default ipv6only=on;

        server_name  my.com ~^([.+])\.my.com$;

        set $subdomain $1;

        access_log  /var/log/nginx/localhost.access.log;
        error_log  /var/log/nginx/localhost.error.log info;

        root /var/www/$subdomain;
        location / {
            index index.html index.htm;
        }

        location ~* \.(jpg|ico|gif|png|css|js|svg)$ {
            expires 30d;
        }
}


Имя ресурса куплено на reg.ru и настроено правило для всех под доменов *.my.com.

При переходе допустим по d3.my.com я ожидаю что nginx сделает root равным /var/www/d3, но он почему-то все равно ломится в /var/www/.

В чем может быть проблема?
  • Вопрос задан
  • 11743 просмотра
Пригласить эксперта
Ответы на вопрос 5
alekciy
@alekciy
Вёбных дел мастер
Проблема в регулярно выражении. Должно быть что-то в духе ([a-z0-9-\.]+), а не ([.+]). Текущий же вариант означает "один любой символ и плюс".
Ответ написан
VBart
@VBart
nginx.org/en/docs/http/server_names.html
nginx.org/en/docs/http/converting_rewrite_rules.html
wiki.nginx.org/IfIsEvil
wiki.nginx.org/Pitfalls
man pcresyntax

Правильный конфиг выглядел бы так:

server {
    listen 80;
    server_name www.my.com;
    return 301 http://my.com$request_uri;
}

server {
    listen 80;
    server_name ~^(?<sd>.+)\.my\.com$;
    return 301 http://my.com/$sd$request_uri;
}


server {

    listen   80; ## listen for ipv4
    listen   [::]:80 default ipv6only=on; ## listen for ipv6

    server_name  my.com;

    access_log  /var/log/nginx/artzub.access.log main;
    error_log  /var/log/nginx/artzub.error.log info;

    root /var/www;

    location / {
        index index.html index.htm;
    }

    location ~* \.(?:jpg|ico|gif|png|css|js|svg)$ {
        access_log off;
        expires 30d;
    }
}
Ответ написан
artzub
@artzub Автор вопроса
Программист
А по подробней можно про strace
Ответ написан
artzub
@artzub Автор вопроса
Программист
всем еще раз огромное спасибо за участие!!!
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы