Про установку и базовую настройку Nginx на Debian и CentOS я уже писал неоднократно, а вот Rocky Linux как-то обошел стороной.
Исправим же это.
Исходные данные: ОС Rocky Linux 8
Задача: Установить и настроить Nginx (ветка Mainline)
1. Установим вспомогательные утилиты
dnf update dnf install -y wget net-tools
2. Добавим репозитарий Nginx в ОС
Добавим файл репозитария Nginx:
(cat <<-EOF [nginx-stable] name=nginx stable repo baseurl=http://nginx.org/packages/centos/$releasever/$basearch/ gpgcheck=1 enabled=0 gpgkey=https://nginx.org/keys/nginx_signing.key module_hotfixes=true [nginx-mainline] name=nginx mainline repo baseurl=http://nginx.org/packages/mainline/centos/$releasever/$basearch/ gpgcheck=1 enabled=1 gpgkey=https://nginx.org/keys/nginx_signing.key module_hotfixes=true EOF )>/etc/yum.repos.d/nginx.repo
Включим репозитарий nginx-mainline:
yum --enablerepo=nginx-mainline update
3. Установим Nginx и OpenSSL (опционально)
dnf -y install nginx dnf -y install openssl
4. Запустим Nginx
systemctl enable --now nginx
5. Проверим факта запуска Nginx
# systemctl status nginx ● nginx.service - nginx - high performance web server Loaded: loaded (/usr/lib/systemd/system/nginx.service; enabled; vendor preset: disabled) Active: active (running) since Wed 2022-09-28 20:26:52 MSK; 1s ago Docs: http://nginx.org/en/docs/ Process: 11902 ExecStart=/usr/sbin/nginx -c /etc/nginx/nginx.conf (code=exited, status=0/SUCCESS) Main PID: 11903 (nginx) Tasks: 3 (limit: 11368) Memory: 2.9M CGroup: /system.slice/nginx.service ├─11903 nginx: master process /usr/sbin/nginx -c /etc/nginx/nginx.conf ├─11904 nginx: worker process └─11905 nginx: worker process Sep 28 20:26:51 myserver.ru systemd[1]: Starting nginx - high performance web server... Sep 28 20:26:52 myserver.ru systemd[1]: Started nginx - high performance web server.
Строка «Active: active (running)» говорит о работе Nginx.
6. Проверим открытые порты
# netstat -ltupn | grep nginx tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 11903/nginx: master
Видим, что Nginx ожидает соединения на 80 порту на всех сетевых интерфейсах.
Теперь займемся базовой настройкой.
1. Создадим директорию для хранения SSL сертификатов и DH-ключей, а также создаем файл с параметрами для DHE-шифров:
mkdir /etc/nginx/ssl openssl dhparam -out /etc/nginx/ssl/dhparams.pem 2048
2. Создадим директории для хранения настроек Web-сайтов:
mkdir /etc/nginx/sites-available /etc/nginx/sites-enabled
3. Отредактируем основной файл настроек Nginx.
Я приведу базовый эталонный файл настроек который использую я на 99% серверов, рекомендую использовать его с дополнительными Вашими правками под конкретные нужды. В предыдущей статье мы уже рассматривали его, с тех пор ничего не изменилось.
Скачаем уже готовый файл для Nginx версии 1.23.x и подправим 2 параметра под нашу ОС:
wget https://gist.githubusercontent.com/CHERTS/8e9ecf4fbfb765556311a88e5106174b/raw/nginx.conf -O /etc/nginx/nginx.conf sed -i 's/user www-data;/user nginx;/g' /etc/nginx/nginx.conf sed -i 's/pid.*;/pid \/var\/run\/nginx.pid;/g' /etc/nginx/nginx.conf
После этого проверяем конфигурацию Nginx:
nginx -t
Если ошибок нет, то перезагружаем конфигурацию Nginx:
nginx -s reload
4. Меняем системные лимиты на количество открытых файлов.
Т.к. мы указали в nginx.conf параметр worker_rlimit_nofile = 10000, то будем исходить из него.
Традиционно во всех статьях в Интернет все меняют лимиты через редактирование файла /etc/security/limits.conf, но это неправильно, т.к. для Rocky Linux этот файл не работает так как хочется.
В Rocky Linux 8 используется система инициализации systemd и поэтому лимиты на максимальное количество открытых файлов нужно настроить для systemd, для этого выполняем:
mkdir -p /usr/lib/systemd/system/nginx.service.d (cat <<-EOF [Service] LimitNOFILE=10000 EOF )>/usr/lib/systemd/system/nginx.service.d/limit.conf systemctl daemon-reload systemctl restart nginx
Теперь проверим лимиты, для этого смотрим строку «Max open files» в выводе:
# cat /proc/$(cat /var/run/nginx.pid)/limits Limit Soft Limit Hard Limit Units Max cpu time unlimited unlimited seconds Max file size unlimited unlimited bytes Max data size unlimited unlimited bytes Max stack size 8388608 unlimited bytes Max core file size 0 unlimited bytes Max resident set unlimited unlimited bytes Max processes 7105 7105 processes Max open files 10000 10000 files Max locked memory 65536 65536 bytes Max address space unlimited unlimited bytes Max file locks unlimited unlimited locks Max pending signals 7105 7105 signals Max msgqueue size 819200 819200 bytes Max nice priority 0 0 Max realtime priority 0 0 Max realtime timeout unlimited unlimited us
Все отлично!
ВАЖНО! Если на Вашем сервере с Rocky Linux включен firewall, а как правило он включен, то необходимо разрешить сетевые подключения на порт 80 и 443.
Проверим, что сервис firewalld работает:
firewall-cmd --state
В ответ я получу:
running
Теперь посмотрим список сервисов:
firewall-cmd --permanent --list-all
Вывод у меня:
public target: default icmp-block-inversion: no interfaces: sources: services: cockpit dhcpv6-client ssh ports: protocols: forward: no masquerade: no forward-ports: source-ports: icmp-blocks: rich rules:
Теперь добавим в список разрешенных сервис http (порт 80) и https (порт 443):
firewall-cmd --permanent --zone=public --add-service=http firewall-cmd --permanent --zone=public --add-service=https firewall-cmd --reload
Теперь по адресу http://IP-адрес-вашего-сервер Вы сможете увидеть приветственную страницу «Welcome to nginx!».
За вывод данной страницы отвечает пока один единственный виртуальный сервер, его конфигурация находится в файле /etc/nginx/conf.d/default.conf
Выведем его содержимое без комментариев:
cat /etc/nginx/conf.d/default.conf | egrep -Ev "^\s*(;|#|$)"
Результат:
server { listen 80; server_name localhost; location / { root /usr/share/nginx/html; index index.html index.htm; } error_page 500 502 503 504 /50x.html; location = /50x.html { root /usr/share/nginx/html; } }
На данном этапе Вы должны прочитать документацию о том как Nginx обрабатывает входящие запросы, определение виртуальных серверов по имени и IP адресу и там же описана конфигурация простого сайта на PHP, но настройка PHP-FPM — это уже тема следующей статьи.
На этом базовая настройка Nginx завершена, до скорых встреч.
Если у Вас возникли вопросы или Вы хотите чтобы я помог Вам, то Вы всегда можете связаться со мной разными доступными способами.
Профессионально занимаюсь системным администрированием Linux -серверов и баз данных (MySQL, PostgreSQL) на протяжении последних 24 лет.