Я использую nginx. Чего я пытаюсь достичь:
domain.com
который получает содержимое из /var/www/domain.com
sub.domain.com
который получает содержимое из /var/www/sub.domain.com
*.domain.com
(где *
знак равно sub
) должен получить содержимое из /var/www/404
Если это не ясно: это похоже на настройку 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, и сделать его первым в списке. Затем вы можете добавить столько конкретных доменов, сколько захотите; первый будет использоваться только тогда, когда в файле конфигурации нет другого подходящего доменного имени.