Nginx multiple server names and $_SERVER[‘SERVER_NAME’]

Неожиданно для себя узнал, что если у сайта в конфиге назначено несколько alias к основному домену, то независимо от того, на какой из них ты заходишь, в переменной $server_name всегда содержится исключительно первое имя из списка.

После проверок оказалось, что это косяк старой версии nginx (1.1.19). В более новой все работало корректно. Однако решение для старой версии я нашел и заключалось оно в использовании регулярного выражения.

server {
    listen 80;

    # сохраняем имя домена из регулярки в переменную $host_name
    server_name ~^(?<host_name>[a-z]*\.?site.dev)$

    root /var/www/site.dev;
    index index.php;
    location / {
            try_files $uri $uri/ /index.php?$args;
    }
    location ~ \.php$ {
                include fastcgi_params;

                # переопределяем стандартное значение
                fastcgi_param SERVER_NAME $host_name;

                fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
                fastcgi_pass 127.0.0.1:9200;
    }
}

Документация: (http://nginx.org/ru/docs/http/server_names.html#regex_names)

This entry was posted in nginx. Bookmark the permalink.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Можно использовать язык разметки Markdown

Protected by WP Anti Spam