淺析Nginx 正向代理與反向代理

1、正向代理和反向代理的概念

無論是正向代理,還是反向代理,說到底,就是代理模式的衍生版本罷了。我們都學習過代理設計模式,都知道代理模式中有代理角色和被代理角色,為什么這么說,因為這兩個角色對于我們理解正向和反向代理非常重要,下面會講到。

下面我將引入這樣一個場景,很多時候我們上網的網速特別慢,或者說由于×××問題導致我們無法訪問到國外的網站,通常這些情況我們會通過給瀏覽器配置一個網速快的、可以×××的代理ip及端口號來解決我們的問題,那么配置好之后,大概的請求流程如下圖所示:
淺析Nginx 正向代理與反向代理

我們首先請求代理服務器,然后代理服務器幫我們去快速訪問國外的網站,對于這種代理方式,我們就稱之為正向代理。請記住,上面說到代理模式的兩個角色中,我們當前的角色為 被代理者,也就是瀏覽器這個角色。更重要的是,正向代理的本質是我們去請求外部的資源,如果以生產者、消費者模式來區分,我們屬于消費者。

總結:

1、正向代理,我們的角色是 被代理者

2、正向代理,我們不對外提供服務,反而是對外消費服務,屬于消費者

反向代理,很顯然,就是和正向代理相反,如果說正向代理是男,那么反向代理就是女了,親,此處不再糾結其他情況!下面我用一副圖片解釋下反向代理:

淺析Nginx 正向代理與反向代理

看完上面的圖片,請你想象一下這么一個場景,假設你現在是某公司技術總監,你們公司需要對外提供一套web服務,那么你打算怎么做呢?

答案是可以通過反向代理來完成。通常你們公司擁有自己的IDC機房,機房通訊通常采用局域網交換機,internet網用戶請求是無法直接訪問到局域網內的web服務的,因此這個時候,你需要一臺反向代理服務器來接收internet web請求,然后將請求分發到局域網中的不同主機上進行處理,處理完成之后再做出響應。因此,反向代理大概就是這么一個場景。請記住,反向代理中,我們的角色是 局域網 web服務。

總結:

1、反向代理,我們的角色是 局域網 web服務

2、反向代理,我們對外提供服務,屬于服務提供者

2、nginx正向代理和反向代理實例解析
nginx在正向代理方面的應用非常地少,因此,對于正向代理的相關配置指令也不多,下面是一個nginx作為正向代理服務器的配置實例,配置僅供參考。

server {
resolver 192.168.1.1; #指定DNS服務器IP地址
listen 8080;
location / {
proxy_pass http://$http_host$request_uri; #設定代理服務器的協議和地址
}
}
解釋下上面的指令,resolver配置DNS服務器的ip地址,可以配置多個。你可能會問,正向代理中為什么需要配置DNS服務器的ip地址呢?其實答案很簡單,你想象下假如現在你的瀏覽器配置了正向代理服務器,你現在在瀏覽器中輸入網頁鏈接,根據正向代理原理,該url請求將會被正向代理服務器執行,問題來了,如果你的代理服務器不配置DNS解析服務,nginx怎么知道你這個oneSite.cn到底是個什么鬼,到底對應因特網的ip地址是什么?所以這就是需要配置resolver指令的原因所在。

listen指令配置nginx監聽瀏覽器請求的端口號。

proxy_pass指令配置接收到被代理瀏覽器發來的請求之后,需要幫忙執行的請求是什么,$http_host$request_uri指明目的主機和uri,屬于nginx變量,一般不需要修改。

nginx反向代理的相關配置如下,在這里小編搭建兩個Spring boot小demo模擬上面反向代理的web服務,相關源代碼可以在github獲取。
淺析Nginx 正向代理與反向代理

demo工程啟動端口號為8081,demo1工程啟動端口為8082,對于所有的請求前綴帶/demo的都將轉發到demo工程進行處理,對于所有的請求前綴帶/demo1的都將轉發到demo1工程進行處理。

nginx配置如下:

server {
listen 80;
location /demo {
proxy_pass 網頁鏈接
}
location /demo1 {
proxy_pass 網頁鏈接
}
}
啟動demo和demo1兩個工程之后,瀏覽器輸入下面地址:

淺析Nginx 正向代理與反向代理

淺析Nginx 正向代理與反向代理

可以看到,外部統一使用80端口訪問服務時,nginx根據路徑前綴進行代理,然后返回執行結果。對于nginx反向代理路徑配置有幾點需要注意,使用時要非常謹慎。

