Помимо Apache, самым популярным веб-сервером является Nginx. Помимо того, что он является веб-сервером, он также может использоваться как балансировщик нагрузки или обратный прокси-сервер. В этом уроке мы покажем вам, как можно использовать Nginx в качестве обратного прокси.
Что такое обратный прокси?
Прокси-сервер действует как посредник между клиентом и другим сервером. Он извлекает ресурсы с сервера, к которому вы хотите подключиться, и отправляет их вам для просмотра. Обратный прокси работает так же, за исключением того, что его роль меняется на противоположную. Когда вы запрашиваете информацию с сервера, обратный прокси-сервер получит запрос и отправит его на соответствующий внутренний сервер. Это позволяет системному администратору использовать сервер для нескольких приложений, а также обеспечивать более плавный поток трафика между клиентом и сервером.
Преимущества обратного прокси
В зависимости от вашего приложения у вас могут быть разные варианты использования обратного прокси.
- Обратный прокси-сервер позволяет запускать несколько приложений на одном сервере. Если на одном сервере запущено несколько приложений, все они не могут одновременно прослушивать порт 80 или 433. С обратным прокси-сервером вы можете настроить обратный прокси-сервер для перенаправления трафика на отдельные приложения по мере необходимости.
- Балансировка нагрузки. Если у вас есть несколько серверов, на которых запущено одно и то же приложение, вы можете использовать обратный прокси-сервер для равномерного распределения трафика между каждым сервером.
- Брандмауэр веб-приложений. Вы можете использовать обратный прокси-сервер, чтобы скрыть свое приложение от публики, а также отфильтровать IP-адрес спама или защитить себя от DDOS-атаки.
- Простая регистрация и аудит. Поскольку весь входящий трафик управляется обратным прокси-сервером, проще регистрировать и контролировать поток трафика.
Настройка Nginx в качестве обратного прокси
Чтобы настроить Nginx в качестве обратного прокси, мы будем использовать параметр proxy_pass
в файлах конфигурации Nginx.
Примечание. В этом руководстве предполагается, что вы знакомы с Nginx и уже установили и настроили Nginx на своем сервере.
В большинстве случаев Nginx будет внешним сервером, который будет прослушивать порт 80 (HTTP) или 443 (HTTPS) для входящих запросов. Поскольку порт 80 или 443 может прослушивать только одна служба, ваше приложение должно будет прослушивать другой порт, например порт 8081. Простейшая конфигурация будет примерно такой:
server { listen 80; listen [::]:80; server_name myapp.com; location /{ proxy_pass http://localhost:8081/; }}
Это означает, что все входящие запросы к myapp.com через порт 80 будут перенаправлены на порт 8081.
Advanced Setup
Помимо директивы proxy_pass
, есть несколько других директив, которые вы можете использовать для более сложной настройки.
proxy_set_header - позволяет установить заголовок для отправки в фоновое приложение. Например, см. Следующую конфигурацию:
proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
Вы можете установить необходимый заголовок прокси-сервера для передачи приложению, чтобы оно знало IP-адрес и удаленный адрес запроса и выводило правильный контент для сайта запроса.
Тайм-аут прокси - позволяет установить значение тайм-аута для отправки и получения запросов прокси. Например:
proxy_connect_timeout 90;proxy_send_timeout 90;proxy_read_timeout 90;
proxy_buffers - это позволяет Nginx временно удерживать ответ проксируемого сервера и отправлять его на сервер запросов только после того, как проксируемый сервер закончит отвечать. Например:
proxy_buffers 32 4k;
Если ваше приложение собирается отправить большой кусок файла, вы можете отключить proxy_buffers:
proxy_buffering off;
Резюме
Как видите, Nginx - это способный обратный прокси-сервер. Самое лучшее в нем то, что его конфигурация проста, удобна в использовании и, тем не менее, позволяет выполнять масштабирование для более сложных сценариев. Для получения более подробной информации вы можете ознакомиться с документацией по модулю прокси Nginx или примерами конфигурации.
Изображение предоставлено: обратный прокси, обратный прокси