Яка різниця між проксі-сервером і зворотним проксі-сервером?


1773

Чим відрізняється проксі-сервер від зворотного проксі-сервера?


51
Це добре пояснено і в документах Apache .
Паоло

3
@ Паоло, що стало набагато простіше зрозуміти, ніж стаття у Вікіпедії. Можливо, мені варто було б перейти до редагування деякої цієї інформації в статті Вікіпедії, врешті-решт ...
RastaJedi

Скажімо, у мене є хост A, який потрібно підключити до хоста C, але не безпосередньо. Натомість він налаштований як запис із хостом або, можливо, dns, для виклику B, який пересилає запит на C. C не хвилює і не знає про B. Це проксі-провідник чи зворотний проксі?
Даніель Ліч

Якщо хост A не може дістатися до хоста C, не налаштувавшись на перший хост B, то хост B - це традиційний проксі-сервер вперед або "вихідний".
ТейлорМоначеллі

5
Надані проксі надають клієнту анонімність (тобто, думаю, Tor). Зворотні проксі надають серверним серверам анонімність (тобто, думають, сервери за DMZ).
8bitjunkie

Відповіді:


2969

Попередні відповіді були точними, але, можливо, занадто лаконічними. Спробую додати кілька прикладів.

Перш за все, слово "проксі" описує когось або щось, що діє від імені когось іншого.

У комп'ютерній царині ми говоримо про один сервер, який діє від імені іншого комп'ютера.

З метою доступності я обмежуся своїм обговоренням веб-проксі, однак ідея проксі не обмежується веб-сайтами.

ПЕРЕГЛЯД проксі

Більшість обговорень веб-проксі стосується типу проксі, відомого як "проксі-проксі".

У цьому випадку подія проксі-сервера полягає в тому, що "проксі-проксі" отримує дані з іншого веб-сайту від імені оригінального запитувача.

Казка про 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 .

    • b) Адміністратор Zблокується X.

      • Приклади:

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

        • 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.
    • a) Z має великий веб-сайт, який хочуть бачити мільйони людей, але один веб-сервер не може обробити весь трафік. Таким чином, Z налаштовує багато серверів і розміщує зворотний проксі в Інтернеті, який надсилатиме користувачів на найближчий до них сервер, коли вони намагаються відвідати Z. Це частина того, як працює концепція Network Distribution Network (CDN).
  • 2) Адміністратор Z переживає за помсту за вміст, розміщений на сервері, і не хоче піддавати головний сервер безпосередньо громадськості.
    • a) Схоже, у власників брендів "Спам", таких як "Канадська аптека", є тисячі серверів, хоча насправді більшість веб-сайтів розміщуються на набагато менших серверах. Крім того, зловживання скаргами на спам відключать лише загальнодоступні сервери, а не основний сервер.

У наведених вище сценаріях Zє можливість вибору Y.

Посилання на теми з поста:

Мережа доставки вмісту

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

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

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

Дивись також:


1
TAM (менеджер доступу Tivoli) - це також зворотний проксі-сервер, правда?
Кларк Бао

2
Концептуально тоді ми могли б посилатися на «зворотний проксі» або вважати його «вимушеним» проксі?
Томас-

3
"який надсилатиме користувачів на найближчий до них сервер" - Який сенс? Весь трафік буде проходити через цей проксі-сервер, правда? Тож не має значення, де знаходиться локальний сервер за ним. Або я щось пропускаю?
Павло

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

6
Це ключ для мене: - вперед: (X --> Y) --> Z, навпаки: X --> (Y --> Z).
Друклес

538

Пара простих визначень:

Проксі-сервер: функціонування від імені запитувача (або споживача послуги)

Зворотний проксі: Діє від імені виробника послуг / контенту.


413

Наведена нижче діаграма була дуже корисною. Він просто показує архітектуру налаштування прямого та протилежного проксі-сервера від клієнта до сервера через Інтернет. Це зображення допоможе вам краще зрозуміти відповідь qyb2zm302 та інші відповіді.

Форвард проксі проти зворотного проксі

Ви також можете дивитися відео з F5 «s DevCentral Пітер Сільва.

Джерело зображення: Quora . Однак, відповідно до Мартіна Пітерса , це зображення може бути зі спільноти Pulse Secure або з сайту Жульєна Паулі (французькою мовою) на веб-сайті developez.com.

Це нагадало мені класичне прислів’я:

Малюнок вартує 1000 слів.


9
Це дійсно все, на що потрібно звернути увагу. Налаштування проксі-сервера у вашому браузері, щоб Netflix не знав, у якій країні ви перебуваєте, це проксі-сервер; Служба вище, яка спрямовує вхідний запит (можливо, ви хочете надіслати один запит на два сервери) - це зворотний проксі.
Кайл Чадда

5
Проксі-сервер також може бути в Інтернеті
mac

7
Найкраща картина в останній відповіді. Дякую. :) Зворотний проксі також відомий як "Load Balancer" і діє на стороні сервера (розподіляє навантаження на різні сервери), тоді як прямий проксі підтримує сторону клієнта.
codepleb

1
Автор квори не є оригінальним автором зображення, оскільки ця сторінка з 2013 року за допомогою однієї редакції на рік старша.
Martijn Pieters

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

230

Forward Proxy vs. Reverse Proxy (2012) дуже чітко пояснює різницю між прямим та зворотним проксі.