上面proxy_pass指令配置的url為網頁鏈接,注意在該url后面不能使用/demo1后綴進行代替,否則就報錯了。為什么呢?首先nginx會判斷proxy_pass指令中配置的url地址是否包含uri,如果在proxy_pass指令中配置的url地址不包含uri,那么nginx將會使用請求路徑的uri進行轉發,如果在proxy_pass指令中配置的url地址包含uri,則nginx會忽略請求location中的uri,轉而使用你在proxy_pass中配置的uri進行覆蓋,轉發,另外,/也是一種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

歡迎工作一到五年的Java工程師朋友們加入Java高級交流群:854630135

群內提供免費的Java架構學習資料(里面有高可用、高并發、高性能及分布式、Jvm性能調優、Spring源碼,MyBatis,Netty,Redis,Kafka,Mysql,Zookeeper,Tomcat,Docker,Dubbo,Nginx等多個知識點的架構資料)合理利用自己每一分每一秒的時間來學習提升自己,不要再用"沒有時間“來掩飾自己思想上的懶惰!趁年輕,使勁拼,給未來的自己一個交代!

哦對了,喜歡就別忘了關注一下哦~

轉載于:https://blog.51cto.com/13954634/2294223

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/537748.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/537748.shtml
英文地址,請注明出處:http://en.pswp.cn/news/537748.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

pycharm 安裝 jupyter

jupyter可以像筆記一樣,在學習和整理思路時很好。 使用的python是3.7.5版本 windows安裝步驟: cmd 再修改下pip的源,選擇國內,這樣快。 國內pip源: 阿里云 https://mirrors.aliyun.com/pypi/simple/ 廣東 豆瓣https://pypi…

android5.1 sdk version,java - Android SDK version 23.6 - Stack Overflow

Does it support java 8 yet?Eclipse is displaying this as a problem, surely it does support 8 by now? In the release notes for revision 23.6 it says java 7 or higher, does this mean java 8 is included or? Wish theyd be more specific about such details. A…

或成為性能寵兒,榮耀8x Max 驍龍660版首銷在即

今天已經是十一假期的最后一天了,假期馬上就要結束了,雖然這有點讓人遺憾,但是接下來的好消息讓很多人的心情好了不少,那就是10月8日榮耀8x Max驍龍660版本就要在全平臺開售了,這恐怕是節后最開心的事情了。此前&#…

績效考核編寫說明

第一步: 請大家從群文件下載自己的考核表,該表格是季度初填寫的,與實際進度安排有偏差,需要調整(見第三步) 第二步: 請大家從群文件下載部門考核表,如第四季度該文件名“【預評分】…

android 雙線程等待,在Java/Android中啟動另一個線程之前如何等待線程完成?

在回答您的問題之前&#xff0c;我強烈建議您查看ExecutorServices&#xff0c;例如ThreadPoolExecutor。現在回答你的問題&#xff1a;如果要等待上一個線程完成&#xff0c;在開始下一步之前&#xff0c;您可以在之間添加thread.join()&#xff1a;for(int i 0; i < 10; …

讀書筆記-說服力 讓你的PPT會說話

說服力&#xff1a;讓你的PPT會說話張志 包翔 劉俊前言優秀的幻燈片是內容和形式的完美統一&#xff0c;掌握配色排版特效的技術也很重要&#xff0c;不過對大部分人&#xff0c;這些基礎操作都已經初步掌握了。要進一步提高&#xff0c;技術不是制作高水平PPT的主要障礙&#…

無法訪問com.sun.beans.introspect.PropertyInfo

idea在install或者package項目的時候報錯&#xff1a;無法訪問com.sun.beans.introspect.PropertyInfo 原因是&#xff1a;idea編譯該項目的jdk不是1.8 修復方法&#xff1a; idea---file---project structure 把本地安裝的jdk1.8配置上 再運行問題解決

idea lombok 插件安裝

下載了guns源代碼&#xff0c;idea提示很多方法不存在。后來發現是沒有安裝 lombok 插件。 lombok讓java代碼更加簡潔&#xff0c;具體介紹&#xff1a;https://www.cnblogs.com/heyonggang/p/8638374.html 安裝&#xff1a; File---setting---plugins

怎么把pdf轉換為html,如何將PDF轉換成HTML網頁格式呢?

原標題&#xff1a;如何將PDF轉換成HTML網頁格式呢&#xff1f;現在很多在校程序學生們時常在思考怎么對HTML網頁進行編譯以呈現出想要展現的內容。但是HTML猶如我們外語學習一樣&#xff0c;一個網頁有很多的HTML文件&#xff0c;超文本標記語言文件以.htm(磁盤操作系統DOS限制…

