Настройка серверных блоков


При работе с Nginx серверный блоки (аналог виртуальных хостов в Apache) используются для инкапсуляции настроек сайтов и позволяют хостить более одного домена на сервере. Мы рассмотрим настройку серверных блоков на примере example.com, но вам будет необходимо заменить этот домен своим реальным доменным именем. Узнать больше о настройке доменных имён в DigitalOcean вы можете из нашего руководства Введение в DNS DigitalOcean.

Nginx для Ubuntu 18.04 уже настроен для поддержки одного серверного блока, который настроен на показ документов из директории /var/www/html. Несмотря на то, что это работает для одного сайта, это не очень удобно для хостинга нескольких сайтов. Вместо того, чтобы менять /var/www/html создадим новую структуру директорий внутри /var/www/ для нашего сайта example.com. Директорию /var/www/html оставим без изменений, её содержимое будет отображаться, если клиентские запросы не подходят для отображения других настроенных на сервере сайтов.

Создадим директорию для example.com следующей командой, используя флаг -p для создания любых необходимых родительских директорий:
  • sudo mkdir -p /var/www/example.com/html
Далее настроим права доступа для созданной директории для текущего пользователя, используя переменную окружения $USER:
  • sudo chown -R $USER:$USER /var/www/example.com/html
Теперь права должны для корневой директории быть настроены правильным образом при условии, что вы не меняли своё значение umask. На всяких случай мы можем удостовериться в этом командой:
  • sudo chmod -R 755 /var/www/example.com
Далее создадим страницу index.html в nano или любом другом текстовом редакторе:
  • nano /var/www/example.com/html/index.html
Добавим в файл следующий HTML:
/var/www/example.com/html/index.html
<html>
    <head>
        <title>Welcome to Example.com!</title>
    </head>
    <body>
        <h1>Success!  The example.com server block is working!</h1>
    </body>
</html>


Сохраните и закройте файл.


Для того, чтобы Nginx мог отдавать этот контент, нам необходимо настроить серверный блок. Вместо того, чтобы редактировать существующий файл конфигурации серверного блока, создадим новый файл для нашего сайта - /etc/nginx/sites-available/example.com:
  • sudo nano /etc/nginx/sites-available/example.com
Скопируйте следующий текст настроек серверного блока в созданный файл:
/etc/nginx/sites-available/example.com
server {
        listen 80;
        listen [::]:80;

        root /var/www/example.com/html;
        index index.html index.htm index.nginx-debian.html;

        server_name example.com www.example.com;

        location / {
                try_files $uri $uri/ =404;
        }
}
Обратите внимание на то, что мы изменили конфигурацию root на адрес нашей новой директории, а server_name на наше доменное имя.
Теперь активируем файл путём создания ссылки на него в директории sites-enabled, которую Nginx проверяет при старте:
  • sudo ln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled/
Теперь два серверных блока активированы и настроены для ответа на основании своих директив listen и server_name (вы можете узнать больше о том, как Nginx обрабатывает эти директивы вот тут):
  • example.com: Будет отвечать на запросы example.com и www.example.com.
  • default: Будет отвечать на любые запросы на порту 80, которые не соответствуют другим настроенным блокам.

Для того, чтобы избежать потенциальной проблемы hash bucket memory, которая может появиться при добавлении дополнительных имён серверов, нам необходимо изменить одно значение в файле /etc/nginx/nginx.conf. Откройте файл командой:
  • sudo nano /etc/nginx/nginx.conf
Найдите директиву server_names_hash_bucket_size и удалите символ # для того, чтобы раскомментировать её:
/etc/nginx/nginx.conf
...
http {
    ...
    server_names_hash_bucket_size 64;
    ...
}
...
Далее проверим файлы Nginx на наличие синтаксических ошибок:
  • sudo nginx -t


Сохраните и закройте файл.


Если никаких проблем не обнаружилось, перезапустите Nginx для применения внесённых изменений:
  • sudo systemctl restart nginx
Теперь Nginx должен корректно обрабатывать ваше новое доменное имя. Вы можете убедиться в этом набрав в браузере http://example.com и увидев что-то вроде такого вывода:
Успешная настройка example.com

Комментарии

Популярные сообщения из этого блога

Права на папки и файлы (unix/chmod)

Автоматическое монтирование дисков и разделов в Linux или что такое fstab? Проблема Debian

Как подключить сетевой диск Windows в Linux