Установка веб-сервера Nginx на Debian 11 |
Добавил(а) microsin |
Nginx это бесплатный и открытый (open-source) web-сервер, который предназначен для хостинга сайтов и приложений на его основе. Этот сервер популярен из-за своей низких требований к используемой памяти, высокой масштабируемости, с модульной архитектурой с безопасным функционалом и предсказуемой производительностью. Nginx это не просто web-сервер, он также работает как баланс нагрузки, кэш HTTP и промежуточный обратный прокси (reverse proxy, работающий вместе с сервером apache2). В этом руководстве (перевод документации [1]) мы установим Nginx на сервер под операционной системой Debian 11, настроим права сетевого экрана (firewall) и научимся управлять некоторыми процессами Nginx. [Предварительные требования] Перед тем, как начать установку, вы должны получить доступ к серверу Debian под обычным пользователем без прав root, но с разрешенными привилегиями sudo. Также на сервере должен быть запущен firewall. Как это настраивается, вы можете посмотреть в руководстве по первоначальной настройке Debian 11 [2]. Примечание: я проводил настройку Nginx на VPS хостинга reg.ru [3]. После покупки хостинга вам будет доступен IP-адрес сервера, к которому можно подключиться по протоколу SSH, а также логин и пароль root. Если вы хотите выполнить последние шаги из этого руководства, то понадобится зарегистрированное доменное имя. [Шаг 1: установка Nginx] Nginx доступен по умолчанию из репозиториев Debian, и поэтому устанавливается стандартными командами управления пакетами. Сначала нужно обновить локальный индекс пакетов на предмет получения последних, самых свежих изменений: $ sudo apt update После этого установите пакет nginx: $ sudo apt install nginx Подтвердите запрос на закачку пакетов для установки вводом Y+Enter. Менеджер пакетов apt установит Nginx и любые необходимые зависимости для него. После этого сервер сразу заработает, и будет доступен по IP-адресу вашего сервера (если открыт доступ к его портам, см. далее). [Шаг 2: настройка сетевого экрана] Если у вас установлен firewall, то перед его проверкой (см. далее врезку "Проверка работы сервера") необходимо разрешить доступ к серверу со стороны внешних подключений по публичному IP-адресу. Для этого необходимо настроить разрешения для открытых портов сервера. Предположим, что вы выполнили инструкции по предварительной настройке Debian 11 [2], тогда у вас уже установлен UFW firewall, сконфигурированный на ограничение доступа к вашему серверу. Примечание: для своего сервера в качестве сетевого экрана я использовал iptables, поскольку он интегрируется с fail2ban [4]. Во время установки Nginx регистрирует себя для UFW, чтобы предоставить несколько профилей приложения (application profiles), которые можно использовать для разрешения или запрета доступа к Nginx через сетевой экран UFW. Получить список профилей приложения можно командой: $ sudo ufw app list Должен быть выведен примерно такой список профилей: Available applications: Из этого сообщения мы видим, что для Nginx доступно 3 профиля: Nginx Full: этот профиль открывает порты 80 (обычный, незашифрованный web-трафик) и порт 443 (шифрованный трафик TLS/SSL). Рекомендуется разрешить наиболее ограничивающий профиль, пропускающий тот трафик, который вы сконфигурировали. Поскольку в этом руководстве мы не сконфигурировали еще TLS/SSL, то понадобится только лишь разрешить трафик HTTP на порту 80. Вы можете разрешить это командой: $ sudo ufw allow 'Nginx HTTP' Результат выполнения можно проверить следующей командой: $ sudo ufw status [Шаг 3: проверка вашего web-сервера] # systemctl status nginx.service Oct 28 09:08:10 5-63-155-210.cloudvps.regruhosting.ru systemd[1]: Starting A high performance web server and a reverse proxy server... Если запустить в браузере ссылку http://aa.bb.cc.dd, где aa.bb.cc.dd это IP-адрес вашего сервера, то вы увидите базовую страничку по умолчанию, которая будет автоматически создана в файле /var/www/html/index.nginx-debian.html: Welcome to nginx! If you see this page, the nginx web server is successfully installed and working. Further configuration is required. For online documentation and support please refer to nginx.org. Thank you for using nginx. [] [Шаг 4: управление процессом Nginx] Теперь, когда ваш web-сервер запущен и отвечает на запросы, можно рассмотреть некоторые базовые команды для его управления. Чтобы остановить web-сервер: $ sudo systemctl stop nginx Чтобы запустить остановленный web-сервер: $ sudo systemctl start nginx Чтобы перезапустить службу web-сервера (это может потребоваться при значительных изменениях конфигурации): $ sudo systemctl restart nginx Если вы сделали изменения в конфигурации, можно перезагрузить Nginx без сбрасывания существующих соединений. Для этого выполните команду: $ sudo systemctl reload nginx По умолчанию Nginx сконфигурирован для автоматического запуска, когда сервер загружается. Если это не то, что вы хотите, то такое поведение можно запретить командой (тогда Nginx после перезапуска сервера надо будет запускать вручную командой systemctl start nginx): $ sudo systemctl disable nginx Чтобы снова разрешить автозапуск Nginx при загрузке сервера, выполните команду: $ sudo systemctl enable nginx [Шаг 5: настройка блоков сервера (не обязательно)] При настройке web-серверов на основе Nginx можно использовать server blocks (это работает наподобие virtual hosts на Apache), чтобы инкапсулировать подробности конфигурации каждого домена (или субдомена), которые обслуживаются одним сервером. В следующем примере в качестве имени домена условно используется your_domain, но вместо этого вы должны заменить его на реальное имя вашего зарегистрированного домена. По умолчанию Nginx на Debian 11 конфигурирует и разрешает один server block, настроенный на обслуживание документов в директории /var/www/html. Это нормально работает, если на сервере находится только 1 сайт, однако такая конфигурация не подходит, если нужно поддерживать несколько сайтов с разными доменными именами на одном IP-адресе. Вместо модификации /var/www/html создайте структуру директорий в папке /var/www для вашего web-сайта your_domain, оставляя /var/www/html в качестве директории по умолчанию, если запрос клиента не соответствует ни одному из других сконфигурированных на сервере сайтов. Создайте директорию для your_domain следующим образом, используя флаг -p для создания необходимых дочерних директорий: $ sudo mkdir -p /var/www/your_domain/html Первая команда в этом примере создает каталог /var/www/your_domain/html, вторая назначает владельцем этой директории пользователя webuser, а третья команда меняет группу этой директории на группу webuser (здесь webuser это пользователь, от имени которого работает web-сервер): Права доступа для вашей корневой web-директории должны быть корректными, если вы не модифицировали ваше значение umask. Однако в этом нужно убедиться командой: # chmod -R 755 /var/www/your_domain Далее создайте простую страничку index.html, используя текстовый редактор nano или mcedit: $ nano /var/www/your_domain/html/index.html Введите для этого файла текст: < html> < head> < title>Welcome to your_domain< /title> < /head> < body> < h1>Success! Your Nginx server is successfully configured for < em>your_domain< /em>. < /h1> Сохраните этот файл и выйдите из редактора (nano для сохранения использует комбинацию клавиш Ctrl+X, для выхода Ctrl+O, с подтверждением клавишей Enter). Чтобы Nginx мог обслуживать эту страничку, также нужно создать server block с правильными директивами, чтобы указать на корневую папку для домена your_domain. Вместо того, чтобы напрямую изменять файл конфигурации по умолчанию (файл /etc/nginx/sites-available/default), создайте новый файл конфигурации /etc/nginx/sites-available/your_domain: # sudo nano /etc/nginx/sites-available/your_domain Введите в файле следующее и сохраните его: server { listen 80; listen [::]:80; root /var/www/your_domain/html; index index.html index.htm index.nginx-debian.html; server_name your_domain www.your_domain; location / { try_files $uri $uri/ =404; } Обратите внимание, что вы обновляете root-конфигурацию для вашей новой созданной директории /var/www/your_domain/html, и имя домена в строке server_name необходимо заменить на корректное имя реального домена. Далее разрешить этот server block путем создания символической ссылки на ваш пользовательский конфигурационный файл внутри директории sites-enabled, который Nginx прочитает во время своего запуска: $ sudo ln -s /etc/nginx/sites-available/your_domain /etc/nginx/sites-enabled/ Теперь на у вас есть два разрешенных server block-а, сконфигурированных для ответа на запросы, базируясь на директивах listen и server_name (более подробно про то, как Nginx обрабатывает эти директивы, см. [5]): • your_domain: отвечает на запросы браузера к доменам your_domain и www.your_domain. Чтобы избежать возможной проблемы с памятью хеширования (hash bucket memory), которая может возникнуть при добавлении дополнительных имен серверов в конфигурацию, необходимо настроить одно значение в файле/etc/nginx/nginx.conf. Для этого отройте его в редакторе: $ sudo nano /etc/nginx/nginx.conf Найдите строку server_names_hash_bucket_size, и удалите в её начале символ #, после чего сохраните файл и закройте редактор: ...http { ... server_names_hash_bucket_size 64; ... Проверьте, что в конфигурации Nginx нет ошибок следующей командой: $ sudo nginx -t После того, как вы удостоверились в отсутствии ошибок в конфигурации, перезапустите Nginx, чтобы изменения вступили в силу: $ sudo systemctl restart nginx После этого Nginx должен теперь обслуживать ваше настроенное доменное имя. Вы можете проверить это путем ввода в строке браузера ссылки http://your_domain. После запуска просмотра этой странички будет отображаться HTML, который вы создали в файле /var/www/your_domain/html/index.html: [Шаг 6: знакомство с важными каталогами и файлами Nginx] Содержимое сайта /var/www/html: актуальный web-контент, который по умолчанию (сразу после установки Nginx) состоит только из странички по умолчанию Nginx, находящейся в директории /var/www/html. Это можно поменять путем редактирования файлов конфигурации Nginx (см. выше "Шаг 5: настройка блоков сервера"). Конфигурация сервера /etc/nginx: директория конфигурации Nginx. Здесь находятся все конфигурационные файлы. /etc/nginx/nginx.conf: главный конфигурационный файл Nginx. Он может быть изменен для правки глобальной конфигурации Nginx, влияющей на все обслуживаемые сайты. /etc/nginx/sites-available/: директория, где находятся сервер-блоки для каждого обслуживаемого сайта. Nginx не будет использовать никакие конфигурационные файлы, найденные в этой директории, если для них не созданы символические ссылки, находящиеся в директории sites-enabled. Обычно здесь создаются все блоки конфигурации сервера, и затем они разрешаются путем создания символических ссылок. /etc/nginx/sites-enabled/: здесь сохраняются разрешенные блоки конфигурации для каждого сайта. Обычно это делается путем создания символических ссылок на файлы из директории sites-available. /etc/nginx/snippets: в этой директории хранятся фрагменты конфигурации, которые подключаются где-нибудь в других местах конфигурации Nginx. Повторяемые сегменты конфигурации потенциально являются хорошими кандидатами для рефакторинга и повторного использования. Логи сервера /var/log/nginx/access.log: каждый запрос к вашему серверу записывается в этот файл лога, если Nginx специально не сконфигурирован как-то иначе. /var/log/nginx/error.log: в этот лог будут записаны любые ошибки Nginx. [Ссылки] 1. How To Install Nginx on Debian 11 site:digitalocean.com. |