В чем разница между прокси-сервером и обратным прокси-сервером?


1773

В чем разница между прокси-сервером и обратным прокси-сервером?


51
Это хорошо объясняется и в документах Apache .
Паоло

3
@Paolo , что сделал это гораздо легче понять , чем статьи Википедии. Возможно, мне следует в конце концов отредактировать часть этой информации в статье в Википедии ...
RastaJedi

Допустим, у меня есть хост A, который должен подключиться к хосту C, но не подключается напрямую. Вместо этого он настроен как a с записью хоста или, возможно, dns, для вызова B, который направляет запрос в C. C не заботится или не знает о B. Это прямой или обратный прокси?
Даниэль Лич,

Если узел A не может получить доступ к узлу C, не настроив его для первого контакта с узлом B, тогда узел B является традиционным прямым или «исходящим» прокси-сервером.
TaylorMonacelli

5
Прямые прокси предоставляют клиенту анонимность (например, Tor). Обратные прокси-серверы обеспечивают анонимность внутренних серверов (т. Е. Интеллектуальные серверы за DMZ).
8bitjunkie

Ответы:


2972

Предыдущие ответы были точными, но, возможно, слишком краткими. Я постараюсь добавить несколько примеров.

Прежде всего, слово «прокси» описывает кого-то или что-то, действующее от имени кого-то другого.

В компьютерной сфере мы говорим об одном сервере, действующем от имени другого компьютера.

В целях доступности я ограничу свое обсуждение веб-прокси - однако идея прокси не ограничивается веб-сайтами.

FORWARD прокси

Большинство обсуждений веб-прокси относится к типу прокси, известному как «прямой прокси».

В данном случае прокси-событие заключается в том, что «прямой прокси» извлекает данные с другого веб-сайта от имени исходного запрашивающего.

Сказка о 3 компьютерах (часть I)

Для примера приведу три компьютера, подключенных к Интернету.

  • X = ваш компьютер или "клиентский" компьютер в интернете
  • Y = прокси-сайт, proxy.example.org
  • Z = веб-сайт, который вы хотите посетить, www.example.net

Обычно можно подключиться напрямую от X --> Z.

Тем не менее, в некоторых случаях, это лучше Y --> Zот имени X, которое цепи следующим образом : X --> Y --> Z.

Причины, по которым X захочет использовать прямой прокси-сервер:

Вот (очень) частичный список использования прямого прокси-сервера:

  • 1) X не может получить доступ к Z напрямую, потому что

    • a) Кто-то, имеющий административные полномочия в отношении Xинтернет-соединения, решил заблокировать любой доступ к сайту Z.

      • Примеры:

        • Вирус Storm Worm распространяется, обманывая людей familypostcards2008.com, поэтому системный администратор заблокировал доступ к сайту, чтобы предотвратить случайное заражение пользователей.

        • Сотрудники крупной компании тратят слишком много времени facebook.com, поэтому руководство хочет, чтобы доступ был заблокирован в рабочее время.

        • Местная начальная школа запрещает доступ в Интернет на playboy.comвеб-сайте.

        • Правительство не может контролировать публикацию новостей, поэтому оно контролирует доступ к новостям, блокируя такие сайты, как wikipedia.org. Смотрите TOR или FreeNet .

    • б) Администратор Zзаблокировал X.

      • Примеры:

        • Администратор Z заметил попытки взлома, исходящие от X, поэтому администратор решил заблокировать IP-адрес X (и / или сетевой диапазон).

        • Z это сайт форума. Xспамит на форуме. Z блоков X.

ОБРАТНЫЙ прокси

Сказка о 3 компьютерах (часть II)

Для этого примера я перечислю три компьютера, подключенных к Интернету.

  • X = ваш компьютер или "клиентский" компьютер в интернете
  • Y = обратный прокси-сайт, proxy.example.com
  • Z = веб-сайт, который вы хотите посетить, www.example.net

Обычно можно подключиться напрямую от X --> Z.

Однако в некоторых случаях администратору лучше Zограничить или запретить прямой доступ и заставить посетителей сначала пройти Y. Так что , как и раньше, у нас есть данные для его извлечения Y --> Zот имени X, которые цепей следующим образом : X --> Y --> Z.

