Nginx Learning Series (1) ------------- Прямой и обратный прокси

задняя часть сервер Nginx DNS
Nginx Learning Series (1) ------------- Прямой и обратный прокси

Уделите немного времени сегодня, чтобы записать знания об обратном прокси nginx. Это было полезно раньше, но я думаю, что все еще просто записать его. Хорошая память не так хороша, как плохое письмо. Может быть, вы узнаете новые знания в будущем и забудете это снова.Если вы хотите переучить его слишком много, вам нужно Baidu, чтобы найти блог здесь, а затем найти блог, сколько стоит обучение!

1. Концепция прямого прокси и обратного прокси

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

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

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

Суммировать:

  • 1. Форвард прокси, наша рольпрокси
  • 2. Как форвард-агент, мы не предоставляем внешние услуги, а потребляем услуги извне, которые принадлежат потребителям.

Обратный прокси, очевидно, противоположен прямому прокси.Если прямой прокси-мужчина, то обратный прокси-женщина.Уважаемый, не беспокойтесь о других ситуациях здесь! Ниже я использую картинку, чтобы объяснить обратный прокси:

Прочитав картинку выше, представьте себе такой сценарий: допустим, вы технический директор компании и вашей компании необходимо предоставить набор веб-сервисов внешнему миру, что вы собираетесь делать?

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

Суммировать:

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

2. Анализ прямого прокси и обратного прокси nginx

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

server {  
    resolver 192.168.1.1; #指定DNS服务器IP地址  
    listen 8080;  
    location / {  
        proxy_pass http://$http_host$request_uri; #设定代理服务器的协议和地址  
    }  
}  

Объясните приведенную выше команду,resolverНастройте IP-адрес DNS-сервера, вы можете настроить несколько. Вы спросите, а зачем в форвард-прокси настраивать IP-адрес DNS-сервера? На самом деле ответ очень прост, представьте, что если ваш браузер сейчас настроен на прямой прокси-сервер, вы сейчас вводите в браузереhttp://oneSite.cn/index.html, По принципу форвардного прокси запрос url будет выполнять форвардный прокси-сервер.Проблема в том, что если ваш прокси-сервер не настроен с сервисом разрешения DNS, как nginx узнает о вас?oneSite.cnЧто это за чертовщина и какой IP-адрес соответствует интернету? Так вот что нужно настроитьresolverПричина команды.

listenДиректива настраивает номер порта, на котором nginx прослушивает запросы браузера.

proxy_passПосле того, как конфигурация команды получит запрос, отправленный прокси-браузером, какой запрос необходимо выполнить для получения помощи?$http_host$request_uriУказывает хост назначения и uri, которые являются переменными nginx и обычно не нуждаются в изменении.

Соответствующая конфигурация обратного прокси-сервера nginx выглядит следующим образом. Здесь Xiaobian создает две небольшие загрузочные демонстрации Spring для имитации веб-службы обратного прокси-сервера выше. Соответствующий исходный код можно найти по адресуgithubПолучать.

demoНомер порта запуска проекта8081,demo1Порт запуска проекта8082, для всех диапазонов префикса запроса/demoбудет отправленоdemoРаботает для обработки полосы префикса для всех запросов/demo1будет отправленоdemo1Инжиниринг обрабатывается.

Конфигурация nginx выглядит следующим образом:

server {
    listen       80;
    location /demo {
        proxy_pass http://127.0.0.1:8081;
    }
    location /demo1 {
        proxy_pass http://127.0.0.1:8082;
    }
}

запускатьdemoиdemo1После двух проектов введите в браузере следующий адрес:

Видно, что при внешнем унифицированном использовании порта 80 для доступа к сервису nginx выполняет проксирование по префиксу пути, а затем возвращает результат выполнения. Есть несколько замечаний по настройке пути обратного прокси-сервера nginx, и будьте очень осторожны при его использовании.

вышеproxy_passURL-адрес, настроенный командой,http://127.0.0.1:8081, обратите внимание, что его нельзя использовать после URL/demo1Суффикс заменяется, иначе будет сообщено об ошибке. Почему?Сначала nginx рассудитproxy_passСодержит ли URL-адрес, настроенный в инструкции, uri, если вproxy_passURL-адрес, настроенный в инструкции, не содержит uri, тогда nginx будет использовать uri пути запроса для переадресации.proxy_passЕсли URL-адрес, настроенный в директиве, содержит uri, nginx проигнорирует запрос.locationuri в , вместо этого используйтеproxy_passПереопределить и перенаправить uri, настроенный в/Это также своего рода ури, ха-ха, будь очень осторожен~

Например:

Предположим, адрес запроса:http://localhost/demo/getServerInfo.json,locationнастроен как/demo,proxy_passнастроен какhttp://xxxx:port, буду использоватьhttp://xxxx:port/demo/getServerInfo.jsonПересылка, результат правильный. еслиproxy_passнастроен какhttp://xxxx:port/demo1, буду использоватьhttp://xxxx:port/demo1вперед, потому что/demo1покрытый/demo