Epson C1100報錯“Service Req E511”的處理方法

2019獨角獸企業重金招聘Python工程師標準>>> 轉載于:https://my.oschina.net/renyuansoft/blog/2231623

guns企業高級單體版(前后端不分離)運行啟動

單體版分前后端分離與不分離&#xff0c;這里分享前后端不分離的搭建方法 訪問guns官網https://www.stylefeng.cn&#xff0c;登錄后可查看教程&#xff08;賬號密碼見群公告&#xff09; 官方教程不是最新的&#xff0c;有些地方寫的不是很清楚 第一步 確認環境 JDK1.8 M…

華為手機應用鴻蒙os,華為手機內置應用逐漸向鴻蒙 OS 靠攏

IT 之家 3 月 21 日消息 華為在去年 12 月 16 日舉行 HarmonyOS 2.0 手機開發者 Beta 活動。現場正式發布了 HarmonyOS 2.0 手機開發者 Beta 版本。同時&#xff0c;HarmonyOS 2.0 手機開發者 Beta 開啟公測。華為表示&#xff0c;HarmonyOS 是面向萬物互聯時代的全場景分布式操…

分布式數據庫中間件使用經驗分享

最近公司新項目使用了華為云的DDM分布式數據庫中間件服務&#xff0c;通過一段的時間的使用感覺還不錯。近段時間發現有許多小伙伴也準備去使用這個服務&#xff0c;所以為大家分享一下使用 創建DDM服務的經驗&#xff0c;幫助小伙伴們少走彎路。首先在使用創建DDM實例的時候小…

project設置6天工作制日歷

1.新建工作日歷&#xff0c;取名 2.在“工作周”選項里設置 主要用到的是“工作周” 在project標準日歷里&#xff0c;星期一---星期五是有工作時間&#xff0c;8-12,13-17。星期六&#xff0c;星期日是沒有工作時間的&#xff0c;即非工作日。只要設置工作時間&#xff0c;就…

html5播放器自動全屏,HTML5 video播放器全屏(fullScreen)實現的方法

這篇文章主要介紹了HTML5 video播放器全屏(fullScreen)方法實例,本文直接給出一個完整代碼實例,需要的朋友可以參考下首先來說&#xff0c;這個標題具有誤導性&#xff0c;但這樣設置改標題也是主要因為video使用的比較多在html5中&#xff0c;全屏方法可以適用于很多html 元素…

阿里如何實現100%容器化鏡像化?八年技術演進之路回顧(轉)

本文系轉載。可以參考文中的以下內容&#xff1a; 阿里的容器框架的演進路線&#xff1b;在大公司內部、跨多部門、并且已經有大量現有系統情況下的推廣實施方案&#xff1b;框架設計的方法論、設計圖紙等。八年時間&#xff0c;阿里集團實現了 100%內部容器化鏡像化&#xff0…

project日歷設置-大小周交替

關鍵點是用到日歷中的“例外日期”的重復周期功能 效果 2020年1月 1月19日是 2020年春節調休&#xff0c;要上班&#xff0c;工作日 2020年2月 2月1日是2020年春節放假&#xff0c;不上班&#xff0c;非工作日

html 提交后跳轉頁面,html 提交后跳轉頁面

$(function () {$.ajax({url: jsondata.ashx,type: GET,dataType: json,timeout: 1000,cache: false,beforeSend: LoadFunction, //加載執行方法error: erryFunction, //錯誤執行方法success: succFunction //成功執行方法})function LoadFunction() {$("#list").htm…

vue打包后出現一些map文件的解決方法

Vue打包后出現一些map文件的解決辦法&#xff1a; 問題&#xff1a; 可能很多人在做vue項目打包&#xff0c;打包之后js中&#xff0c;會自動生成一些map文件&#xff0c;那我們怎么把它去掉不要呢&#xff1f; 1、運行 cnpm run build 開始打包 2、會在項目目錄下自動創建di…

Axure元件庫:ElementUI元件、螞蟻金服元件

2022年12月31日更新 ant design 已更新到5.x版本&#xff0c;目前官網還沒提供 axure的元件庫&#xff0c;下文的入口官網已取消&#xff0c;資源可關注我的微信公眾號&#xff0c;輸入&#xff1a;axure&#xff0c;獲取以下元件庫&#xff0c;免費&#xff0c;祝設計愉快&am…