Итак у нас установлен Nginx (с помощью менеджера пакетов или из исходников), мы в состоянии обслуживать несколько доменов с помощью виртуальных хостов (Virtual Hosts).
Создание макетаДавайте создадим основной макет для каждого домена. В вашем домашнем каталоге создадим папку "public_html":
mkdir /home/demo/public_html
Теперь для каждого домена, мы хотим (я использую примеры domain1.com и domain2.com) создать папку со стандартным набором вложенных папок:
mkdir -p /home/demo/public_html/domain1.com/{public,private,log,backup}
и
mkdir -p /home/demo/public_html/domain2.com/{public,private,log,backup}
Это создаст папки public, private, log и backup для каждого нашего домена ((domain1.com и domain2.com).
index.htmlСодержание public папки, естественнно, вам решать, но для этого примера я буду использовать очень простой HTML-файл, чтобы мы смогли проверить работу виртуальных хостов.
Так что для каждого домена:
nano /home/demo/public_html/domain1.com/public/index.html
Введите что-то подобное в файл:
<html>
<head>
<title>domain1.com</title>
</head>
<body>
<h1>domain1.com</h1>
</body>
</html>
Повторите процесс, так что у вас есть аналогичный файл для domain2.com (не забудьте изменить содержание index.html чтобы отображал domain2.com а не domain1.com).
Макет виртуальных хостовВам нужно следовать согласно макету в стиле 'Debian' (используя папки 'sites-available' и 'sites-enabled') либо установлены с помощью менеджера пакетов, либо через источник.
Таким образом, мы будем использовать этот макет всегда при создании виртуальных хостов.
Виртуальный хостИтак поехали дальше, создадим виртуальный хост файл для domain1:
sudo nano /etc/nginx/sites-available/domain1.com
Не забудьте настроить пути в соответствии вашей установки. Поэтому потребуется установка из исходников:
sudo nano /usr/local/nginx/sites-available/domain1.com
Содержимое будет выглядеть так:
server {
listen 80;
server_name www.domain1.com;
rewrite ^/(.*) http://domain1.com/$1 permanent;
}
server {
listen 80;
server_name domain1.com;
access_log /home/demo/public_html/domain1.com/log/access.log;
error_log /home/demo/public_html/domain1.com/log/error.log;
location / {
root /home/demo/public_html/domain1.com/public/;
index index.html;
}
}
Примечание: Этот пример виртуального хоста (Vhost) довольно базовый. Однако следующая статья Nginx виртуальных хостов будет содержать подробную информацию о многих других доступных параметрах.
Первый модуль сервера в файле простых правил перезаписи, которые перенаправляют посетителей от
www.domain1.com к domain1.com.
Можно, конечно, сделать наоборот, так как вы считаете нужным.
Второй модуль сервера содержит основную информацию, включая 'server_name' являющийся доменным именем, которое будет работать.
Затем он определяет log для удобства проведения анализа и, наконец, устанавливает корневой сервер и индексный файл.
Как я говорил, это очень простая конфигурация на данном этапе.
sites-enabledПоследний шаг конфигурации является "розрешение" (enable) нашего сайта.
Это делается с помощью симлинка в 'sites-enabled' папке следующим образом:
sudo ln -s /etc/nginx/sites-available/domain1.com /etc/nginx/sites-enabled/domain1.com
Опять же, в зависимости от того, как вы установили Nginx, вам может понадобиться настроить пути:
sudo ln -s /usr/local/nginx/sites-available/domain1.com /usr/local/nginx/sites-enabled/domain1.com
Перезагрузка NginxНесмотря на перезагрузку для скрипта инициализации Nginx, он не всегда работает, как ожидалось и не может способствовать любым изменениям, которые вы сделали.
Таким образом, я рекомендую остановку и запуск, такой подход, а не простую перезагрузку:
sudo /etc/init.d/nginx stop
...
sudo /etc/init.d/nginx start
НавигацияДля проверки домена без создания зоны DNS и записи(ей) на некоторых интернет namserver(s), я изменил '/etc/hosts' файл на моем локальном компьютере включив некоторые элементы отображения 'domain1.com' и т.д. для демо серверов внешний IP:
127.0.0.1 localhost
...
# entries related to the demo server
123.45.67.890 domain1.com
123.45.67.890 www.domain1.com
123.45.67.890 domain2.com
...
Можете добавить аналогичные записи в ваш 'hosts' файл, хотя его местонахождение будут варьироваться в зависимости от того, какая ОС используется на локальном компьютере (используйте Google Search)
Примечание: записи в 'hosts' файле необходимо будет до начала испытаний и использования живых DNS зон и записей, созданных в интернет неймсерверах. Неспособность удалить их, вероятно, приведет к путанице с вашей стороны и неточных испытаний новых или измененных записей публичных DNS.
С такими изменениями, внесенными в целях тестирования, можно перейти на ваш сайт в веб-браузер на вашем локальном компьютере:
Отлично.
Финиш и повторВсе, что нужно сделать для вашего следующего виртуального хоста (domain2.com в данном примере), это повторить процесс заново.
Я знаю, я говорю об этом часто, но не забудьте настроить все пути уставки Nginx.
Таким образом создадим виртуальный хост-файл:
sudo nano /etc/nginx/sites-available/domain2.com
Введите сведения, как показано выше, но и для domain2.com, а затем создадим симлинк в папке 'sites-enabled' вот так:
sudo ln -s /etc/nginx/sites-available/domain2.com /etc/nginx/sites-enabled/domain2.com
Перезагружаем Nginx:
sudo /etc/init.d/nginx stop
...
sudo /etc/init.d/nginx start
ЛогиПомните мы определили пользовательские папки, для логов домена?
Ну, давайте проверим если они есть:
ls /home/demo/public_html/domain1.com/log/
...
access.log error.log
Отлично, все работает так, как мы ожидали, и у нас есть логи домена в красивом и удобном месте.
СводкаНастройка виртуальных хостов с Nginx это простой процесс, используя папки 'sites-available' и 'sites-enabled'.
Хотя пример здесь вполне базисный, я надеюсь вы увидили что борьба с Nginx синтаксисом и конфигурацией, не так уж сложна.
PS: перевод с ангийского, если найдёте ошибки перевода - сообщите.
Источник