Установка 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
Так же не стоит забывать, что по умолчанию в CentOS 7 включен Firewall. Что бы 80 порт был доступен извне, необходимо сконфигурировать брандмауэр. Как это сделать, можно посмотреть в статье про Firewall. В результате, в браузере должна открыться такая страничка. За это отвечает файл default.conf в папке /etc/nginx/conf.d
Заключение
На этом установка Nginx на CentOS 7 завершена. Конфигурирование для конкретных приложений, таких как php или проксирование на другие серверы, рассмотрим в будущих статьях.