Для обслуживания каждого сайта (домена) размещенного на сервере в веб-сервере Nginx необходимо создать так называемый виртуальный хост (серверный блок).
Он представляет из себя файл с несколькими настройками. Посмотрим как его создать и настроить чтобы nginx понял, что нужно делать.
Предварительно создаем директорию для файлов своего сайта на сервере. См. «Как создать сайт на Nginx?».
1. Создаем виртуальный хост (серверный блок).
По умолчанию в Nginx уже есть дефолтный файл настроек сайта — default. Он расположен по адресу /etc/nginx/sites-available/default. На его основе мы и создадим свой, для нашего сайта.
Для этого заходим на сервер VPS и вводим следующую команду. С ее помощью будет создан новый виртуальный хост и в него будет скопировано содержимое штатного файла настроек default.
sudo cp /etc/nginx/sites-available/default /etc/nginx/sites-available/site.com
Где site.com название файла настроек (серверного блока/виртуального хоста) нашего сайта. При желании можно придумать этому файлу любое название. Главное потом не запутаться.
Все, виртуальный хост Nginx создан, теперь нужно его настроить.
2. Настройка виртуального хоста в Nginx.
Открываем на редактирование свежесозданный серверный блок.
sudo nano /etc/nginx/sites-available/site.com
Изменяем некоторые его строки и если надо раскомментируем их. И приводим их к такому виду.
server {
listen 80 default_server;
listen [::]:80 default_server;
root /var/www/site.com/html;
index index.php index.html index.nginx-debian.html;
server_name site.com www.site.com;
location / {
try_files $uri $uri/ /index.php?$args;
location ~ /\.ht {
deny all;
Сохраняем изменения CTRL+O+Enter и выходим CTRL+X.
Так как теперь у нас этот виртуальный хост объявлен дефолтным (default_server), то необходимо удалить эти директивы из файла default. Открываем его на редактирование и удаляем из него default_server.
sudo nano /etc/nginx/sites-available/default
И если в будущем придется создавать и настраивать новые виртуальные хосты на этом сервере, то и в них, директиву default_server так же придется удалить. Так как иначе ни чего работать не будет. Эта директива должна быть прописана только в одном виртуальном хосте.
Проверим все ли в порядке с повторением default_server на нашем сервере Nginx.
grep -R default_server /etc/nginx/sites-enabled/
Будет выведен список файлов, где имеется эта директива. Она должна быть в раскомментированном виде только в одном файле (в других может присутствовать, но быть закомментированной). Если default_server обнаружится где-то еще, то ее нужно удалить из этих файлов.
Все, настройка завершена, необходимо включить виртуальный хост.
3. Включаем виртуальный хост в Nginx.
Для включения создаем ссылку с /etc/nginx/sites-available/site.com в /etc/nginx/sites-enabled/site.com. Этот файл Nginx читает и руководствуется директивами из него. Выполняем команду.
sudo ln -s /etc/nginx/sites-available/site.com /etc/nginx/sites-enabled/
Теперь в sites-enabled будет создан файл с настройками site.com.
4. Настраиваем конфигурационный файл Nginx.
Что бы избежать проблем с памятью, которые могут возникнуть из-за дополнительных имен сервера необходимо в nginx.conf раскомментировать одну директиву. Для этого откроем его на редактирование.
sudo nano /etc/nginx/nginx.conf
И раскомментируем строку.
http {
server_names_hash_bucket_size 64;
}
Сохраняем и закрываем.
Проверяем Nginx на наличие ошибок.
sudo nginx -t
Перезапускаем Nginx для применения изменений.
sudo systemctl reload nginx
Все, виртуальный хост (серверный блок) Nginx настроен и готов к работе
5. Проверяем работу сайта.
В браузере открываем site.com и наблюдаем его главную страницу.
Примечания и дополнения
— Если что-то пошло не так можно удалить файл настроек из sites-enabled и все начать заново. Для этого вводим команду.
sudo rm /etc/nginx/sites-enabled/site.com
Еще статьи по веб-серверу Nginx и VPS/VDS
— Настройка Nginx на работу с постоянными ссылками в WordPress
— Предварительная настройка UFW на сервере VPS Ubuntu
— SSL сертификат Let’s Encrypt для домена при помощи certbot