## Введение в Nginx как SSL-прокси
Nginx — высокопроизводительный веб-сервер, часто используемый как обратный прокси и балансировщик нагрузки. Ключевая директива `server_name` позволяет управлять виртуальными хостами, а интеграция с SSL обеспечивает безопасное HTTPS-соединение. В этом руководстве разберем настройку Nginx proxy с SSL и server_name на практическом примере.
## Зачем использовать Nginx в качестве SSL-прокси?
Основные преимущества конфигурации:
– **Централизация SSL-терминации**: Расшифровка трафика на прокси перед передачей бэкенд-серверам
– **Гибкая маршрутизация**: Директива `server_name` обрабатывает запросы для разных доменов
– **Повышение безопасности**: Защита данных через HTTPS и современные шифры
– **Упрощение сертификатов**: Единое место для управления SSL-сертификатами
## Пошаговая настройка Nginx Proxy с SSL
### 1. Установка Nginx и базовые настройки
Установите Nginx через пакетный менеджер вашего дистрибутива. Для Ubuntu/Debian:
“`bash
sudo apt update
sudo apt install nginx
“`
Проверьте работоспособность: `systemctl status nginx`.
### 2. Генерация SSL-сертификата с Let’s Encrypt
Используйте Certbot для автоматизации:
“`bash
sudo apt install certbot python3-certbot-nginx
sudo certbot –nginx -d example.com -d www.example.com
“`
Сертификаты автоматически обновляются и добавляются в конфиг Nginx.
### 3. Конфигурация server_name и проксирования
Пример конфигурации для `example.com` в `/etc/nginx/sites-available/example`:
“`nginx
server {
listen 443 ssl;
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;
location / {
proxy_pass http://localhost:8080; # Адрес бэкенд-сервера
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
server {
listen 80;
server_name example.com www.example.com;
return 301 https://$host$request_uri; # Редирект HTTP → HTTPS
}
“`
Активируйте конфиг и перезагрузите Nginx:
“`bash
sudo ln -s /etc/nginx/sites-available/example /etc/nginx/sites-enabled/
sudo nginx -t && sudo systemctl reload nginx
“`
### 4. Директива server_name: Продвинутые сценарии
– **Обработка поддоменов**: `server_name *.example.com;`
– **Резервный сервер**: `server_name _;` ловит несоответствующие домены
– **Регулярные выражения**: `server_name ~^(?.+).example.com$;` для динамических поддоменов
## Оптимизация SSL-настроек
Добавьте в конфиг параметры безопасности:
“`nginx
ssl_protocols TLSv1.2 TLSv1.3;
ssl_prefer_server_ciphers on;
ssl_ciphers ‘ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256’;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 1d;
“`
Проверьте конфигурацию через [SSL Labs](https://www.ssllabs.com/ssltest/).
## Часто задаваемые вопросы (FAQ)
### Как добавить несколько доменов в один server_name?
Перечислите домены через пробел:
“`nginx
server_name example.com api.example.com app.example.com;
“`
### Почему Nginx не распознает server_name после настройки?
Проверьте:
1. Корректность синтаксиса в конфиге
2. Наличие `server_name_in_redirect off;` при сложных редиректах
3. DNS-записи домена (команда `dig example.com`)
### Как настроить HTTP/2 с SSL в Nginx?
Добавьте `http2` к listen:
“`nginx
listen 443 ssl http2;
“`
Убедитесь, что OpenSSL версии 1.0.2+.
### Можно ли использовать wildcard-сертификат с server_name?
Да, например:
“`nginx
server_name *.example.com;
ssl_certificate /path/to/wildcard_cert.pem;
“`
### Как проверить ошибки конфигурации?
Используйте команду:
“`bash
sudo nginx -t
“`
Она покажет синтаксические ошибки и путь к проблемным строкам.
## Заключение
Связка Nginx proxy + SSL + server_name — мощное решение для безопасного и гибкого хостинга. Директива `server_name` обеспечивает точную маршрутизацию, а Let’s Encrypt упрощает внедрение HTTPS. Регулярно обновляйте конфиги и SSL-настройки для соответствия современным стандартам безопасности. Для сложных сценариев комбинируйте server_name с map-директивами и переменными Nginx.