Установка Nginx на CentOS 7

Установка Nginx на CentOS 7

Тема сегодняшней заметки — установка Nginx на CentOS 7. Информации как это сделать очень много, по-моему только ленивый не написал свой вариант. Тогда зачем мне необходима эта статья? В планах разбирать и делиться типовыми конфигурациями Nginx. Для этого должно быть понимание, какая точка является отправной. Например, заметка https://ittx.ru/note/2021/02/15/general_repozitorij_na_nginx подразумевает готовый для работы Nginx. В ней не рассматривается часть про установку и подготовку. Кроме того, накопилось много автоматизированных процессов, о которых речь пойдет в будущем. Для понимания, какие шаги автоматизированы и в какой последовательности, необходимо сначала описать ручной процесс.

С мотивацией разобрались, теперь перейдем к сути. Официальный сайт проекта: https://nginx.org/ru. Со своей стороны хочу добавить, что у Nginx хорошая русскоязычная документация.

Установка пакета Nginx

В стандартном репозитории CentOS пакета Nginx нет. Он есть в репозитории epel, но и там он всего одной версии, весьма отстающей от текущей стабильной. Для того, чтобы получить все возможные пакеты с Nginx, необходимо подключить репозиторий:

cat > /etc/yum.repos.d/yandex.repo <<EOF
[nginx]
name=nginx repo
baseurl=https://nginx.org/packages/mainline/centos/7/\$basearch/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key
EOF

После подключения для получения всех возможных пакетов можно выполнить команду:

yum --showduplicates list nginx

Что бы установить конкретный пакет, необходимо указать либо <имя пакета>-<версия>, либо <имя>-<полная версия>:

yum install nginx-1.15.2
yum install nginx-1.15.2-1.el7_4.ngx

Для чего может понадобиться установка устаревшего Nginx? Часто нужно развернуть дополнительный тестовый стенд для проверки функционала приложения. Например, в промышленной эксплуатации версия Nginx 1.15.2. Значит, и на тестовом стенде должен быть развернут Nginx такой же версии.

Для установки текущей основной версии вводим команду:

yum install nginx

Изменение конфигурационного файла

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

  • worker_processes — количество процессов. По умолчанию значение параметра равно единице. Вообще, количество процессов может зависеть от множества факторов. В моем случае устанавливаю в значение auto;
  • log_format json — добавленный блок позволяет логировать большое количество параметров, что очень удобно при отладке. Для его включения в блоке access_log /var/log/nginx/access.log main; необходимо указать вместо main параметр json. Не стоит использовать такой уровень логирования на постоянной основе. Достаточно подключать при решении конкретных задач.

Итоговый конфиг по пути /etc/nginx/nginx.conf получился такой:

user  nginx;
worker_processes  auto;
error_log  /var/log/nginx/error.log warn;
pid        /var/run/nginx.pid;
events {
    worker_connections  1024;
}
http {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;
    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';
    log_format json
          '{'
              '"@timestamp": "$time_iso8601", '
              '"remote_addr": "$remote_addr", '
              '"remote_user": "$remote_user", '
              '"http_host": "$host", '
              '"bytes_sent": $bytes_sent, '
              '"body_bytes_sent": $body_bytes_sent, '
              '"response_code": $status, '
              '"request_time": $request_time, '
              '"request_length": $request_length, '
              '"request_uri": "$request_uri", '
              '"request_method": "$request_method", '
              '"http_referrer": "$http_referer", '
              '"http_user_agent": "$http_user_agent", '
              '"http_origin": "$http_origin", '
              '"http_user_id": "$http_user_id", '
              '"http_ym_client_id": "$http_ym_client_id", '
              '"http_ga_client_id": "$http_ga_client_id", '
              '"upstream_addr": "$upstream_addr", '
              '"upstream_response_time": "$upstream_response_time", '
              '"upstream_response_length": "$upstream_response_length", '
              '"upstream_bytes_received": "$upstream_bytes_received", '
              '"http_x_forwarded_for": "$http_x_forwarded_for", '
              '"http_ds_session_id": "$http_ds_session_id", '
              '"http_source": "$http_source" '
          '}';
    access_log  /var/log/nginx/access.log  main;
    sendfile        on;
    #tcp_nopush     on;
    keepalive_timeout  65;
    #gzip  on;
    include /etc/nginx/conf.d/*.conf;
}

Проверяем конфигурацию на корректность и отсутствие синтаксических ошибок:

nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

Запускаем и добавляем загрузку при старте системы:

systemctl start nginx
systemctl enable nginx
Created symlink from /etc/systemd/system/multi-user.target.wants/nginx.service to /usr/lib/systemd/system/nginx.service.

Проверка работоспособности

Для проверки можно ввести команду netstat, которая показывает открытые порты:

netstat -tulpn
Установка Nginx на CentOS 7 - netstat

Так же не стоит забывать, что по умолчанию в CentOS 7 включен Firewall. Что бы 80 порт был доступен извне, необходимо сконфигурировать брандмауэр. Как это сделать, можно посмотреть в статье про Firewall. В результате, в браузере должна открыться такая страничка. За это отвечает файл default.conf в папке /etc/nginx/conf.d

Установка Nginx на CentOS 7 результат

Заключение

На этом установка Nginx на CentOS 7 завершена. Конфигурирование для конкретных приложений, таких как php или проксирование на другие серверы, рассмотрим в будущих статьях.