На этот раз в отличие от «прямого прокси-сервера» отличается тем, что на этот раз пользователь Xне знает, к какому доступу он обращается Z, потому что Xон видит только то, с кем он общается Y. Сервер Zневидим для клиентов, и только обратный прокси-сервер Yвиден снаружи. Обратный прокси не требует (прокси) конфигурации на стороне клиента.

Клиент Xдумает, что он только общается с Y( X --> Y), но реальность такова, что Yпереадресация всего общения ( X --> Y --> Zснова).

Причины, по которым Z захочет установить обратный прокси-сервер:

  • 1) Z хочет заставить весь трафик на свой веб-сайт сначала проходить через Y.
    • а) Z имеет большой веб-сайт, который хотят видеть миллионы людей, но один веб-сервер не может обрабатывать весь трафик. Таким образом, Z устанавливает множество серверов и размещает в Интернете обратный прокси-сервер, который отправляет пользователей на ближайший к ним сервер, когда они пытаются посетить Z. Это часть работы концепции сети распространения контента (CDN).
  • 2) Администратор Z обеспокоен местью за контент, размещенный на сервере, и не хочет показывать главный сервер напрямую.
    • а) Владельцы таких спам-брендов, как «Канадская аптека», имеют тысячи серверов, хотя на самом деле большинство веб-сайтов размещаются на гораздо меньшем количестве серверов. Кроме того, жалобы на злоупотребление спамом отключат только общедоступные серверы, а не главный сервер.

В приведенных выше сценариях Zесть возможность выбора Y.

Ссылки на темы из поста:

Сеть доставки контента

Программное обеспечение прямого прокси (на стороне сервера)

Программное обеспечение обратного прокси для HTTP (на стороне сервера)

Программное обеспечение обратного прокси для TCP (на стороне сервера)

Смотрите также:


1
TAM (tivoli access manager) также является обратным прокси-сервером, верно?
Кларк Бао

2
Концептуально, тогда мы могли бы ссылаться на «обратный прокси» или думать о нем как о «принудительном» прокси?
Томас

3
«что отправит пользователей на ближайший к ним сервер» - в чем смысл? Весь трафик будет проходить через этот прокси-сервер, верно? Поэтому не имеет значения, где находится «локальный» сервер за ним. Или я что-то упустил?
Павел

2
@Pavel, вероятно, "ближайший к ним сервер" - не лучшее описание. Больше похоже на «распределить нагрузку на пул серверов», это лучшее описание. В этом примере описывался балансировщик нагрузки обратного прокси-сервера.
JDS

6
Это ключ для меня: - вперед: (X --> Y) --> Z, наоборот: X --> (Y --> Z).
Druckles

538

Пара простых определений будет:

Forward Proxy: действует от имени запрашивающей стороны (или потребителя услуг)

Обратный прокси-сервер: действует от имени поставщика услуг / контента.


414

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

Прямой прокси против обратного прокси

Вы также можете посмотреть это видео с F5 's DevCentral Питера Сильвы.

Источник изображения: Quora . Тем не менее, согласно Martijn Pieters , это изображение может быть от Pulse Secure Community или с сайта Julien Pauli (на французском языке) по адресу developpez.com.

Это напомнило мне классическую пословицу:

Картинка стоит 1000 слов.


9
Это действительно все, что вам нужно посмотреть. Настройка прокси в вашем браузере, чтобы Netflix не знал, в какой стране вы находитесь, это прямой прокси; восходящий сервис, который направляет входящий запрос (возможно, вы хотите отправить один запрос на два сервера), является обратным прокси-сервером.
Кайл Чадха

5
Прямой прокси также может быть в Интернете
Mac

7
Лучшая картинка в последнем ответе. Спасибо. :) Обратный прокси-сервер также известен как «Балансировщик нагрузки» и действует на стороне сервера (распределяет нагрузку на разные серверы), тогда как прямой прокси-сервер поддерживает сторону клиента.
codepleb

1
Автор кворы не является первоначальным автором изображения, так как эта страница 2013 года с одной ревизией на год старше.
Мартин Питерс

