Установка и настройка Nginx на CentOS 7: Полное пошаговое руководство
Nginx — один из самых мощных и широко используемых веб-серверов с открытым исходным кодом в мире. Известный своей исключительной производительностью, низким потреблением памяти и способностью обрабатывать тысячи одновременных соединений, Nginx — это идеальное решение для раздачи статического контента, работы в качестве обратного прокси и балансировки нагрузки в распределённых системах.
Независимо от того, запускаете ли вы личный блог, высоконагруженную платформу электронной коммерции или сложную архитектуру микросервисов, Nginx обеспечивает скорость и надёжность, которые требуют ваши пользователи. Это подробное руководство проведёт вас через каждый этап установки, настройки, защиты и оптимизации Nginx на сервере CentOS 7 — от подготовки системы до включения HTTPS с бесплатным SSL-сертификатом Let's Encrypt.
> Предварительные требования: Сервер CentOS 7 с доступом root или sudo. Если вам нужна надёжная высокопроизводительная среда для следования инструкциям, рассмотрите возможность использования VPS Hosting от AlexHost — специально разработанный для требовательных рабочих нагрузок с полным доступом root и хранилищем SSD.
Шаг 1: Обновите вашу систему
Перед установкой любого нового программного обеспечения критически важно убедиться, что ваша система CentOS 7 полностью обновлена. Устаревшие пакеты могут привести к уязвимостям безопасности и конфликтам зависимостей, которые усложняют процесс установки.
Откройте ваш терминал и выполните следующую команду:
sudo yum update -yЭта команда обновляет все установленные пакеты до их последних доступных версий. Флаг -y автоматически подтверждает все запросы, делая процесс неинтерактивным. Дайте обновлению полностью завершиться перед продолжением.
Шаг 2: Установка Nginx через YUM
Nginx недоступен в стандартных репозиториях CentOS 7. Сначала необходимо установить репозиторий EPEL (Extra Packages for Enterprise Linux), который предоставляет широкий спектр дополнительных пакетов программного обеспечения для дистрибутивов на основе RHEL.
Установите репозиторий EPEL:
sudo yum install epel-release -yУстановите Nginx:
sudo yum install nginx -yЭта команда загружает и устанавливает Nginx вместе со всеми необходимыми зависимостями. После завершения установки вы можете проверить установленную версию с помощью:
nginx -vВы должны увидеть вывод, похожий на:
nginx version: nginx/1.20.xШаг 3: Запуск и включение сервиса Nginx
После установки Nginx необходимо запустить сервис и настроить его на автоматический запуск при каждой перезагрузке сервера.
Запустите сервис Nginx:
sudo systemctl start nginxВключите Nginx для запуска при загрузке:
sudo systemctl enable nginxПроверьте статус сервиса, чтобы подтвердить его работу:
sudo systemctl status nginxВы должны увидеть вывод, указывающий на то, что сервис active (running):
● nginx.service - The nginx HTTP and reverse proxy server
Loaded: loaded (/usr/lib/systemd/system/nginx.service; enabled; ...)
Active: active (running) since ...Если сервис не запустится, проверьте журналы ошибок в /var/log/nginx/error.log для получения диагностической информации.
Шаг 4: Настройка брандмауэра
CentOS 7 использует firewalld в качестве инструмента управления брандмауэром по умолчанию. По умолчанию трафик HTTP (порт 80) и HTTPS (порт 443) блокируется. Вы должны явно открыть эти порты, чтобы разрешить веб-трафику достигать вашего сервера Nginx.
Разрешить трафик HTTP:
sudo firewall-cmd --permanent --add-service=httpРазрешить трафик HTTPS:
sudo firewall-cmd --permanent --add-service=httpsПерезагрузите брандмауэр, чтобы применить изменения:
sudo firewall-cmd --reloadПроверьте активные правила:
sudo firewall-cmd --list-allВы должны увидеть оба http и https в разделе services выходных данных. Если ваш сервер размещен за внешним брандмауэром или группой безопасности (обычно у облачных провайдеров), убедитесь, что эти правила также обновлены для разрешения трафика на портах 80 и 443.
Шаг 5: Проверка установки
Чтобы подтвердить, что Nginx установлен правильно и обслуживает содержимое, откройте веб-браузер и перейдите на общедоступный IP-адрес вашего сервера:
http://your_server_ipВы должны увидеть страницу приветствия Nginx по умолчанию, на которой отображается сообщение *"Welcome to nginx!"*. Это подтверждает, что веб-сервер работает и доступен из Интернета.
Если вы не видите страницу приветствия, проверьте следующее:
- Служба Nginx запущена (
sudo systemctl status nginx) - Правила брандмауэра применены правильно
- IP-адрес вашего сервера указан правильно
- Никакая другая служба (например, Apache) не занимает порт 80
Шаг 6: Настройка блоков сервера Nginx
Nginx использует блоки сервера (функционально эквивалентные виртуальным хостам Apache) для определения способа обработки запросов для разных доменов или поддоменов. Каждый блок сервера обычно хранится как отдельный файл конфигурации в директории /etc/nginx/conf.d/.
Основной файл конфигурации Nginx находится в /etc/nginx/nginx.conf. Он содержит директиву, которая автоматически загружает все файлы .conf из директории conf.d, что позволяет сохранить модульность конфигурации и упростить управление.
Шаг 6a: Создание нового файла конфигурации блока сервера
Создайте новый файл конфигурации для вашего домена. Замените example.com на ваше фактическое имя домена:
sudo nano /etc/nginx/conf.d/example.com.confДобавьте следующую конфигурацию блока сервера:
server {
listen 80;
server_name example.com www.example.com;
root /var/www/example.com/html;
index index.html index.htm index.php;
# Logging
access_log /var/log/nginx/example.com.access.log;
error_log /var/log/nginx/example.com.error.log;
location / {
try_files $uri $uri/ =404;
}
# Deny access to hidden files
location ~ /. {
deny all;
}
}Объяснение ключевых директив:
| Директива | Описание |
|---|---|
listen 80 | Указывает Nginx прослушивать входящие соединения на порту 80 (HTTP) |
server_name | Определяет имена доменов, на которые отвечает этот блок сервера |
root | Указывает директорию корневого документа, где хранятся файлы веб-сайта |
index | Определяет файлы по умолчанию, которые Nginx будет предоставлять при запросе директории |
try_files | Пытается предоставить запрошенный URI как файл, затем как директорию, и возвращает 404, если ничего не найдено |
access_log / error_log | Определяет отдельные файлы журналов для этого виртуального хоста для более удобной отладки |
Сохраните файл и выйдите из редактора (Ctrl+X, затем Y, затем Enter в nano).
Шаг 7: Создание корневого каталога документов и тестового файла
Создайте корневой каталог документов, который вы определили в конфигурации блока сервера:
sudo mkdir -p /var/www/example.com/htmlСоздайте простой index.html файл для проверки правильной работы блока сервера:
echo "<h1>Welcome to Example.com — Powered by Nginx on CentOS 7!</h1>" | sudo tee /var/www/example.com/html/index.htmlУстановите правильное владение и разрешения, чтобы Nginx мог читать файлы:
sudo chown -R nginx:nginx /var/www/example.com/
sudo chmod -R 755 /var/www/example.com/> Примечание о SELinux: CentOS 7 поставляется с включенным SELinux по умолчанию. Если Nginx не может читать ваши веб-файлы даже с правильными разрешениями, вам может потребоваться применить соответствующий контекст SELinux:
> “`bash
> sudo chcon -Rt httpd_sys_content_t /var/www/example.com/
> “`
Шаг 8: Проверка конфигурации Nginx
Перед перезагрузкой Nginx для применения новой конфигурации всегда проверяйте наличие синтаксических ошибок. Неправильно настроенный файл может привести к отключению всего веб-сервера.
Запустите тест конфигурации:
sudo nginx -tУспешный тест выдает следующий результат:
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successfulЕсли обнаружены ошибки, внимательно проверьте указанные номера строк в файлах конфигурации и исправьте все проблемы перед продолжением.
Перезагрузите Nginx для применения изменений:
sudo systemctl restart nginxКроме того, если вы хотите перезагрузить конфигурацию без разрыва активных соединений (рекомендуется для production-окружений), используйте:
sudo systemctl reload nginxТеперь откройте ваш домен в браузере. Вы должны увидеть вашу пользовательскую страницу index.html.
Шаг 9: Настройка HTTPS с Let’s Encrypt
Запуск веб-сайта по простому HTTP подвергает ваших пользователей потенциальному подслушиванию и атакам типа «человек посередине». Защита вашего сайта с помощью HTTPS больше не является опциональной — это фундаментальное требование для доверия пользователей, целостности данных и рейтинга поисковых систем.
Let’s Encrypt предоставляет бесплатные, автоматизированные и надежные SSL/TLS сертификаты. Вы также можете изучить премиум SSL сертификаты от AlexHost с расширенной валидацией и опциями, подтвержденными организацией, которые предлагают более высокие уровни доверия для бизнес-сайтов.
Установка Certbot и плагина Nginx
sudo yum install certbot python2-certbot-nginx -yПолучение и установка SSL сертификата
Запустите Certbot с плагином --nginx, который автоматически модифицирует вашу конфигурацию Nginx для включения HTTPS:
sudo certbot --nginx -d example.com -d www.example.comСледуйте интерактивным подсказкам:
- Введите ваш адрес электронной почты для уведомлений о продлении
- Согласитесь с Условиями обслуживания Let’s Encrypt
- Выберите, перенаправлять ли трафик HTTP на HTTPS (настоятельно рекомендуется — выберите опцию 2)
Certbot автоматически:
- Получит подписанный сертификат от Let’s Encrypt
- Модифицирует ваш
/etc/nginx/conf.d/example.com.confдля включения SSL директив - Настроит перенаправление с HTTP на HTTPS
После завершения проверьте конфигурацию HTTPS, посетив:
https://example.comВаш браузер должен отобразить значок замка, подтверждающий, что соединение зашифровано.
Шаг 10: Автоматизация обновления сертификатов
Сертификаты Let's Encrypt действительны в течение 90 дней. Если не обновить их до истечения срока, ваш сайт будет отображать предупреждения о безопасности для посетителей, что серьезно повлияет на доверие пользователей и трафик.
Протестируйте процесс обновления
Перед настройкой автоматизации убедитесь, что процесс обновления работает правильно:
sudo certbot renew --dry-runУспешный пробный запуск подтверждает, что автоматическое обновление будет работать без проблем.
Установите задачу Cron для автоматического обновления
Откройте корневой crontab:
sudo crontab -eДобавьте следующую строку для проверки и обновления сертификатов дважды в день (рекомендуемая частота):
0 0,12 * * * /usr/bin/certbot renew --quiet --post-hook "systemctl reload nginx"Объяснение расписания cron:
0 0,12 * * * — Запускается в полночь и в полдень каждый день
--quiet — Подавляет вывод, если не возникает ошибка
--post-hook "systemctl reload nginx" — Перезагружает Nginx после успешного обновления для применения нового сертификата без простоев
Сохраните и выйдите из редактора crontab. Ваши SSL сертификаты будут обновляться автоматически, обеспечивая безопасность вашего сайта без ручного вмешательства.
Советы по оптимизации производительности Nginx на CentOS 7
После завершения базовой настройки рассмотрите эти улучшения конфигурации для максимизации производительности Nginx:
Включите сжатие Gzip
Добавьте следующее в ваш nginx.conf в блоке http {} для уменьшения размера ответов, отправляемых клиентам:
gzip on;
gzip_vary on;
gzip_min_length 1024;
gzip_proxied expired no-cache no-store private auth;
gzip_types text/plain text/css text/xml text/javascript application/javascript application/xml+rss application/json;
Настройте кеширование браузера
Добавьте заголовки cache-control для статических ресурсов, чтобы снизить нагрузку на сервер и улучшить время загрузки страницы:
location ~* .(jpg|jpeg|png|gif|ico|css|js|woff|woff2)$ {
expires 30d;
add_header Cache-Control "public, no-transform";
}
Настройте рабочие процессы
В /etc/nginx/nginx.conf установите количество рабочих процессов в соответствии с количеством ядер CPU вашего сервера:
worker_processes auto;
worker_connections 1024;
> Для ресурсоемких приложений или веб-сайтов с высоким трафиком рассмотрите возможность обновления до Dedicated Servers от AlexHost, которые предоставляют гарантированные ресурсы CPU, RAM и хранилища без эффекта соседства.
Управление несколькими веб-сайтами с помощью Nginx
Одной из величайших сильных сторон Nginx является его способность размещать несколько веб-сайтов на одном сервере через блоки сервера. Для каждого дополнительного домена просто:
Создайте новый .conf файл в /etc/nginx/conf.d/server_nameroot на соответствующий корневой каталог документовsudo nginx -t и sudo systemctl reload nginxЕсли вы предпочитаете графический интерфейс для управления веб-сервером, виртуальными хостами, базами данных и учетными записями электронной почты, рассмотрите VPS с cPanel — полностью управляемое решение панели управления, которое упрощает администрирование сервера без ущерба для гибкости.
Кроме того, изучите полный спектр панелей управления VPS от AlexHost, включая Plesk, DirectAdmin и другие варианты, подходящие для различных рабочих процессов и технических предпочтений.
Устранение распространённых проблем Nginx на CentOS 7
| Проблема | Вероятная причина | Решение | |
|---|---|---|---|
| Nginx не запускается | Порт 80/443 уже используется | Запустите `sudo ss -tlnp | grep :80` для определения конфликтующего процесса |
| Ошибка 403 Forbidden | Неправильные разрешения файлов или контекст SELinux | Проверьте chmod/chown и примените chcon для SELinux | |
| 502 Bad Gateway | Upstream-сервис (PHP-FPM, Node.js) не запущен | Убедитесь, что сервис backend активен и сокет/порт указаны правильно | |
| SSL-сертификат не обновляется | Certbot не может привязаться к порту 80 | Убедитесь, что порт 80 открыт и ни один другой процесс его не блокирует | |
| Изменения не вступают в силу | Конфигурация не перезагружена | Запустите sudo systemctl reload nginx после каждого изменения конфигурации |
Заключение
Вы успешно установили, настроили и защитили Nginx на CentOS 7. Ваш сервер готов к размещению веб-сайтов с высокой производительностью, эффективной обработке одновременных соединений и доставке контента через зашифрованные HTTPS соединения — все необходимые качества для современной производственной веб-среды.
Вот краткое описание того, что было достигнуто:
- ✅ Обновлена система CentOS 7 и установлен Nginx через репозиторий EPEL
- ✅ Запущена и включена служба Nginx для автоматического запуска при загрузке
- ✅ Настроен firewalld для разрешения трафика HTTP и HTTPS
- ✅ Создан и настроен пользовательский блок сервера для домена
- ✅ Установлены правильные разрешения файлов и контексты SELinux для корневой папки документов
- ✅ Проверена конфигурация на ошибки синтаксиса перед применением изменений
- ✅ Защищен сайт бесплатным SSL сертификатом Let's Encrypt через Certbot
- ✅ Автоматизировано обновление сертификата с помощью задания cron
Поддержание безопасного и высокопроизводительного веб-сервера требует постоянного внимания. Регулярно обновляйте Nginx, отслеживайте журналы доступа и ошибок, а также пересматривайте конфигурацию по мере изменения требований вашего сайта.
Если вы ищете надежную основу хостинга для своих проектов на Nginx, AlexHost предлагает полный спектр решений — от начального уровня Shared Web Hosting для небольших сайтов до высокопроизводительных VPS и выделенной инфраструктуры для требовательных приложений. Каждый план поддерживается оборудованием корпоративного уровня, круглосуточной технической поддержкой и обязательством по обеспечению безотказности и безопасности.
на всех хостинговых услугах