Прокси-сервер, или просто прокси – это серверное программное обеспечение, которое выступает как посредник между клиентом и сервером в Интернете. Без прокси-сервера клиент отправлял бы запрос непосредственно на сервер, а сервер затем обслуживал бы ресурс непосредственно обратно клиенту. Конечно, такой подход проще для понимания и реализации, однако присутствие прокси обеспечивает ряд преимуществ – повышение производительности, конфиденциальность, безопасность и многое другого. В качестве дополнительного уровня защиты прокси выступает как посредник в Интернете, контроллер между клиентами и серверами.
Вообще говоря, пакеты, которые объединяют в себе серверное ПО с установленным прокси, также часто называют прокси-серверами. Однако в этой статье основное внимание будет уделено прокси-серверам, традиционно определяемым как программное обеспечение в контексте веб-сервера. Мы разделим их на два основных типа: прямые прокси-серверы и обратные. Каждый тип имеет свои варианты использования, хотя их часто путают из-за схожего соглашения об именах.
Эта статья даст вам представление о том, что такое прокси-серверы, их подтипы и чем они полезны в общих настройках. Прочитав ее, вы сможете определить обстоятельства, при которых использовать прокси-сервер выгодно, а при которых – нет, и сделать правильный выбор между прямым и обратным прокси-сервером в любой конкретной ситуации.
Как работает прямой прокси?
Прямой прокси-сервер, который также называют открытым прокси-сервером, действует как представитель клиента, который пытается отправить запрос через Интернет на исходный сервер. В этом сценарии все попытки клиента отправить запрос будут направляться прокси-серверу. Прокси-сервер проверит запрос вместо клиента. Во-первых, он определит, авторизован ли этот клиент для отправки запросов через этот конкретный прямой прокси. Затем он отклонит запрос или перенаправит его на исходный сервер. Клиент не имеет прямого доступа к Интернету; он может работать только с тем, к чему ему открывает доступ прямой прокси-сервер.
Обычно прямые прокси-серверы используются для повышения конфиденциальности или обеспечения анонимности в Интернете. Прямой прокси-сервер получает доступ к Интернету вместо клиента, и в этом процессе он может использовать IP-адрес, который отличается от исходного IP-адреса клиента.
В зависимости от того, как он настроен, прямой прокси-сервер может предоставлять ряд функций, позволяющих вам:
- Избегать отслеживания рекламы.
- Обходить наблюдение.
- Устанавливать ограничения на основе вашей геолокации.
Прямые прокси также используются в системах централизованной безопасности и доступа, основанных на привилегиях, например, в корпоративных системах. Когда весь интернет-трафик проходит через общий прямой прокси, администратор может разрешить доступ к Интернету только определенным клиентам, отфильтрованным через общий брандмауэр. Вместо того, чтобы поддерживать брандмауэры для клиентского уровня (где может находиться множество компьютеров с различными средами и пользователями), вы можете разместить брандмауэр на уровне прямого прокси.
Имейте в виду, что прямые прокси-серверы настраиваются вручную, чтобы их можно было использовать, тогда как обратные прокси-серверы могут остаться незамеченными клиентом. Конфиденциальность и анонимность предоставляются в зависимости от того, передается ли IP-адрес клиента исходному серверу прямым прокси-сервером.
Вот несколько вариантов прямых прокси, которые вы можете использовать:
- Apache: популярный веб-сервер с открытым исходным кодом, предлагающий функции прямого прокси.
- Nginx: еще один популярный открытый веб-сервер с функциями прямого прокси.
- Squid: открытый прямой прокси-сервер, использующий протокол HTTP. Этот вариант не предлагает полноценного веб-сервера. Вы можете ознакомиться с руководством, которое расскажет, как настроить прокси-сервер Squid.
- Dante: прямой прокси-сервер, который вместо HTTP использует протокол SOCKS, благодаря чему он больше подходит для таких случаев, как работа с одноранговыми сетями. Читайте наш мануал Как настроить прокси-сервер Dante.
Как работает обратный прокси?
Обратный прокси выступает в роли представителя веб-сервера, принимая на себя все запросы, отправленные клиенту. Вы можете использовать один обратный прокси или несколько. Кроме того, обратным прокси может быть сервер приложений, к примеру, Gunicorn. В любом случае, запрос поступит от клиента через интернет. В обычной настройке такой запрос отправляется прямо на веб-сервер, который хранит ресурсы, запрашиваемые клиентом. Но если у вас есть обратный прокси, он выступит в подобной ситуации посредником, изолируя веб-сервер от прямого взаимодействия с открытым интернетом.
С точки зрения клиента, взаимодействие с обратным прокси-сервером ничем не отличается от взаимодействия с обычным веб-сервером. Функционально процесс остается таким же, и клиент не видит никакой разницы. Клиент просто запрашивает ресурс и получает его без необходимости в дополнительной настройке.
Обратные прокси предлагают следующие функции:
- Централизация безопасности уровня веб-сервера.
- Направление входящего трафика на основе правил, которые вы можете устанавливать.
- Расширенные возможности кеширования.
Централизация безопасности – это преимущество как прямого, так и обратного прокси, однако обратные прокси-серверы обеспечивают эту безопасность для уровня веб-сервера, а не клиента. Вместо того чтобы фокусироваться на поддержке брандмауэров на уровне веб-сервера, который может содержать множество серверов с разными настройками, вы можете сосредоточить внимание брандмауэра на защите уровня обратного прокси. Кроме того, избавившись от этой ответственности взаимодействия с брандмауэром и запросами, серверы могут заняться исключительно обслуживанием ресурсов.
Если за обратным прокси находится несколько серверов, он также будет направлять запросы на необходимые серверы. Несколько серверов могут обслуживать один и тот же ресурс или же разные комбинации разных ресурсов. Эти серверы могут использовать как протокол HTTP, как и обычный веб-сервер, так и протоколы серверов приложений типа FastCGI. Вы можете настроить обратный прокси-сервер для направления клиентов на определенные серверы в зависимости от запрашиваемого ресурса или для соблюдения определенных правил в отношении нагрузки на трафик.
Преимущества размещения обратного прокси-сервера перед веб-сервером также включают в себя функции кэширования. С помощью правил кэширования можно настроить большие статические ресурсы, что позволяет избежать обращения к веб-серверам при каждом запросе. Некоторые решения даже предлагают возможность обслуживать статические ресурсы напрямую, вообще не касаясь веб-сервера. Кроме того, обратный прокси-сервер может обрабатывать сжатие этих ресурсов.
Nginx, который мы уже упоминали выше, также является популярным решением для обеспечения функций обратного прокси. Apache также может выполнять функции обратного прокси, однако для Apache это дополнительные возможности, тогда как Nginx изначально был разработан как обратный прокси.
Прямой и обратный прокси: когда использовать?
Термины «прямой» и «обратный» по сути описывают направленность, отталкиваясь от вводящих в заблуждение терминов «входящего» и «исходящего» трафика, однако эти названия могут сбивать с толку, поскольку оба типа прокси-серверов обрабатывают как запросы, так и ответы. Потому лучший способ научиться различать прямые и обратные прокси-серверы — это изучить потребности приложения, которое вы создаете.
Обратный прокси полезен при настройке обслуживания веб-приложений в Интернете. При любом взаимодействии с интернетом они представляют ваши веб-серверы.
Прямые прокси-серверы полезно размещать перед клиентским трафиком для личного использования или в рабочей среде. При взаимодействиях с интернетом они представляют ваш клиентский трафик.
Не сосредотачивайтесь на сходстве названий, вместо этого лучше обратите внимание на разницу применения этих серверов.
Итоги
В этой статье мы поговорили о том, что такое прокси-сервер, а также рассмотрели два основных типа: прямой и обратный прокси. Кроме того, мы изучили практические варианты использования и исследовали их полезные функции, чтобы лучше разобраться, как их различать.