Відповідь qyb2zm302 чудово деталізує програми проксі-серверів, але він просувається на фундаментальну концепцію між прямими і зворотними проксі-серверами. Для зворотного проксі X - Y → Z, X знає про Y, а не Z, а не навпаки.

Проксі - це посередник для спілкування (запити + відповіді). Клієнт <-> Проксі <-> Сервер

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

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

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

Проксі-сервер діє від імені сервера. Клієнт знає лише про проксі. Сервер знає весь ланцюжок.

Мені здається, що прямі та зворотні просто плутають, залежні від точки зору імена для клієнтських та серверних проксі. Я пропоную відмовитися від першого для останнього, для явного спілкування.

Звичайно, щоб ще більше ускладнити справу, не кожна машина є виключно клієнтом або сервером. Якщо в контексті є неоднозначність, краще чітко вказати, де знаходиться проксі, і комунікації, які він тунелює.


3
Ця відповідь відповідає httpd.apache.org/docs/2.0/mod/mod_proxy.html#forwardreverse і допомагає пояснити це чітко
Грег Вудс

7
видається, що найрелевантніша особливість у цьому порівнянні - це хто-знає-хто. forward proxy: клієнт знає як проксі (він фактично налаштований), так і цільовий сервер (оскільки він робить запит на URL-адресу сервера), тоді як, у випадку зворотного проксі, клієнт знає проксі як цільовий сервер (він не знає, як насправді викликає проксі; це може бути один сервер або більше). з прямим проксі сервер не знає, хто насправді є клієнтами, оскільки проксі "пересилає" запит на нього. вперед проксі: приховати клієнтів. зворотний проксі: приховати сервер (и).
Белун

@Protongun ".. Проксі-сервер - це просто посередник для спілкування (запити + відповіді) .." в чому потреба проксі-сервера в першу чергу? Будь ласка, поясніть. ІМХО ця відповідь мала бути прийнятою
vikramvi

Перше посилання в цій публікації дає зрозуміти і легко зрозуміти всім
Легенди

@Belun Добре пояснено дуже простими словами / термінами.
Іланжеран

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
Проксі-сервер завжди діятиме від імені когось (приховуючи свою особу від іншої сторони). "Зворотний" відноситься до зворотної сторони, яка "прихована", при цьому це клієнт у першому випадку (звичайний проксі) та сервер у другому випадку (зворотний проксі). Дійсно, терміни можуть використовуватися взаємозамінно, це лише питання конвенції, обравши перший випадок як звичайний проксі (можливо, з історичних причин). Сподіваюся, це має сенс.
Дімос

43

Найкраще пояснення - це схеми:

У той час як прямі проксі- проксі від імені клієнтів ( або запитують хостів ) , зворотні проксі- проксі від імені серверів.

Фактично, тоді як прямий проксі приховує ідентифікацію клієнтів, зворотний проксі приховує ідентичність серверів.


38

Проксі-сервер проксі-сервера (і, можливо, кешує) вихідних мережевих запитів на різні не обов'язково пов’язані публічні ресурси через Інтернет. Зворотний проксі фіксує (і необов'язково кешує) вхідні запити з Інтернету та розподіляє їх на різні внутрішні приватні ресурси, як правило, для високої доступності.



28

Проксі (Forward Proxy):

Коли комп'ютери у вашій локальній мережі підключаються до проксі-сервера, який має доступ до Інтернету. Переваги включають лише той сервер, який знаходиться в Інтернеті. Люди зовні не мають доступу до комп'ютерів безпосередньо. Проксі-сервери можуть покращити доступ до Інтернету для користувачів шляхом кешування завантажень. Вони також можуть бути використані для обмеження доступу до певних сайтів. Крім того, лише проксі-сервер потребує публічної адреси, а не клієнтів, що підключаються до нього.

Зворотний проксі:

Зворотний проксі - це протилежність прямому проксі. Натомість він діє як проксі від імені серверів, до яких підключено. Замість того, щоб безпосередньо звертатися до віддаленого сервера, користувач переходитиме через зворотний проксі-сервер і направляється звідти на відповідний сервер. Тільки зворотний проксі-сервер потребує сертифікату 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

Ось приклад зворотного проксі (як балансира навантаження).

Клієнт переходить на сайт.com і сервер, на який він звертається, на ньому працює зворотний проксі. Зворотний проксі трапляється як фунт . Фунт приймає запит і відправляє його на один із трьох серверів додатків, що сидять за ним. У цьому прикладі фунт є балансиром навантаження. Тобто це врівноваження навантаження між трьома серверами додатків.

Сервери додатків подають вміст веб-сайту назад клієнту.


8

Проксі-сервер обслуговує користувачів : він допомагає користувачам отримувати доступ до сервера .

Зворотний проксі обслуговує сервер : він захищає сервер від користувачів .


4

Якщо проксі немає

Для перегляду з боку клієнта та сервера однакові:

Клієнт -> Сервер

Проксі

З боку клієнта:

Клієнт -> проксі -> Сервер

З боку сервера:

Клієнт -> Сервер

Зворотний проксі

З боку клієнта:

Клієнт -> Сервер

З боку сервера:

Клієнт -> проксі -> Сервер

Тому я думаю, що якщо він встановлений користувачем клієнта is це називається проксі ;, якщо він встановлений менеджером сервера, це зворотний проксі.

Оскільки цілі та причини його налаштування різні, вони обробляють дані різними способами та використовують різні програми.

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

Було б краще, якщо його графічне зображення, але приємний зміст. @ Tinyhare
Narendra

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.