- Настройка proxy_pass и server_name в Nginx: Полное руководство с примерами
- Что такое server_name и proxy_pass в Nginx?
- Пошаговая настройка proxy_pass и server_name
- Практические примеры конфигураций
- Пример 1: Прокси на локальное приложение
- Пример 2: Балансировка между серверами
- Лучшие практики оптимизации
- FAQ: Ответы на частые вопросы
- Как обработать несколько доменов в одном server-блоке?
- Почему proxy_pass возвращает 502 ошибку?
- Как проксировать WebSocket-соединения?
- Можно ли использовать переменные в proxy_pass?
Настройка proxy_pass и server_name в Nginx: Полное руководство с примерами
Nginx — мощный инструмент для проксирования запросов и управления серверами. Ключевые директивы proxy_pass и server_name позволяют гибко маршрутизировать трафик между приложениями. В этом руководстве разберем их работу, практическое применение и лучшие настройки для вашей инфраструктуры.
Что такое server_name и proxy_pass в Nginx?
Директива server_name определяет, какой домен или IP-адрес обрабатывает текущий server-блок. Она позволяет Nginx выбирать конфигурацию на основе имени запроса. Например:
server_name example.com;
— обрабатывает запросы к example.comserver_name *.example.com;
— ловит все поддоменыserver_name _;
— ловит все нераспознанные запросы
proxy_pass перенаправляет запросы на другой сервер (бэкенд). Например, для Node.js или Python-приложений:
location / {
proxy_pass http://localhost:3000;
}
Вместе эти инструменты создают гибкую систему маршрутизации, где Nginx выступает обратным прокси.
Пошаговая настройка proxy_pass и server_name
- Создайте конфиг в
/etc/nginx/sites-available/your_app
- Определите server_name:
server { listen 80; server_name api.your-domain.com; }
- Добавьте location с proxy_pass:
location / { proxy_pass http://127.0.0.1:8080; proxy_set_header Host $host; }
- Проверьте конфигурацию:
nginx -t
- Перезагрузите Nginx:
systemctl reload nginx
Ключевые параметры для proxy_pass:
proxy_set_header Host $host
— передает исходный доменproxy_redirect off
— отключает перезапись URLproxy_buffering on
— ускоряет передачу данных
Практические примеры конфигураций
Пример 1: Прокси на локальное приложение
server {
listen 80;
server_name app.example.com;
location / {
proxy_pass http://localhost:5000;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
}
}
Пример 2: Балансировка между серверами
upstream backend {
server 192.168.1.10:8000;
server 192.168.1.11:8000;
}
server {
server_name example.ru;
location / {
proxy_pass http://backend;
}
}
Лучшие практики оптимизации
- Кэширование статики: Отдавайте файлы напрямую через Nginx, минуя бэкенд
- Таймауты: Настройте
proxy_connect_timeout 5s;
для защиты от “висячих” соединений - Безопасность: Всегда передавайте заголовки X-Forwarded-For и X-Real-IP
- SSL Termination: Разгрузите бэкенд, обрабатывая HTTPS на Nginx
FAQ: Ответы на частые вопросы
Как обработать несколько доменов в одном server-блоке?
Перечислите домены через пробел:
server_name domain1.com domain2.com *.domain3.com;
Почему proxy_pass возвращает 502 ошибку?
Основные причины:
- Бэкенд-сервер не запущен
- Неправильный порт в proxy_pass
- Ошибки в firewall правилах
Проверьте логи: tail -f /var/log/nginx/error.log
Как проксировать WebSocket-соединения?
Добавьте в location:
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
Эти заголовки обеспечивают upgrade протокола с HTTP на WebSocket.
Можно ли использовать переменные в proxy_pass?
Да, но с осторожностью:
set $backend "http://service-1";
proxy_pass $backend;
Избегайте циклов перенаправлений и проверяйте синтаксис.
Правильная настройка proxy_pass и server_name — основа производительности и безопасности ваших сервисов. Тестируйте конфиги в staging-среде, используйте мониторинг и регулярно обновляйте Nginx для максимальной эффективности.