Уделите немного времени сегодня, чтобы записать знания об обратном прокси 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_pass
URL-адрес, настроенный командой,http://127.0.0.1:8081
, обратите внимание, что его нельзя использовать после URL/demo1
Суффикс заменяется, иначе будет сообщено об ошибке. Почему?Сначала nginx рассудитproxy_pass
Содержит ли URL-адрес, настроенный в инструкции, uri, если вproxy_pass
URL-адрес, настроенный в инструкции, не содержит uri, тогда nginx будет использовать uri пути запроса для переадресации.proxy_pass
Если URL-адрес, настроенный в директиве, содержит uri, nginx проигнорирует запрос.location
uri в , вместо этого используйте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