Reverse-proxy: что такое обратный прокси и как он работает?

nginx

Reverse-proxy или обратный прокси — полезный инструмент в наборе любого системного администратора. У него много применений, в том числе балансировка нагрузки, защита от DDOS-атак и т.д.

Что такое обратные прокси?

Обычный прокси-сервер, называемый Forward Proxy, представляет собой сервер, через который маршрутизируется соединение пользователя. Во многом это похоже на простой VPN, который находится перед вашим интернет-соединением.

Обратный прокси работает немного по-другому. Это внутренний инструмент, используемый системными администраторами. Вместо прямого подключения к веб-сайту, обслуживающему контент, обратный прокси-сервер, такой как NGINX, может располагаться посередине. Когда он получает запрос от пользователя, он пересылает или «проксирует» этот запрос на конечный сервер. Этот сервер называется «исходным сервером», поскольку именно он будет отвечать на запросы.

В то время как пользователь, вероятно, будет знать, маршрутизируются ли они через прямой прокси-сервер, такой как VPN или брандмауэр, обратные прокси-серверы являются внутренними инструментами. Насколько известно пользователю, они просто подключаются к веб-сайту. Все, что находится за обратным прокси-сервером, скрыто, и это также имеет множество преимуществ.

Однако этот эффект имеет место и в обратном порядке. Исходный сервер не имеет прямого подключения к пользователю и будет видеть только кучу запросов, поступающих с IP-адреса обратного прокси-сервера. Это может быть проблемой, но большинство прокси-сервисов, таких как NGINX, будут добавлять  X-Forwarded-For к запросу. Эти заголовки будут информировать исходный сервер о фактическом IP-адресе клиента.

Для чего используются обратные прокси?

Обратные прокси довольно просты по своей концепции, но оказались удивительно полезным инструментом со многими неожиданными вариантами использования.

Балансировки нагрузки

Одним из основных преимуществ обратного прокси-сервера является его легкость. Поскольку они просто пересылают запросы, им не нужно выполнять массу обработки, особенно в ситуациях, когда необходимо выполнить запрос к базе данных.

Узким местом часто является исходный сервер, но с обратным прокси-сервером перед ним вы можете легко иметь несколько исходных серверов. Например, прокси может отправлять 50% запросов на один сервер и 50% на другой, удваивая пропускную способность веб-сайта. Такие сервисы, как HAProxy, хорошо с этим справляются.

Это очень распространенный вариант использования, и большинство облачных провайдеров, таких как Amazon Web Services (AWS), предлагают сервис балансировки нагрузки, избавляя вас от необходимости настраивать ее самостоятельно. С помощью облачной автоматизации вы даже можете автоматически масштабировать количество исходных серверов в зависимости от трафика — функция, называемая автоматическое масштабирование.

Балансировщики нагрузки, такие как Elastic Load Balancer от AWS, могут быть настроены на автоматическую перенастройку, когда ваши исходные серверы выходят из строя, и все это стало возможным благодаря обратному прокси-серверу под капотом.

Кэширование

Поскольку обратный прокси-сервер часто отвечает намного быстрее, чем исходный сервер, для ускорения запросов на общих маршрутах обычно используется метод, называемый кэшированием. Кэширование — это когда данные страницы хранятся на обратном прокси-сервере и запрашиваются с исходного сервера только раз в несколько секунд/минут. Это значительно снижает нагрузку на исходный сервер.

Например, эта статья, которую вы сейчас читаете, была создана на ​​WordPress, которому необходимо обратиться к базе данных SQL, чтобы получить содержимое статьи и метаданные. Делать это для каждого обновления страницы расточительно, учитывая, что страница не меняется. Таким образом, эта страница может быть кэширована, и обратный прокси-сервер просто отправит последний ответ следующему пользователю, вместо того, чтобы снова беспокоить WordPress.

Выделенная сеть обратных прокси-серверов, которые кэшируют ваш контент, называется сетью доставки контента или CDN. CDN, такие как CloudFlare или Fastly, очень часто используются крупными веб-сайтами для ускорения глобальной доставки. Серверы по всему миру, которые кэшируют контент, называются пограничными узлами, и их большое количество может сделать ваш сайт очень быстрым.

Защита сети и конфиденциальность

Поскольку пользователь не знает, что стоит за обратным прокси-сервером, он не сможет атаковать исходные серверы напрямую. Фактически, обратные прокси-серверы обычно используются с исходными серверами в частных подсетях, что означает, что они вообще не имеют входящих подключений к внешнему Интернету.

Это сохраняет вашу сетевую конфигурацию конфиденциальной, и, хотя безопасность через прятанье никогда не бывает надежной, это лучше, чем оставлять ее открытой для атаки.

Это неотъемлемое доверие также может быть полезно при планировании вашей сети. Например, сервер API, взаимодействующий с базой данных, похож на обратный прокси-сервер. База данных знает, что может доверять серверу API в частной подсети, а сервер API действует как брандмауэр для базы данных, разрешая только правильные соединения через него.

Настраиваемый интерфейс

Одно из преимуществ обратных прокси-серверов, таких как NGINX, заключается в том, что они легко настраиваются. Часто их полезно иметь перед другими службами для настройки доступа пользователей только к этим службам.

Например, NGINX может ограничивать запросы к определенным маршрутам, что может помешать злоумышленникам делать тысячи запросов к исходным серверам с одного IP-адреса. Это конечно хорошо, хотя не останавливает DDOS-атаки.

NGINX также может перенаправлять трафик с нескольких доменных имен с помощью настраиваемых «серверных» блоков. Например, он может отправлять запросы на example.com ваш исходный сервер, но отправлять api.example.com на ваш специальный сервер API или files.example.com в ваше файловое хранилище и так далее. Каждый сервер может иметь свою конфигурацию и правила.

NGINX также может добавлять дополнительные функции поверх существующих исходных серверов, такие как централизованные сертификаты HTTPS и конфигурация заголовков.

Иногда полезно просто иметь NGINX на том же компьютере, что и другая локальная служба, просто для обслуживания содержимого этой службы. Например, веб-API ASP.NET используют внутренний веб-сервер под названием Kestrel, который хорошо отвечает на запросы, но не более того. Очень часто Kestrel запускают на частном порту и используют NGINX в качестве настраиваемого обратного прокси-сервера.

Централизованное ведение журнала

Это довольно просто, но большая часть вашего трафика проходит через один сервис, что упрощает проверку журналов. Журнал доступа NGINX содержит много полезной информации о вашем трафике, и, хотя он не превосходит по возможностям такие службы, как Google Analytics, но это полезная информация.

Читайте также:

Добавить комментарий

Ваш адрес email не будет опубликован.