Home » Как установить Nginx на CentOS 8
Как установить Nginx на CentOS 8

Как установить Nginx на CentOS 8

Настройка веб-сервера — это одна из тех задач, которые рано или поздно встретятся на пути любого системного администратора или DevOps-инженера. Nginx завоевал популярность благодаря своей производительности, гибкости и относительной простоте настройки. Если вы выбрали CentOS 8 как операционную систему для своего сервера, то эта статья поможет вам разобраться с установкой и базовой настройкой Nginx от A до Z.

Здесь мы пройдём весь путь — от подготовки системы до запуска первого сайта. Разберём типичные подводные камни, покажем полезные трюки и дадим практические рекомендации, которые пригодятся в реальной работе. Неважно, настраиваете ли вы VPS или выделенный сервер — принципы остаются теми же.

Как работает Nginx и почему именно он?

Nginx использует асинхронную, событийно-ориентированную архитектуру, которая позволяет обрабатывать тысячи одновременных соединений с минимальным потреблением ресурсов. В отличие от Apache, который создаёт отдельный процесс или поток для каждого соединения, Nginx работает с событиями через epoll/kqueue, что делает его невероятно эффективным для высоконагруженных проектов.

Основные преимущества:

  • Низкое потребление памяти (около 2.5MB на 10,000 неактивных keep-alive соединений)
  • Отличная производительность при обслуживании статического контента
  • Встроенные возможности балансировки нагрузки
  • Гибкая система модулей
  • Простая и понятная конфигурация

Подготовка системы

Перед установкой Nginx нужно убедиться, что система готова. Начнём с обновления пакетов:

sudo dnf update -y
sudo dnf install -y epel-release

CentOS 8 использует dnf вместо yum, хотя yum всё ещё доступен как символическая ссылка. EPEL (Extra Packages for Enterprise Linux) даёт доступ к дополнительным пакетам, включая более свежие версии Nginx.

Установка Nginx: три способа

Способ 1: Установка из репозитория CentOS

sudo dnf install nginx -y

Способ 2: Установка из официального репозитория Nginx

Этот способ даёт более свежую версию:

