Установка и настойка Nginx на виртуальный сервер
Без категорий | Комментировать запись
Nginx — это бесплатный веб-сервер с открытым исходным кодом, который используют для размещения веб-сайтов и приложений любого размера. Этот веб-сервер имеет низкие требования к памяти, высокую масштабируемость и гибкую архитектуру, которая может обеспечить безопасную и предсказуемую производительность. Nginx — это не только веб-сервер, он также работает как балансировщик нагрузки, HTTP-кэш и обратный прокси-сервер.
В этом мануале вы узнаете, как установить и настроить Nginx на виртуальном сервере, настроить брандмауэр и управлять некоторыми процессами Nginx.
Для работы вам понадобится настроенный виртуальный сервер и пользователь с привилегиями sudo (мы используем Debian 11, настроенный согласно этому мануалу).
Чтобы выполнить последний раздел, вам также понадобится полное зарегистрированное доменное имя.
1: Установка Nginx
Nginx доступен в стандартных репозиториях программного обеспечения, что позволяет установить его при помощи обычных инструментов управления пакетами.
Сначала обновите локальный индекс пакетов, чтобы загрузить последние изменения:
sudo apt update
Затем установите пакет nginx:
sudo apt install nginx
Подтвердите установку, нажав Y, затем нажмите Enter, чтобы продолжить. Менеджер apt установит Nginx и все необходимые зависимости.
2: Настройка брандмауэра
Нам нужно протестировать Nginx после установки. Однако перед этим необходимо изменить настройки брандмауэра, чтобы открыть внешний доступ к стандартным веб-портам. Если вы следовали мануалу по начальной настройке сервера, который мы упоминали в предварительных требованиях, ваш сервер защищен брандмауэром UFW.
Во время установки Nginx регистрируется в UFW и предоставляет несколько профилей, которые можно использовать для включения или отключения доступа к Nginx через брандмауэр.
Просмотрите эти профили:
sudo ufw app list
Вы получите такой список:
Available applications: ... Nginx Full Nginx HTTP Nginx HTTPs OpenSSH …
Как видите, в списке зарегистрировано три профиля Nginx:
- Nginx Full: открывает порт 80 (незашифрованный сетевой трафик) и 443 (зашифрованный трафик TLS/SSL).
- Nginx HTTP: для незашифрованного трафика HTTP на порт 80.
- Nginx HTTPS: для зашифрованного трафика TLS/SSL на порт 443.
Рекомендуется выбрать наиболее строгий профиль сервиса. Однако, поскольку на сервере ещё не настроен SSL, мы можем настроить только порт 80.
Чтобы включить этот профиль, введите:
sudo ufw allow 'Nginx HTTP'
Убедитесь в том, что профиль включился:
sudo ufw status
Команда должна показать, что трафик HTTP разрешен:
Status: active To Action From -- ------ ---- OpenSSH ALLOW Anywhere Nginx HTTP ALLOW Anywhere OpenSSH (v6) ALLOW Anywhere (v6) Nginx HTTP (v6) ALLOW Anywhere (v6)
3: Тестирование веб-сервера
После установки система запустит Nginx автоматически. На данный момент веб-сервер должен работать.
Чтобы убедиться в том, что Nginx запустился, запросите его состояние в системе инициализации systemd.
systemctl status nginx
Вы получите такой вывод:
nginx.service - A high performance web server and a reverse proxy server Loaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset: enabled) Active: active (running) since Tue 2022-07-12 20:59:20 UTC; 17h ago Docs: man:nginx(8) Main PID: 2887 (nginx) Tasks: 2 (limit: 1132) Memory: 4.2M CPU: 81ms CGroup: /system.slice/nginx.service ├─2887 nginx: master process /usr/sbin/nginx -g daemon on; master_process on; └─2890 nginx: worker process
Как видите, сервис запущен успешно. Однако лучше также посетить стандартную посадочную страницу Nginx. Она доступна в браузере по домену или IP-адресу.
Если вы не знаете своего IP-адреса, вы можете узнать его с помощью командной строки. Введите:
ip addr show eth0 | grep inet | awk '{ print $2; }' | sed 's/\/.*$//'
Команда вернёт несколько строк. Проверьте каждый полученный адрес в браузере.
Узнав свой IP-адрес, введите его в браузер, чтобы убедиться, что веб-сервер работает должным образом.
http://your_server_ip
На экране появится стандартная страница Nginx:
4: Управление процессами Nginx
Теперь давайте рассмотрим несколько базовых команд для управления веб-сервером.
Чтобы остановить Nginx, введите:
sudo systemctl stop nginx
Чтобы запустить его:
sudo systemctl start nginx
Для перезапуска веб-сервера используйте команду:
sudo systemctl restart nginx
Чтобы обновить настройки Nginx, не сбрасывая соединения, введите такую команду:
sudo systemctl reload nginx
По умолчанию Nginx автоматически запускается во время загрузки сервера. Это поведение можно выключить:
sudo systemctl disable nginx
Чтобы возобновить автозапуск сервиса, введите:
sudo systemctl enable nginx
5: Настройка виртуального хоста
На веб-сервере Nginx можно использовать виртуальные хосты (также они называются блоками server). Они необходимы для изоляции настроек и размещения нескольких доменов на одном сервере. В мануале мы используем условный домен example.com, который вы должны заменить его собственным доменом.
Как правило, Nginx по умолчанию предоставляет один включенный виртуальный хост, который обслуживает каталог /var/www/html. Этого достаточно для обслуживания одного сайта, но если вы хотите разместить несколько сайтов, вам нужно создать новые виртуальные хосты. Создайте структуру каталогов в /var/www для сайта example.com, а /var/www/html оставьте как каталог по умолчанию, который будет обслуживаться, если запрос клиента не соответствует другим сайтам.
Создайте каталог example.com. Флаг -p нужен для создания всех необходимых родительских каталогов.
sudo mkdir -p /var/www/your_domain/html
Затем установите права на каталог с помощью переменной $USER:
sudo chown -R $USER:$USER /var/www/your_domain/html
Права должны быть установлены верно, если вы не поменяли unmask, но на всякий случай вы можете их проверить:
sudo chmod -R 755 /var/www/your_domain
Затем создайте образец страницы index.html с помощью nano или другого редактора:
nano /var/www/example.com/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> <p>This is a sample page.</p> </body> </html>
Сохраните и закройте файл.
Чтобы Nginx смог обслуживать этот контент, необходимо создать файл виртуального хоста с правильным набором директив. Вместо того чтобы напрямую изменять конфигурации по умолчанию, создайте новый файл /etc/nginx/sites-available/example.com.
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 содержит путь к новому каталогу, а server_name – новый домен.
Сохраните и закройте файл.
Включите файл, создав симлинк в каталоге sites-enabled:
sudo ln -s /etc/nginx/sites-available/your_domain /etc/nginx/sites-enabled/
Теперь у вас есть два виртуальных хоста, которые будут обслуживать запросы клиентов на основе директив listen и server_name:
- your_domain обслуживает запросы для www.your_domain и your_domain.
- default будет отвечать на запросы по порту 80, если они не соответствуют остальным виртуальным хостам.
Читайте также: Алгоритмы выбора блоков server и location в Nginx
Чтобы избежать проблем с памятью, которые могут возникнуть в результате настройки дополнительных имен серверов, необходимо отредактировать одно значение в файле /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: the configuration file /etc/nginx/nginx.conf syntax is ok nginx: configuration file /etc/nginx/nginx.conf test is successful
Перезапустите Nginx, чтобы новые параметры вступили в силу:
sudo systemctl restart nginx
Теперь Nginx обслуживает домен вашего сайта. Чтобы убедиться в этом, откройте ссылку http://your_domain в браузере.
6: Важные файлы и каталоги Nginx
Теперь вы знаете, как управлять сервисом. Пора познакомиться с важными файлами и каталогами веб-сервера Nginx.
Контент
- var/www/htm: содержит текущий контент сайта. По умолчанию в нём находится только стандартная посадочная страница, которую вы уже видели. Этот каталог можно изменить в конфигурационном файле Nginx.
Настройки сервера
- /etc/nginx: каталог настроек nginx, в котором хранятся все конфигурационные файлы.
- /etc/nginx/nginx.conf: главный конфигурационный файл Nginx, содержащий глобальные настройки веб-сервера.
- /etc/nginx/sites-available/: каталог, в котором хранятся настроенные блоки server (виртуальные хосты) каждого отдельного сайта. Nginx не будет использовать эти блоки, пока ссылка на них не появится в каталоге sites-enabled (о нём речь пойдёт дальше). Как правило, этот каталог используется для настройки виртуальных хостов.
- /etc/nginx/sites-enabled/: каталог, в котором хранятся включенные блоки server. Чтобы включить блок, нужно создать символьную ссылку на файл, хранящийся в каталоге sites-available.
- /etc/nginx/snippets: этот каталог хранит сниппеты – фрагменты настроек, которые можно включить в конфигурацию Nginx. Как правило, в качестве фрагментов добавляют потенциально повторяемые сегменты конфигурации.
Логи
- /var/log/nginx/access.log: регистрирует все запросы, полученные веб-сервером Nginx (если не настроено другое поведение).
- /var/log/nginx/error.log: хранит все сообщения об ошибках Nginx.
Заключение
Теперь веб-сервер Nginx установлен и готов к работе. Используйте его для обслуживания контента вашего сайта. Также теперь вы можете установить более сложный программный стек для поддержки сайта.
Tags: NGINX