Nginx — один из самых популярных веб-серверов. Он используется для размещения сайтов, работы в качестве обратного прокси, балансировщика нагрузки и отдачи статических файлов. Благодаря высокой производительности и небольшому потреблению ресурсов Nginx отлично подходит для VPS/VDS.
Если вы только купили сервер:
Подключитесь к серверу
Выполните подготовку сервера к работе
В современных версиях CentOS используется пакетный менеджер dnf.
sudo dnf install nginx -y
Если пакет не найден, сначала обновите список репозиториев:
sudo dnf makecache
После установки необходимо включить автозапуск и запустить сервис:
sudo systemctl enable --now nginx
sudo systemctl status nginx
Если увидите статус active (running) — всё работает.

Подробнее о systemctl: Как перезапустить сервис в Linux
В большинстве дистрибутивов CentOS используется firewalld.
Разрешаем HTTP:
sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --reload
Если планируете использовать HTTPS:
sudo firewall-cmd --permanent --add-service=https
sudo firewall-cmd --reload
Если используется другой файрвол, откройте необходимые порты способом, который поддерживает именно он.
Подробная статья про iptables: https://62yun.ru/blog/article/iptables-open-close-port
Если файрвол отключён, ничего делать не нужно.
Структура каталогов практически такая же, как в Ubuntu:
/etc/nginx/nginx.conf — главный конфигурационный файл./etc/nginx/conf.d/ — дополнительные конфигурации сайтов.В отличие от Ubuntu, каталогов sites-available и sites-enabled обычно нет.
Каждый сайт представляет собой отдельный .conf файл внутри conf.d.
Предположим, ваш домен — example.com.
sudo nano /etc/nginx/conf.d/example.com.conf
Как работать с nano писали в статье:
https://62yun.ru/blog/article/nano-linux
Если на сервере будет несколько сайтов, для каждого создаётся отдельный файл конфигурации в каталоге /etc/nginx/conf.d/.
server {
listen 80;
server_name 147.45.113.2; # поменяйте на свой домен или ip адрес
root /var/www/example.com;
index index.html index.htm;
location / {
try_files $uri $uri/ =404;
}
}
server_name определяет, для какого домена применяется конфигурация.root задаёт директорию сайта.try_files проверяет существование файлов и возвращает ошибку 404, если файл отсутствует.sudo nginx -t
Если увидите сообщение:
syntax is ok

можно применить изменения:
sudo systemctl reload nginx
reload перечитывает конфигурацию без остановки сервера. Для пользователей сайт останется доступным.
Если папки ещё нет:
sudo mkdir -p /var/www/example.com
sudo nano /var/www/example.com/index.html
Простейшая страница:
<h1>Hello</h1>
Теперь при открытии домена или IP-адреса, указанного в конфигурации, должна отображаться эта страница.
Если отображается ошибка 403, то смотрите следующий пункт.

CentOS по умолчанию использует SELinux, который может запретить Nginx доступ к файлам сайта даже при правильных правах.
Проверить состояние можно командой:
getenforce
Если вывод:
Enforcing
необходимо назначить правильный контекст:
sudo chcon -R -t httpd_sys_content_t /var/www/example.com
Чтобы изменения не исчезли после перезагрузки системы:
sudo semanage fcontext -a -t httpd_sys_content_t "/var/www/example.com(/.*)?"
sudo restorecon -Rv /var/www/example.com
Если команда semanage отсутствует, установите пакет:
sudo dnf install policycoreutils-python-utils -y
Основные журналы:
/var/log/nginx/access.log/var/log/nginx/error.logПросматривать ошибки в реальном времени:
tail -f /var/log/nginx/error.log
Во многих случаях причина проблемы становится понятна сразу после просмотра журнала.
Подробнее про логи можно прочитать в статье:
https://62yun.ru/blog/article/logs-journalctl-tail-logrotate
Устанавливаем Certbot:
sudo dnf install certbot python3-certbot-nginx -y
Получаем сертификат:
sudo certbot --nginx -d example.com -d www.example.com
Certbot автоматически обновит конфигурацию Nginx и настроит автоматическое продление сертификатов.
Если продление не удастся выполнить, на указанную электронную почту придёт уведомление.
sudo certbot renew --dry-run
Если ошибок нет, сертификаты будут продлеваться автоматически.
sudo nginx -t
tail -f /var/log/nginx/error.log
getenforce
Если проблема связана с доступом к файлам, скорее всего требуется настроить контексты безопасности.
sudo lsof -i :80
Если порт используется другим веб-сервером (например, Apache), остановите ненужный сервис или измените порт.
1. Применить новую конфигурацию без остановки сайтов
sudo systemctl reload nginx
2. Проверить конфигурацию
sudo nginx -t
3. Включить сжатие
Добавьте в /etc/nginx/nginx.conf:
gzip on;
gzip_types text/plain text/css application/json application/javascript;
4. Кэширование статических файлов
Внутри блока server:
location ~* \.(jpg|jpeg|png|css|js|ico)$ {
expires max;
access_log off;
}