Установка Nginx и Apache: настройка виртуальных хостов
Установка и настройка веб-серверов Nginx и Apache, сравнение возможностей, создание виртуальных хостов, настройка SSL/TLS и управление веб-сервисами в Linux.
Содержание
Установка Nginx и Apache: настройка виртуальных хостов
Nginx и Apache — два наиболее широко используемых веб-сервера в мире. Оба могут обслуживать веб-приложения, статические файлы и работать как обратные прокси на Linux-серверах. В этом руководстве рассматривается установка, базовая настройка и создание виртуальных хостов для обоих серверов.
Сравнение Nginx и Apache
| Характеристика | Nginx | Apache |
|---|---|---|
| Архитектура | Асинхронная, event-driven | Процесс/поток |
| Статические файлы | Очень быстро | Медленнее |
| Динамический контент | Требует обратного прокси | Встроенные модули |
| Использование памяти | Низкое | Выше |
| Конфигурация | Проще | Поддержка .htaccess |
| Лучше для | Высоконагруженных сайтов | PHP-приложений |
Выбирайте Nginx для высоконагруженного статического контента или обратного прокси; выбирайте Apache для PHP-приложений (WordPress, Laravel). Их также можно использовать вместе: Nginx спереди как обратный прокси, Apache сзади как сервер приложений.
Установка Nginx
Debian/Ubuntu
# Обновить список пакетов
sudo apt update
# Установить Nginx
sudo apt install nginx -y
# Запустить и включить сервис
sudo systemctl start nginx
sudo systemctl enable nginx
# Проверить статус
sudo systemctl status nginx
RHEL/CentOS/AlmaLinux
# Добавить репозиторий EPEL
sudo dnf install epel-release -y
# Установить Nginx
sudo dnf install nginx -y
# Запустить и включить сервис
sudo systemctl start nginx
sudo systemctl enable nginx
Основные команды Nginx
# Проверить конфигурацию
sudo nginx -t
# Перезагрузить конфигурацию (без простоя)
sudo systemctl reload nginx
# Перезапустить сервис
sudo systemctl restart nginx
# Показать версию Nginx
nginx -v
Настройка виртуального хоста Nginx
В Nginx для каждого сайта создаётся отдельный файл конфигурации в /etc/nginx/sites-available/.
Базовый виртуальный хост
# Создать файл конфигурации
sudo nano /etc/nginx/sites-available/example.com
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;
}
# Включить сайт
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
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
# Установить Apache
sudo apt update
sudo apt install apache2 -y
# Запустить и включить сервис
sudo systemctl start apache2
sudo systemctl enable apache2
# Проверить статус
sudo systemctl status apache2
RHEL/CentOS/AlmaLinux
# Установить Apache (httpd)
sudo dnf install httpd -y
# Запустить и включить сервис
sudo systemctl start httpd
sudo systemctl enable httpd
Основные команды Apache
# Проверить конфигурацию
sudo apachectl configtest
# Перезагрузить конфигурацию
sudo systemctl reload apache2
# Включить модули
sudo a2enmod rewrite
sudo a2enmod ssl
# Включить/отключить сайты
sudo a2ensite example.com
sudo a2dissite 000-default
Настройка виртуального хоста Apache
# Создать файл конфигурации
sudo nano /etc/apache2/sites-available/example.com.conf
<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>
# Создать веб-директорию
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-сертификата:
# Установить 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)
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;
}
Настройки брандмауэра
# Разрешить 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. С настройкой виртуальных хостов на любом из серверов можно размещать несколько доменов на одном сервере.
Связанные статьи
Подключение к VDS по SSH: PuTTY, терминал и SSH-ключи
Пошаговое руководство по SSH-подключению к Linux VDS: PuTTY, терминал, аутентификация по ключу, правило фильтрации Path Panel и советы по безопасности.
Подключение к Windows VDS по RDP: полное руководство
Пошаговое руководство по RDP-подключению к Windows Server VDS: настройка, безопасность NLA, правило фильтрации Path Panel и устранение неполадок.
Смена ОС VDS-сервера: пошаговое руководство (Reinstall)
Смена операционной системы VDS через панель REXE: советы по резервному копированию, поддерживаемые дистрибутивы Linux и версии Windows Server.