Перейти к основному содержимому
Вернуться в категорию

Установка Nginx и Apache: настройка виртуальных хостов

Установка и настройка веб-серверов Nginx и Apache, сравнение возможностей, создание виртуальных хостов, настройка SSL/TLS и управление веб-сервисами в Linux.

Время чтения: 15 мин Управление сервером
nginxapacheвеб-сервервиртуальный хостssllinuxhttphttps

Содержание

Установка Nginx и Apache: настройка виртуальных хостов

Nginx и Apache — два наиболее широко используемых веб-сервера в мире. Оба могут обслуживать веб-приложения, статические файлы и работать как обратные прокси на Linux-серверах. В этом руководстве рассматривается установка, базовая настройка и создание виртуальных хостов для обоих серверов.

Сравнение Nginx и Apache

ХарактеристикаNginxApache
АрхитектураАсинхронная, event-drivenПроцесс/поток
Статические файлыОчень быстроМедленнее
Динамический контентТребует обратного проксиВстроенные модули
Использование памятиНизкоеВыше
КонфигурацияПрощеПоддержка .htaccess
Лучше дляВысоконагруженных сайтовPHP-приложений

Выбирайте Nginx для высоконагруженного статического контента или обратного прокси; выбирайте Apache для PHP-приложений (WordPress, Laravel). Их также можно использовать вместе: Nginx спереди как обратный прокси, Apache сзади как сервер приложений.

Установка Nginx

Debian/Ubuntu

hljs bash
# Обновить список пакетов
sudo apt update

# Установить Nginx
sudo apt install nginx -y

# Запустить и включить сервис
sudo systemctl start nginx
sudo systemctl enable nginx

# Проверить статус
sudo systemctl status nginx

RHEL/CentOS/AlmaLinux

hljs bash
# Добавить репозиторий EPEL
sudo dnf install epel-release -y

# Установить Nginx
sudo dnf install nginx -y

# Запустить и включить сервис
sudo systemctl start nginx
sudo systemctl enable nginx

Основные команды Nginx

hljs bash
# Проверить конфигурацию
sudo nginx -t

# Перезагрузить конфигурацию (без простоя)
sudo systemctl reload nginx

# Перезапустить сервис
sudo systemctl restart nginx

# Показать версию Nginx
nginx -v

Настройка виртуального хоста Nginx

В Nginx для каждого сайта создаётся отдельный файл конфигурации в /etc/nginx/sites-available/.

Базовый виртуальный хост

hljs bash
# Создать файл конфигурации
sudo nano /etc/nginx/sites-available/example.com
hljs nginx
server {
    listen 80;
    listen [::]:80;
    server_name example.com www.example.com;

    root /var/www/example.com/html;
    index index.html index.htm index.php;

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

    # Для PHP-FPM
    location ~ \.php$ {
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/var/run/php/php8.1-fpm.sock;
    }

    # Блокировать доступ к скрытым файлам
    location ~ /\.ht {
        deny all;
    }

    # Лог-файлы
    access_log /var/log/nginx/example.com.access.log;
    error_log /var/log/nginx/example.com.error.log;
}
hljs bash
# Включить сайт
sudo ln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled/

# Создать веб-директорию
sudo mkdir -p /var/www/example.com/html
sudo chown -R www-data:www-data /var/www/example.com

# Проверить и перезагрузить
sudo nginx -t && sudo systemctl reload nginx

Конфигурация обратного прокси Nginx

hljs nginx
server {
    listen 80;
    server_name app.example.com;

    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_cache_bypass $http_upgrade;
    }
}

Установка Apache

Debian/Ubuntu

hljs bash
# Установить Apache
sudo apt update
sudo apt install apache2 -y

# Запустить и включить сервис
sudo systemctl start apache2
sudo systemctl enable apache2

# Проверить статус
sudo systemctl status apache2

RHEL/CentOS/AlmaLinux

hljs bash
# Установить Apache (httpd)
sudo dnf install httpd -y

# Запустить и включить сервис
sudo systemctl start httpd
sudo systemctl enable httpd

Основные команды Apache

hljs bash
# Проверить конфигурацию
sudo apachectl configtest

# Перезагрузить конфигурацию
sudo systemctl reload apache2

# Включить модули
sudo a2enmod rewrite
sudo a2enmod ssl

# Включить/отключить сайты
sudo a2ensite example.com
sudo a2dissite 000-default

Настройка виртуального хоста Apache

hljs bash
# Создать файл конфигурации
sudo nano /etc/apache2/sites-available/example.com.conf
hljs apache
<VirtualHost *:80>
    ServerName example.com
    ServerAlias www.example.com
    DocumentRoot /var/www/example.com/html

    <Directory /var/www/example.com/html>
        Options Indexes FollowSymLinks
        AllowOverride All
        Require all granted
    </Directory>

    ErrorLog ${APACHE_LOG_DIR}/example.com-error.log
    CustomLog ${APACHE_LOG_DIR}/example.com-access.log combined
</VirtualHost>
hljs bash
# Создать веб-директорию
sudo mkdir -p /var/www/example.com/html
sudo chown -R www-data:www-data /var/www/example.com

# Включить сайт
sudo a2ensite example.com.conf

# Проверить и перезагрузить
sudo apachectl configtest && sudo systemctl reload apache2

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

Используйте Certbot для бесплатного SSL-сертификата:

hljs bash
# Установить Certbot
sudo apt install certbot -y

# Для Nginx
sudo apt install python3-certbot-nginx -y
sudo certbot --nginx -d example.com -d www.example.com

# Для Apache
sudo apt install python3-certbot-apache -y
sudo certbot --apache -d example.com -d www.example.com

# Проверить автоматическое обновление
sudo certbot renew --dry-run

Ручная настройка SSL (Nginx)

hljs nginx
server {
    listen 443 ssl http2;
    server_name example.com www.example.com;

    ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers HIGH:!aNULL:!MD5;

    root /var/www/example.com/html;
    index index.html;
}

# Перенаправление HTTP на HTTPS
server {
    listen 80;
    server_name example.com www.example.com;
    return 301 https://$server_name$request_uri;
}

Настройки брандмауэра

hljs bash
# Разрешить HTTP и HTTPS с ufw
sudo ufw allow 'Nginx Full'
# или
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp

# Для Apache
sudo ufw allow 'Apache Full'

На серверах REXE не забудьте также открыть порты HTTP (80) и HTTPS (443) в брандмауэре Path Panel.

Заключение

Nginx и Apache — мощные веб-серверы для разных сценариев использования. Nginx идеален для высокопроизводительного статического контента и обратного прокси, а Apache предпочтителен для PHP-приложений и конфигураций на основе .htaccess. С настройкой виртуальных хостов на любом из серверов можно размещать несколько доменов на одном сервере.