Поиск по сайту:

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


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

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

Обычный прокси-сервер, называемый Forward Proxy, представляет собой сервер, через который маршрутизируется соединение пользователя. Во многом это похоже на простую VPN, которая находится перед вашим интернет-соединением. Распространенным примером этого являются 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, это полезная информация.