1
Вполне возможно, что этот французский учебник с 2009 года является источником; В копии веб-архива 2009 года возникли проблемы с JavaScript (продолжение перенаправления), а изображения были заархивированы только в 2017 году, но источник ссылается на те же URL-адреса изображений, что и более поздние источники.
Мартин Питерс

230

Прямой прокси против Обратного прокси (2012) очень четко объясняет разницу между прямым и обратным прокси.

Ответ qyb2zm302 подробно описывает применение прокси, но он раскрывает фундаментальную концепцию прямого и обратного прокси. Для обратного прокси, X → Y → Z, X знает о Y, а не о Z, а не наоборот.

Прокси - это просто посредник для общения (запросы + ответы). Клиент <-> Прокси <-> Сервер

  • Клиентский прокси: ( клиент <-> прокси ) <-> сервер

Прокси действует от имени клиента. Клиент знает обо всех трех машинах, участвующих в цепочке. Сервер не

  • Прокси-сервер: клиент <-> ( прокси <-> сервер )

Прокси действует от имени сервера. Клиент знает только о прокси. Сервер знает всю цепочку.

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

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


3
Этот ответ соответствует httpd.apache.org/docs/2.0/mod/mod_proxy.html#forwardreverse и помогает объяснить его ясно
Грег Вудс,

7
кажется, что наиболее важной особенностью в этом сравнении является кто-знает-кто. прямой прокси: клиент знает как прокси-сервер (он настроен на самом деле), так и целевой сервер (так как он делает запрос к URL-адресу сервера), в то время как в случае обратного прокси клиент знает прокси как целевой сервер (он не знает, что на самом деле вызывает прокси, это может быть один или несколько серверов). при использовании прямого прокси-сервера сервер не знает, кто на самом деле является клиентами, поскольку прокси-сервер «перенаправляет» к нему запрос. прямой прокси: скрыть клиент (ы). обратный прокси: скрыть сервер (ы).
Белун

@Protongun "... Прокси-сервер - это просто посредник для общения (запросы + ответы) .." Зачем вообще нужен прокси-сервер? Просьба уточнить. ИМХО этот ответ должен был быть принят
vikramvi

Первая ссылка в этом сообщении делает его понятным и понятным для всех
Legends

@Belun Хорошо объяснил в самых простых словах / терминах.
Ilangeeran

129

Некоторые диаграммы могут помочь:

Вперед прокси

Вперед прокси

Обратный прокси

Обратный прокси


8
Это? Они выглядят одинаково! Что такого особенного в переписывании ответа, который делает прокси «обратным» прокси?
8bitjunkie

2
@ 8bitjunkie Это о перспективе. Обратите внимание, что для прямого прокси клиент знает, что он взаимодействует с прокси-сервером. Для обратного прокси клиент думает, что он общается напрямую с home.com. Прокси также имеют разные реализации. Обратный прокси может быть довольно глупым. Все, что нужно сделать, это изменить адрес и передать вызов. Больше сетевой логики на клиенте, меньше на прокси. Прямой прокси-сервер, с другой стороны, должен каким-то образом знать, что для запроса proxy.com () требуется вызов service.com. Меньше сетевой логики на клиенте, больше на прокси.
Кевин

1
Что означает « перевести myhome.myhosting.com на hom.com», я не получаю часть перевода. Как переписать часть заголовка ответа или как?
1252748

Также одной из причин обратного прокси-сервера (основываясь на том, что я понял из принятого ответа) является то, что целью этого является разделение интенсивного входящего трафика между несколькими серверами. Где в этой цепочке это происходит? Это еще одно «входящее правило»?
1252748

@ 1252748 около 1), перевод будет просто означать сопоставление URL-адресов и отправку запроса на соответствующий URL-адрес. о 2), да, вы можете настроить сервер, например, использовать циклический перебор для балансировки нагрузки между серверами.
Мария Инес Парнисари

72

Разница в первую очередь в развертывании. Прямой и обратный веб-прокси имеют одинаковые базовые функции. Они принимают запросы на HTTP-запросы в различных форматах и ​​предоставляют ответ, обычно путем доступа к исходному или контактному серверу.

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

