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

Nginx с www и без www

У меня есть директива сервера с nginx:

    server {
            listen 80;
            server_name mydomain.net;
            root /home/sites/mydomain.net;

            location ~ \.php$ {
                    fastcgi_pass    127.0.0.1:9000;
                    include         fastcgi_params;
                    fastcgi_param SCRIPT_FILENAME /home/sites/mydomain.net$fastcgi_script_name;
                    fastcgi_index   index.php;
            }
}

Это отлично работает, когда я захожу на mydomain.net. Но здесь ничего не говорится о применении этого материала, если пользователь пытается www.mydomain.net.

Проведенный мною поиск показывает, что у людей есть совершенно другая директива, слушающая с server_name www.mydomain.net, что кажется .. не очень хорошо. например

server {
            listen 80;
            server_name www.mydomain.net;
            root /home/sites/mydomain.net;

            location ~ \.php$ {
                    fastcgi_pass    127.0.0.1:9000;
                    include         fastcgi_params;
                    fastcgi_param SCRIPT_FILENAME /home/sites/mydomain.net$fastcgi_script_name;
                    fastcgi_index   index.php;
            }
}

По сути, удвоение кода конфигурации. Или как-то иначе переписать.

Есть ли меньший способ сделать это?

Вы можете использовать несколько имен в server_name и даже повторить.

Например, чтобы ответить на три имени хоста, вы можете сделать что-то вроде:

server {
        server_name example.com www.example.com;
        server_name api.example.com;