Установка и базовая настройка Nginx на Ubuntu 22.04

Про установку Nginx (stable или mainline) на Debian и CentOS я уже неоднократно писал, но Ubuntu обошел стороной и вот решил исправиться.

Подробности ниже.

Исходные данные: Ubuntu 22.04 (jammy)
Задача: Установить и настроить Nginx (ветка Mainline)

ВАЖНО! Все команды выполняем с правами root

1. Выполняем вспомогательных пакетов:

apt-get install -y curl gnupg2 ca-certificates lsb-release ubuntu-keyring

2. Скачиваем и добавляем ключ Nginx Inc. на нашу систему:

curl https://nginx.org/keys/nginx_signing.key | gpg --dearmor | sudo tee /usr/share/keyrings/nginx-archive-keyring.gpg >/dev/null

3. Проверьте, верный ли ключ был загружен:

gpg --dry-run --quiet --no-keyring --import --import-options import-show /usr/share/keyrings/nginx-archive-keyring.gpg

Должно выдать:

pub   rsa2048 2011-08-19 [SC] [expires: 2024-06-14]
      573BFD6B3D8FBC641079A6ABABF5BD827BD9BF62
uid                      nginx signing key <[email protected]>

Если отпечаток отличается от вышеуказанного, то удалите файл ключа.

4. Подключение репозитария

Если Вы хотите установить стабильную (Stable) ветку, то выполните

echo "deb [signed-by=/usr/share/keyrings/nginx-archive-keyring.gpg] http://nginx.org/packages/ubuntu `lsb_release -cs` nginx" | sudo tee /etc/apt/sources.list.d/nginx.list

Если Вы хотите установить основную (Mainline) ветку, то выполните (нам это и нужно)

echo "deb [signed-by=/usr/share/keyrings/nginx-archive-keyring.gpg] http://nginx.org/packages/mainline/ubuntu `lsb_release -cs` nginx" | sudo tee /etc/apt/sources.list.d/nginx.list

5. Настроим закрепление пакетов, чтобы к нам не устанавливались пакеты nginx распространяемые в дистрибутиве Ubuntu

echo -e "Package: *\nPin: origin nginx.org\nPin: release o=nginx\nPin-Priority: 900\n" | sudo tee /etc/apt/preferences.d/99nginx

6. Устанавливаем Nginx

apt-get update
apt-get install -y nginx

7. После установки запускаем Nginx:

systemctl enable --now nginx

8. Проверим факта запуска Nginx:

# systemctl status nginx
● nginx.service - nginx - high performance web server
     Loaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset: enabled)
     Active: active (running) since Sat 2023-07-29 13:31:28 UTC; 3s ago
       Docs: https://nginx.org/en/docs/
    Process: 9439 ExecStart=/usr/sbin/nginx -c /etc/nginx/nginx.conf (code=exited, status=0/SUCCESS)
   Main PID: 9440 (nginx)
      Tasks: 2 (limit: 1062)
     Memory: 2.5M
        CPU: 11ms
     CGroup: /system.slice/nginx.service
             ├─9440 "nginx: master process /usr/sbin/nginx -c /etc/nginx/nginx.conf"
             └─9441 "nginx: worker process" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" ""

Jul 29 13:31:28 myserver systemd[1]: Starting nginx - high performance web server...
Jul 29 13:31:28 myserver systemd[1]: nginx.service: Can't open PID file /run/nginx.pid (yet?) after start: Operation not permitted
Jul 29 13:31:28 myserver systemd[1]: Started nginx - high performance web server.

Строка «Active: active (running)» говорит о работе Nginx.

9. Проверим открытые порты:

# netstat -ltupn | grep nginx
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      9440/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.25.x :

wget https://gist.githubusercontent.com/CHERTS/4b1ad58e06404267591636a9f2b08114/raw/nginx.conf -O /etc/nginx/nginx.conf

После этого проверяем конфигурацию Nginx:

nginx -t

Если ошибок нет, то перезагружаем конфигурацию Nginx:

nginx -s reload

4. Меняем системные лимиты на количество открытых файлов.

Т.к. мы указали в nginx.conf параметр worker_rlimit_nofile = 10000, то будем исходить из него.

Традиционно во всех статьях в Интернет все меняют лимиты через редактирование файла /etc/security/limits.conf, но это неправильно, т.к. для Debian 8 и Debian 9 этот файл не работает.

В Ubuntu используется система инициализации systemd и поэтому лимиты на максимальное количество открытых файлов нужно настроить для systemd, для этого выплняем:

mkdir -p /lib/systemd/system/nginx.service.d
echo "[Service]" >/lib/systemd/system/nginx.service.d/limit.conf
echo "LimitNOFILE=10000" >>/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             3542                 3542                 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       3542                 3542                 signals   
Max msgqueue size         819200               819200               bytes     
Max nice priority         0                    0                    
Max realtime priority     0                    0                    
Max realtime timeout      unlimited            unlimited            us 

Все отлично!

Теперь по адресу 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 завершена, до скорых встреч.

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


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

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

4 комментариев
Межтекстовые Отзывы
Посмотреть все комментарии
Дмитрий
Дмитрий
9 месяцев назад

Спасибо, капитан, за копипаст инструкции с официального сайта на русском языке.

SUNLIB
SUNLIB
6 месяцев назад

При выполнении этих команд пишет, что нет прав
echo «[Service]» >/lib/systemd/system/nginx.service.d/limit.conf
echo «LimitNOFILE=10000» >>/lib/systemd/system/nginx.service.d/limit.conf
-bash: /lib/systemd/system/nginx.service.d/limit.conf: Permission denied
А вто по этой команде cat /etc/nginx/conf.d/default.conf | egrep -Ev «^\s*(;|#|$)» пишет, что Нет файла

Юнона
Юнона
6 месяцев назад
Ответить на  SUNLIB

Все настройки проводите под рутом.

4
0
Оставьте комментарий! Напишите, что думаете по поводу статьи.x