Прямой прокси-сервер - это прокси-сервер, доступ к которому осуществляется путем настройки клиентского компьютера. Клиенту нужна поддержка протокола для функций прокси (перенаправление, проверка подлинности прокси и т. Д.). Прокси-сервер прозрачен для пользователя, но не для приложения.

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

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


Просто чтобы быть уверенным, прямой прокси на стороне клиента, а обратный прокси на стороне сервера?
Ив

4
@yves. Прокси-сервер также является сервером. Просто клиенту нужна локальная конфигурация, чтобы он мог общаться. Хотя обратный прокси-сервер требует настройки на самом сервере. Их физические узлы находятся на «серверной стороне».
Адиб Аруи

Просто для общей информации, не все прокси могут работать в прямом и обратном направлении, например, SOCKS, но не HTTP прокси.
RastaJedi

60

Прокси: он делает запрос от имени клиента . Таким образом, сервер вернет ответ прокси, а прокси перешлет ответ клиенту. Фактически, сервер никогда не «узнает», кем был клиент (IP-адрес клиента); он будет знать только прокси. Тем не менее, клиент определенно знает сервер, поскольку он по существу форматирует HTTP-запрос, предназначенный для сервера, но он просто передает его прокси.

Введите описание изображения здесь

Обратный прокси-сервер: получает запрос от имени сервера . Он перенаправляет запрос на сервер, получает ответ и затем возвращает ответ клиенту. В этом случае клиент никогда не «узнает», кто был фактическим сервером (IP-адрес сервера) (за некоторыми исключениями); он будет знать только прокси. Сервер будет знать или не знать фактического клиента, в зависимости от конфигурации обратного прокси.

Введите описание изображения здесь


6
Я чувствую, что могу скопировать и вставить ваши определения в обратном направлении, и они все равно будут верны. Я не думаю, что это объясняет какие-либо ключевые различия или проясняет, что же такое «обратный» в отношении обратного прокси-сервера?
8bitjunkie

6
Прокси всегда действует от имени кого-либо (скрывая свою личность от другой стороны). «Обратный» относится к обратной стороне, которая является «скрытой», при этом это клиент в первом случае (обычный прокси) и сервер во втором случае (обратный прокси). Действительно, термины могут использоваться взаимозаменяемо, это просто вопрос соглашения, когда первый случай выбран в качестве обычного прокси (возможно, по историческим причинам). Надеюсь, это имеет смысл.
Димос

44

Лучшее объяснение здесь с диаграммами:

В то время как прямой прокси-сервер от имени клиентов ( или запрашивающих хостов ) , обратный прокси-сервер от имени серверов.

В действительности, в то время как прямой прокси-сервер скрывает идентификационные данные клиентов, обратный прокси-сервер скрывает идентификационные данные серверов.


38

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



28

Прокси (прямой прокси):

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

Обратный прокси:

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

Введите описание изображения здесь

Источник изображения: создание прямого прокси с использованием маршрутизации запросов приложений


3
ИМХО, самый простой / лучший ответ.
Виниций Гонсалвес

12

Я понимаю с точки зрения Apache, что прокси означает, что если сайт x прокси для сайта y, то запросы для x возвращают y.

Обратный прокси-сервер означает, что ответ от y настроен так, что все ссылки на y становятся x.

Так что пользователь не может сказать, что прокси участвует ...


10

Согласно моему пониманию ...

Начнем с того, что, как всем известно, прокси-сервер означает «полномочия представлять кого-то другого». Теперь есть две вещи, прямой и обратный прокси.

Вперед прокси

Предположим, вы хотите получить доступ к «Google», и «Google», в свою очередь, будет иметь n серверов для ответа на этот конкретный запрос.

Теперь в этом случае, когда вы запрашиваете что-то у Google и не хотите, чтобы Google видел ваш IP-адрес, вы будете использовать прямой прокси-сервер, как описано ниже.

A → B → C

Теперь вы A, отправляющий запрос через B. Таким образом, C будет думать, что запрос поступает от B, а не A. Таким образом, вы можете предотвратить доступ IP-адреса ваших клиентов к внешнему миру.

Обратный прокси

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

A → B → C

C → D

C ← D

A ← B ← C

