Установка и базовая настройка Nginx на Rocky Linux 8

Про установку и базовую настройку 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 завершена, до скорых встреч.

Если у Вас возникли вопросы или Вы хотите чтобы я помог Вам, то Вы всегда можете связаться со мной разными доступными способами.


Оставить комментарий

avatar
1000

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.

  Подписаться  
Уведомление о