Что такое Nginx reverse proxy и как через него проксировать несколько сайтов
Reverse proxy — это режим работы веб-сервера, при котором он принимает запросы от клиентов и перенаправляет их на внутренние серверы (backend), скрывая их от внешнего мира.
Проще говоря, Nginx выступает в роли посредника между пользователем и вашим приложением или API.
Например, пользователь обращается к example.com, но на самом деле его запрос обрабатывается приложением, запущенным на localhost:3000.
Nginx принимает запрос, передаёт его на порт 3000 и возвращает ответ клиенту так, будто всё работает с одного домена.
Такой подход даёт несколько преимуществ:
- Безопасность. Реальные адреса внутренних сервисов не видны извне.
- Балансировка нагрузки. Можно распределять трафик между несколькими backend-серверами.
- Кеширование и сжатие. Nginx умеет кешировать ответы и экономить трафик.
- SSL-терминация. Сертификаты можно настроить только на уровне Nginx, не трогая внутренние приложения.
- Единая точка входа. Все сайты и API можно обслуживать через один сервер и порт 80/443.
Простой пример конфигурации reverse proxy
Допустим, у вас есть Node.js-приложение, работающее на localhost:3000, и вы хотите, чтобы оно было доступно по адресу example.com.
Файл конфигурации /etc/nginx/sites-available/example.conf может выглядеть так:
server {
listen 80;
server_name example.com;
location / {
proxy_pass http://127.0.0.1:3000;
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;
}
}Эта конфигурация делает следующее:
- принимает HTTP-запросы на домен
example.com; - перенаправляет их на внутренний порт
3000; - добавляет нужные заголовки (
Host,X-Real-IP), чтобы backend знал реальный IP клиента; - возвращает ответ пользователю.
После сохранения файла достаточно активировать конфиг и перезапустить Nginx:
sudo ln -s /etc/nginx/sites-available/example.conf /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl reload nginxПроксирование нескольких сайтов через один Nginx
Теперь представим, что на сервере нужно обслуживать несколько разных доменов:
api.example.com→ Node.js наlocalhost:4000blog.example.com→ статический сайт на/var/www/blogshop.example.com→ PHP-приложение (например, Laravel) наlocalhost:9000
Для этого достаточно добавить несколько server-блоков — по одному на каждый сайт:
# API
server {
listen 80;
server_name api.example.com;
location / {
proxy_pass http://127.0.0.1:4000;
include proxy_params;
}
}
# Блог
server {
listen 80;
server_name blog.example.com;
root /var/www/blog;
index index.html;
}
# Магазин (PHP-FPM)
server {
listen 80;
server_name shop.example.com;
root /var/www/shop/public;
index index.php index.html;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass 127.0.0.1:9000;
}
}Так Nginx принимает запросы на разные домены и перенаправляет их туда, куда нужно.
Это особенно удобно, если вы разворачиваете целый стек приложений на одном сервере или под одной инфраструктурой Docker.
Проксирование HTTPS-запросов
Чтобы сайт работал по HTTPS, достаточно добавить SSL-сертификат и слушать порт 443.
С помощью Let’s Encrypt это можно сделать буквально одной командой:
sudo certbot --nginx -d example.com -d api.example.comCertbot автоматически добавит SSL-настройки в конфиги и настроит автоматическое продление сертификатов.
Советы по оптимизации и безопасности
- Используйте
proxy_buffering offпри работе с WebSocket и стримингом. - Добавьте
gzip on;— это уменьшит размер передаваемых данных. - Ограничивайте доступ по IP, если у вас внутренние панели или админки.
- Следите за логами — они по умолчанию хранятся в
/var/log/nginx/access.logиerror.log. - Проверяйте конфигурацию перед перезапуском:
sudo nginx -tВывод
Режим reverse proxy в Nginx — это универсальный инструмент, который позволяет объединить несколько сайтов и сервисов под одним сервером.
Он разгружает backend, повышает безопасность и упрощает управление инфраструктурой.
Благодаря гибкости конфигурации и высокой производительности, Nginx остаётся стандартом де-факто для проксирования веб-приложений любого уровня — от простых сайтов до крупных микросервисных систем.
Настроить мониторинг за 30 секунд
Надежные оповещения о даунтаймах. Без ложных срабатываний