Из приведенной выше диаграммы видно, что запрос был отправлен на C из B, а не из A. Затем из C будет один запрос, отправленный в D. Аналогичным образом ответ будет отправлен в C из D, а затем в B и A.

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


10

Прямые прокси предоставляют клиенту анонимность (например, Tor ).

Обратные прокси- серверы обеспечивают анонимность внутренних серверов (т. Е. Интеллектуальные серверы за DMZ).



9

Вот пример обратного прокси (в качестве балансировщика нагрузки).

Клиент заходит на сайт website.com, и на сервере, на котором он работает, работает обратный прокси-сервер. Обратным прокси-сервером является Pound . Pound принимает запрос и отправляет его на один из трех серверов приложений, расположенных за ним. В этом примере Pound является балансировщиком нагрузки. То есть он балансирует нагрузку между тремя серверами приложений.

Серверы приложений передают содержимое сайта обратно клиенту.


8

Прямой прокси-сервер обслуживает пользователей : он помогает пользователям получить доступ к серверу .

Обратный прокси-сервер обслуживает сервер : он защищает сервер от пользователей .


4

Если нет прокси

Чтобы увидеть со стороны клиента и сервера одинаково:

Клиент -> Сервер

полномочие

Со стороны клиента:

Клиент -> Прокси -> Сервер

Со стороны сервера:

Клиент -> Сервер

Обратный прокси

Со стороны клиента:

Клиент -> Сервер

Со стороны сервера:

Клиент -> Прокси -> Сервер

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

Поскольку цели и причины его настройки различны, они по-разному обрабатывают данные и используют разное программное обеспечение.

   User side          |      Server side
client  <->  proxy  <-->  reverse_proxy <-> real server

Было бы лучше, если бы его графическое представление, но хороший контент. @ Tinyhare
Нарендра

3

Взгляд с точки зрения пользователя: при отправке запроса на прокси или обратный прокси- сервер:

  • прокси - требует два аргумента :

    1) что получить и 2) какой прокси-сервер использовать промежуточный

  • обратный прокси - требуется один аргумент :

    1) что получить

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


1

Большинство предыдущих ответов являются хорошими, но, по моему мнению, ни один из них не подходит так хорошо, чтобы достаточно хорошо рассмотреть «обратное» качество, которое отличает их. Чтобы сделать это, нужно дать какой-то способ визуализации «обратной» природы того, что по сути является одним и тем же (прокси), и это должно быть дано достаточно абстрактно.

Прокси (неявно «вперед прокси») соединяет несколько локальных клиентов к любому удаленному серверу:

c--
   |--p--s
c--

Обратный прокси - сервер для соединения нескольких локальных серверов в любое один удаленный клиенте (обратите внимание , как макет реверс):

s--
   |--p--c
s--

Это действительно перспективный вопрос, и правильное понимание концепции требует абстрагирования несущественных (для конкретной концепции) деталей, хотя они могут быть очень важны, когда речь идет о прагматике операций с доверенными лицами. К таким деталям относится тот факт, что в обоих сценариях реальность такова, что несколько клиентов подключаются к нескольким серверам, что клиенты и серверы могут не быть локальными или удаленными, где находится интернет-облако или какая видимость существует между клиентом и сервером.


«Несколько локальных серверов для одного удаленного клиента» - хм, а почему не несколько серверов для нескольких клиентов? Я имею в виду - сам сервер не подключается к клиентам в любом случае, он только отвечает на любые клиентские запросы, независимо от того, являются ли они несколькими клиентами или одним и тем же клиентом.
JustAMartin

Прочитайте еще раз - особенно последний абзац и попытайтесь понять «любой удаленный клиент» как один из многих примеров работы
Fotios Basagiannis

Текст в порядке, просто вторая диаграмма заставила меня внезапно подумать: "Привет, куда пошел другой клиент?" когда я сравнил это с первой диаграммой.
JustAMartin

Да, это потому, что этот клиент не один из двух других. Разработчики склонны мыслить очень конкретными и конкретными терминами, потому что это то, что помогает, когда вы реализуете вещи, однако тот же способ мышления не очень полезен, когда вы думаете об абстракциях.
Фотиос Басагианнис
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.