Как правильно настроить Nginx  для нескольких сайтов?



Продолжаем делиться админскими хитростями, друзья.  По мотивам топика на webmasters.

У человека возникла проблема  с тем, что по домену с www стал открываться другой сайт, распололженный на этом же сервере.  Причина проста  — конфиг по умолчанию смотрит на один из сайтов, который и будет открываться для любых доменов, для которых нет конкретно прописанной конфигурации.  Дабы этого избежать, нужно в директиву server_name дописывать все варианты домена сайта, по которым он должен быть доступен. Либо проставлять редиректы на основной адрес.

конфигурация nginx

укажите все варианты обращений к сайту в конфиге его виртуалхоста

Как создать конфигурацию по умолчанию для nginx?

Но лучше всего создать дефолтный конфиг  и  настроить в нём отдачу 403 (forbidden) или 444 (epmty) кода.  Это позволит избежать проблем в дальнейшем.

создайте файл default c с такой конфигурацией:

server {
server_name _;
listen *:80 default_server deferred;








return 444;
}

Как сделать конфиг  Nginx в одном файле  для всех сайтов на сервере?

Человек в этом топике как раз поинтересовался, я отписал предположительные варианты решения. А потом мне стало интересно самому, поскольку для меня это очень актуально. У меня несколько сайтов работают на одном сервере Nginx.

Зачем это нужно?   Чтобы не плодить десятки, или даже сотни файлов   — по одному на каждый сайт. Причем, конфиги отличаются лишь доменом сайта и названием папки.  А если нам нужно добавить или изменить опцию для всех сайтов?  Нужно будет использовать автозамену по всем файлам.  Гораздо правильней использовать объектно-ориентированный подход   — и настроить конфиг в одном файле для любого количества шаблонных сайтов.  Если же для сайта понадобится нестандартная конфигурация — так просто создадим её в отедльном файле.

Итак, можно создать один файл с типовой конфигурацией, в котором будем использовать нехитрые проверки и переменные вебсервера:


server {
server_name ~^(www.)?(?.+)$;
root /var/www/$domain;
if (!-d /var/www/$domain) {
return 444;
}
#остальной ваш конфиг
}

Что это всё значит? Это значит, что если на сервере существует папка с названием в виде домена, то значит такой сайт мы будем открывать из этой папки по этому домену.  Обратите внимание, сайт будет открываться по обоим вариантам — как с www, так и без.   Если же на наш сервер обращаются по домену, который не заведён у нас на сервере —  нету папки для него — мы в ответ покажем 444 код — пустой ответ. Кому то может больше нравится 403  тоже вариант, это уже дело вкуса.

Таким образом, чтобы создать новый сайт, нам не нужно писать отдельный конфиг виртуалхоста, достаточно просто создать папку с доменом в названии, направить DNS на этот сервер и сайт сразу же начнёт открываться.

Комментариев

  1. Анна :

    Ответить

  2. drmotor :

    Ответить

  3. Виктор :

    Ответить

Сохраните для друзей или чтобы прочесть в другой раз:

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

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