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

Показывать 404 для ненайденных поддоменов вместо отображения содержимого корневого домена

Я использую nginx. Чего я пытаюсь достичь:

Если это не ясно: это похоже на настройку StackEchange, где http://somesub.stackexchange.com/ дает 404.

Мне удалось первый использовать два серверных блока с разными server_nameс. Однако как я могу настроить nginx для ссылки на /var/www/404 когда не найден блок сервера, соответствующий поддомену?

При базовой настройке все поддомены, которые не найдены, возвращают то же содержимое, что и корневой домен.

Я хотел бы сделать этот общий, чтобы, если я добавлю еще один серверный блок для sub2.domain.com, Мне не нужно менять блок для 404.

Код, который я использую сейчас:

server {
    listen 80;
    server_name domain.com;
    root /var/www/domain.com;
    charset utf-8;

    location / {
        index index.php index.html;
        autoindex on;
    }

    location ~ \.php$ {
        fastcgi_pass    127.0.0.1:9000;
        fastcgi_index   index.php;
        fastcgi_param   SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include         fastcgi_params;
    }
}

server {
    listen 80;
    server_name sub.domain.com;
    root /var/www/sub.domain.com;
    charset utf-8;

    location / {
        index index.php index.html;
        autoindex on;
    }

    location ~ \.php$ {
        fastcgi_pass    127.0.0.1:9000;
        fastcgi_index   index.php;
        fastcgi_param   SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include         fastcgi_params;
    }
}

Nginx, как и Apache, всегда будет использовать свой первый домен в списке конфигураций по умолчанию. В вашем случае это означает, что для любого домена, у которого нет собственной конфигурации, он выберет конфигурацию для domain.com, поскольку она является первой.

Таким образом, решение состоит в том, чтобы просто создать другой домен, содержащий только страницу 404, и сделать его первым в списке. Затем вы можете добавить столько конкретных доменов, сколько захотите; первый будет использоваться только тогда, когда в файле конфигурации нет другого подходящего доменного имени.