# Создаём файл репозитория
sudo tee /etc/yum.repos.d/nginx.repo << 'EOF'
[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true
EOF

# Устанавливаем Nginx
sudo dnf install nginx -y

Способ 3: Компиляция из исходников

Для максимального контроля над функциональностью:

# Устанавливаем зависимости
sudo dnf groupinstall "Development Tools" -y
sudo dnf install pcre-devel zlib-devel openssl-devel -y

# Скачиваем и компилируем
cd /tmp
wget http://nginx.org/download/nginx-1.20.2.tar.gz
tar -xzf nginx-1.20.2.tar.gz
cd nginx-1.20.2

./configure \
    --prefix=/etc/nginx \
    --sbin-path=/usr/sbin/nginx \
    --conf-path=/etc/nginx/nginx.conf \
    --error-log-path=/var/log/nginx/error.log \
    --http-log-path=/var/log/nginx/access.log \
    --pid-path=/var/run/nginx.pid \
    --lock-path=/var/run/nginx.lock \
    --with-http_ssl_module \
    --with-http_v2_module \
    --with-http_realip_module \
    --with-http_gzip_static_module

make && sudo make install

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

Способ Плюсы Минусы Рекомендуется для
Репозиторий CentOS Простота, интеграция с системой Может быть устаревшая версия Стандартные задачи
Официальный репозиторий Свежая версия, простота обновления Может конфликтовать с системными пакетами Продакшен-серверы
Компиляция Полный контроль, оптимизация Сложность, время, ручные обновления Специфические требования

Запуск и настройка автозагрузки

После установки нужно запустить Nginx и добавить его в автозагрузку:

# Запускаем Nginx
sudo systemctl start nginx

# Добавляем в автозагрузку
sudo systemctl enable nginx

# Проверяем статус
sudo systemctl status nginx

Если всё прошло успешно, вы увидите что-то вроде:

● nginx.service - The nginx HTTP and reverse proxy server
   Loaded: loaded (/usr/lib/systemd/system/nginx.service; enabled; vendor preset: disabled)
   Active: active (running) since Mon 2023-01-01 12:00:00 UTC; 1min ago

Настройка firewall

По умолчанию CentOS 8 блокирует HTTP/HTTPS трафик. Открываем нужные порты:

# Разрешаем HTTP и HTTPS
sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --permanent --add-service=https

# Применяем изменения
sudo firewall-cmd --reload

# Проверяем открытые порты
sudo firewall-cmd --list-all

Структура конфигурации Nginx

Основные файлы и директории:

  • /etc/nginx/nginx.conf — главный конфигурационный файл
  • /etc/nginx/conf.d/ — директория для дополнительных конфигов
  • /usr/share/nginx/html/ — документы по умолчанию
  • /var/log/nginx/ — логи

Посмотрим на базовую структуру главного конфига:

user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log;
pid /run/nginx.pid;

events {
    worker_connections 1024;
}

http {
    log_format main '$remote_addr - $remote_user [$time_local] "$request" '
                    '$status $body_bytes_sent "$http_referer" '
                    '"$http_user_agent" "$http_x_forwarded_for"';

    access_log /var/log/nginx/access.log main;

    sendfile on;
    tcp_nopush on;
    tcp_nodelay on;
    keepalive_timeout 65;
    types_hash_max_size 2048;

    include /etc/nginx/mime.types;
    default_type application/octet-stream;

    include /etc/nginx/conf.d/*.conf;
}

Создание первого виртуального хоста

Создаём конфигурацию для вашего сайта:

sudo tee /etc/nginx/conf.d/example.com.conf << 'EOF'
server {
    listen 80;
    server_name example.com www.example.com;
    root /var/www/example.com;
    index index.html index.php;

    # Логи для домена
    access_log /var/log/nginx/example.com.access.log;
    error_log /var/log/nginx/example.com.error.log;

    location / {
        try_files $uri $uri/ =404;
    }

    # Настройки для PHP (если нужно)
    location ~ \.php$ {
        fastcgi_pass unix:/var/run/php-fpm/www.sock;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
    }

    # Кеширование статики
    location ~* \.(jpg|jpeg|png|gif|ico|css|js)$ {
        expires 1M;
        add_header Cache-Control "public, immutable";
    }

    # Безопасность
    location ~ /\.ht {
        deny all;
    }
}
EOF

Создаём директорию для сайта и тестовый файл:

sudo mkdir -p /var/www/example.com
sudo chown -R nginx:nginx /var/www/example.com
sudo chmod -R 755 /var/www/example.com

# Создаём тестовую страницу
sudo tee /var/www/example.com/index.html << 'EOF'



    Добро пожаловать на example.com


    

Nginx успешно установлен!

Сервер работает на CentOS 8

EOF

Проверка конфигурации и перезапуск

Перед применением изменений всегда проверяем конфигурацию:

# Проверяем синтаксис
sudo nginx -t

# Если всё ОК, перезагружаем конфигурацию
sudo systemctl reload nginx

Типичные ошибки и их решения

Ошибка: "nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)"

Скорее всего, порт уже занят. Проверяем:

# Смотрим, что слушает 80 порт
sudo netstat -tulpn | grep :80

# Или с помощью ss
sudo ss -tulpn | grep :80

Ошибка: "403 Forbidden"

Проблемы с правами доступа. Проверяем:

# Права на директорию
ls -la /var/www/example.com/

# SELinux контекст
ls -Z /var/www/example.com/

# Исправляем SELinux контекст
sudo setsebool -P httpd_can_network_connect 1
sudo restorecon -R /var/www/example.com/

Настройка SSL/TLS с Let's Encrypt

Устанавливаем Certbot:

sudo dnf install certbot python3-certbot-nginx -y

# Получаем SSL сертификат
sudo certbot --nginx -d example.com -d www.example.com

# Проверяем автообновление
sudo certbot renew --dry-run

Оптимизация производительности

Несколько полезных настроек для повышения производительности:

# Добавляем в /etc/nginx/nginx.conf в блок http
http {
    # Оптимизация worker_processes
    worker_processes auto;
    worker_rlimit_nofile 65535;
    
    # Настройки событий
    events {
        worker_connections 1024;
        use epoll;
        multi_accept on;
    }
    
    # Сжатие
    gzip on;
    gzip_vary on;
    gzip_min_length 1024;
    gzip_proxied any;
    gzip_comp_level 6;
    gzip_types text/plain text/css text/xml text/javascript 
               application/javascript application/xml+rss application/json;
    
    # Кеширование файлов
    open_file_cache max=200000 inactive=20s;
    open_file_cache_valid 30s;
    open_file_cache_min_uses 2;
    open_file_cache_errors on;
    
    # Буферизация
    client_body_buffer_size 128k;
    client_max_body_size 10m;
    client_header_buffer_size 1k;
    large_client_header_buffers 4 4k;
    output_buffers 1 32k;
    postpone_output 1460;
}

Мониторинг и логирование

Полезные команды для мониторинга:

# Просмотр логов в реальном времени
sudo tail -f /var/log/nginx/access.log

# Анализ наиболее частых запросов
sudo awk '{print $7}' /var/log/nginx/access.log | sort | uniq -c | sort -nr | head -10

# Статистика по кодам ответов
sudo awk '{print $9}' /var/log/nginx/access.log | sort | uniq -c | sort -nr

# Топ IP-адресов
sudo awk '{print $1}' /var/log/nginx/access.log | sort | uniq -c | sort -nr | head -10

Интеграция с другими сервисами

Nginx отлично работает в связке с различными backend-сервисами:

Проксирование на Node.js приложение

location / {
    proxy_pass http://localhost:3000;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection 'upgrade';
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto $scheme;
    proxy_cache_bypass $http_upgrade;
}

Балансировка нагрузки

upstream backend {
    least_conn;
    server 192.168.1.10:8080 weight=3;
    server 192.168.1.11:8080 weight=2;
    server 192.168.1.12:8080 backup;
}

server {
    location / {
        proxy_pass http://backend;
    }
}

Альтернативы и сравнение

Веб-сервер Потребление RAM Производительность Сложность настройки Модульность
Nginx Низкое Высокая Средняя Хорошая
Apache Среднее Средняя Простая Отличная
Lighttpd Низкое Высокая Простая Средняя
Caddy Среднее Высокая Простая Хорошая

Интересные факты и возможности

Nginx может работать не только как веб-сервер, но и как:

  • Mail proxy — для проксирования IMAP/POP3/SMTP
  • TCP/UDP load balancer — начиная с версии 1.9.13
  • WebSocket proxy — для real-time приложений
  • HTTP/2 server — с поддержкой server push

Пример конфигурации для WebSocket:

location /ws {
    proxy_pass http://localhost:8080;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "upgrade";
    proxy_set_header Host $host;
    proxy_read_timeout 86400;
}

Автоматизация и скрипты

Полезный bash-скрипт для быстрого создания виртуальных хостов:

#!/bin/bash
# create-vhost.sh

DOMAIN=$1
WEBROOT="/var/www/$DOMAIN"

if [ -z "$DOMAIN" ]; then
    echo "Использование: $0 domain.com"
    exit 1
fi

# Создаём директорию
sudo mkdir -p $WEBROOT
sudo chown -R nginx:nginx $WEBROOT

# Создаём конфигурацию
sudo tee /etc/nginx/conf.d/$DOMAIN.conf << EOF
server {
    listen 80;
    server_name $DOMAIN www.$DOMAIN;
    root $WEBROOT;
    index index.html index.php;

    location / {
        try_files \$uri \$uri/ =404;
    }

    access_log /var/log/nginx/$DOMAIN.access.log;
    error_log /var/log/nginx/$DOMAIN.error.log;
}
EOF

# Создаём тестовую страницу
sudo tee $WEBROOT/index.html << EOF


$DOMAIN

$DOMAIN работает!

EOF # Проверяем конфигурацию и перезагружаем sudo nginx -t && sudo systemctl reload nginx echo "Виртуальный хост $DOMAIN создан успешно!"

Полезные ссылки

Заключение и рекомендации

Nginx на CentOS 8 — это мощное сочетание для создания высокопроизводительных веб-серверов. Основные моменты, которые стоит запомнить:

  • Для большинства задач достаточно установки из официального репозитория Nginx
  • Всегда проверяйте конфигурацию перед применением изменений
  • Не забывайте про SELinux и firewall — они могут стать источником проблем
  • Регулярно мониторьте логи и производительность
  • Используйте SSL/TLS для всех публичных сайтов

Nginx особенно хорош для:

  • Высоконагруженных проектов
  • Статических сайтов
  • Микросервисной архитектуры
  • API-серверов
  • Балансировки нагрузки

Если вы только начинаете работать с серверами, рекомендую потренироваться на тестовом VPS, а для продакшена рассмотреть выделенный сервер с достаточными ресурсами.

Помните: хорошая конфигурация Nginx — это не только производительность, но и безопасность. Регулярно обновляйте систему, следите за логами и не забывайте делать бэкапы конфигураций!


В этой статье собрана информация и материалы из различных интернет-источников. Мы признаем и ценим работу всех оригинальных авторов, издателей и веб-сайтов. Несмотря на то, что были приложены все усилия для надлежащего указания исходного материала, любая непреднамеренная оплошность или упущение не являются нарушением авторских прав. Все упомянутые товарные знаки, логотипы и изображения являются собственностью соответствующих владельцев. Если вы считаете, что какой-либо контент, использованный в этой статье, нарушает ваши авторские права, немедленно свяжитесь с нами для рассмотрения и принятия оперативных мер.

Данная статья предназначена исключительно для ознакомительных и образовательных целей и не ущемляет права правообладателей. Если какой-либо материал, защищенный авторским правом, был использован без должного упоминания или с нарушением законов об авторском праве, это непреднамеренно, и мы исправим это незамедлительно после уведомления. Обратите внимание, что переиздание, распространение или воспроизведение части или всего содержимого в любой форме запрещено без письменного разрешения автора и владельца веб-сайта. Для получения разрешений или дополнительных запросов, пожалуйста, свяжитесь с нами.

Leave a reply

Your email address will not be published. Required fields are marked