-
當前位置:首頁 > 創(chuàng)意學院 > 技術 > 專題列表 > 正文
nginx反向代理內網訪問外網(nginx反向代理內網訪問外網文件)
大家好!今天讓創(chuàng)意嶺的小編來大家介紹下關于nginx反向代理內網訪問外網的問題,以下是小編對此問題的歸納整理,讓我們一起來看看吧。
ChatGPT國內免費在線使用,一鍵生成原創(chuàng)文章、方案、文案、工作計劃、工作報告、論文、代碼、作文、做題和對話答疑等等
只需要輸入關鍵詞,就能返回你想要的內容,越精準,寫出的就越詳細,有微信小程序端、在線網頁版、PC客戶端
本文目錄:
一、nginx正向代理和反向代理區(qū)別和好處
1.正向代理:
正向代理,"它代理的是客戶端",是一個位于客戶端和原始服務器(Origin Server)之間的服務器,為了從原始服務器取得內容,客戶端向代理發(fā)送一個請求并指定目標(原始服務器)。
然后代理向原始服務器轉交請求并將獲得的內容返回給客戶端。客戶端必須要進行一些特別的設置才能使用正向代理。
1.1正向代理用途:
訪問原來無法訪問的資源,如 Google。
可以做緩存,加速訪問資源。
對客戶端訪問授權,上網進行認證。
代理可以記錄用戶訪問記錄(上網行為管理),對外隱藏用戶信息。
2反向代理:
反向代理它代理的是服務端",主要用于服務器集群分布式部署的情況下,反向代理隱藏了服務器的信息。
2.1反向代理用途:
保證內網的安全,通常將反向代理作為公網訪問地址,Web 服務器是內網。
負載均衡,通過反向代理服務器來優(yōu)化網站的負載。
二、請教問題nginx反向代理proxy
一、反向代理:Web服務器的“經紀人”
1.1 反向代理初印象
反向代理(Reverse Proxy)方式是指以代理服務器來接受internet上的連接請求,然后將請求轉發(fā)給內部網絡上的服務器,并將從服務器上得到的結果返回給internet上請求連接的客戶端,此時代理服務器對外就表現為一個服務器。
Nginx搭建反向代理服務器過程詳解
從上圖可以看出:反向代理服務器位于網站機房,代理網站Web服務器接收Http請求,對請求進行轉發(fā)。
1.2 反向代理的作用
①保護網站安全:任何來自Internet的請求都必須先經過代理服務器;
Nginx搭建反向代理服務器過程詳解
②通過配置緩存功能加速Web請求:可以緩存真實Web服務器上的某些靜態(tài)資源,減輕真實Web服務器的負載壓力;
Nginx搭建反向代理服務器過程詳解
③實現負載均衡:充當負載均衡服務器均衡地分發(fā)請求,平衡集群中各個服務器的負載壓力;
Nginx搭建反向代理服務器過程詳解
二、初識Nginx:簡單卻不平凡
2.1 Nginx是神馬?
Nginx搭建反向代理服務器過程詳解
Nginx是一款輕量級的網頁服務器、反向代理器以及電子郵件代理服務器。其將源代碼以類BSD許可證的形式發(fā)布,因它的穩(wěn)定性、豐富的功能集、示例配置文件和低系統(tǒng)資源的消耗而聞名。
Source:Nginx(發(fā)音同engine x),它是由俄羅斯程序員Igor Sysoev所開發(fā)的。起初是供俄國大型的門戶網站及搜索引擎Rambler(俄語:Рамблер)使用。此軟件BSD-like協議下發(fā)行,可以在UNIX、GNU/Linux、BSD、Mac OS X、Solaris,以及Microsoft Windows等操作系統(tǒng)中運行。
說到Web服務器,Apache服務器和IIS服務器是兩大巨頭;但是運行速度更快、更靈活的對手:Nginx 正在迎頭趕上。
2.2 Nginx的應用現狀
Nginx 已經在俄羅斯最大的門戶網站── Rambler Media(www.rambler.ru)上運行了3年時間,同時俄羅斯超過20%的虛擬主機平臺采用Nginx作為反向代理服務器。
Nginx搭建反向代理服務器過程詳解Nginx搭建反向代理服務器過程詳解Nginx搭建反向代理服務器過程詳解Nginx搭建反向代理服務器過程詳解Nginx搭建反向代理服務器過程詳解
在國內,已經有 淘寶、新浪博客、新浪播客、網易新聞、六間房、56.com、Discuz!、水木社區(qū)、豆瓣、YUPOO、海內、迅雷在線 等多家網站使用 Nginx 作為Web服務器或反向代理服務器。
2.3 Nginx的核心特點
(1)跨平臺:Nginx 可以在大多數 Unix like OS編譯運行,而且也有Windows的移植版本;
(2)配置異常簡單:非常容易上手。配置風格跟程序開發(fā)一樣,神一般的配置;
(3)非阻塞、高并發(fā)連接:數據復制時,磁盤I/O的第一階段是非阻塞的。官方測試能夠支撐5萬并發(fā)連接,在實際生產環(huán)境中跑到2~3萬并發(fā)連接數。(這得益于Nginx使用了最新的epoll模型);
PS:對于一個Web服務器來說,首先看一個請求的基本過程:建立連接—接收數據—發(fā)送數據,在系統(tǒng)底層看來 :上述過程(建立連接—接收數據—發(fā)送數據)在系統(tǒng)底層就是讀寫事件。
①如果采用阻塞調用的方式,當讀寫事件沒有準備好時,必然不能夠進行讀寫事件,那么久只好等待,等事件準備好了,才能進行讀寫事件,那么請求就會被耽擱 。
②既然沒有準備好阻塞調用不行,那么采用非阻塞調用方式。非阻塞就是:事件馬上返回,告訴你事件還沒準備好呢,你慌什么,過會再來吧。好吧,你過一會,再來檢查一下事件,直到事件準備好了為止,在這期間,你就可以先去做其它事情,然后再來看看事件好了沒。雖然不阻塞了,但你得不時地過來檢查一下事件的狀態(tài),你可以做更多的事情了,但帶來的開銷也是不小的。
(4)事件驅動:通信機制采用epoll模型,支持更大的并發(fā)連接。
①非阻塞通過不斷檢查事件的狀態(tài)來判斷是否進行讀寫操作,這樣帶來的開銷很大,因此就有了異步非阻塞的事件處理機制。這種機制讓你可以同時監(jiān)控多個事件,調用他們是阻塞的,但可以設置超時時間,在超時時間之內,如果有事件準備好了,就返回。這種機制解決了上面阻塞調用與非阻塞調用的兩個問題。
②以epoll模型為例:當事件沒有準備好時,就放入epoll(隊列)里面。如果有事件準備好了,那么就去處 理;如果事件返回的是EAGAIN,那么繼續(xù)將其放入epoll里面。從而,只要有事件準備好了,我們就去處理它,只有當所有事件都沒有準備好時,才在 epoll里面等著。這樣,我們就可以并發(fā)處理大量的并發(fā)了,當然,這里的并發(fā)請求,是指未處理完的請求,線程只有一個,所以同時能處理的請求當然只有一 個了,只是在請求間進行不斷地切換而已,切換也是因為異步事件未準備好,而主動讓出的。這里的切換是沒有任何代價,你可以理解為循環(huán)處理多個準備好的事 件,事實上就是這樣的。
③與多線程方式相比,這種事件處理方式是有很大的優(yōu)勢的,不需要創(chuàng)建線程,每個請求占用的內存也很少,沒有上下文切換, 事件處理非常的輕量級,并發(fā)數再多也不會導致無謂的資源浪費(上下文切換)。對于IIS服務器,每個請求會獨占一個工作線程,當并發(fā)數上到幾千時,就同時 有幾千的線程在處理請求了。這對操作系統(tǒng)來說,是個不小的挑戰(zhàn):因為線程帶來的內存占用非常大,線程的上下文切換帶來的cpu開銷很大,自然性能就上不 去,從而導致在高并發(fā)場景下性能下降嚴重。
總結:通過異步非阻塞的事件處理機制,Nginx實現由進程循環(huán)處理多個準備好的事件,從而實現高并發(fā)和輕量級。
(5)Master/Worker結構:一個master進程,生成一個或多個worker進程。
Nginx搭建反向代理服務器過程詳解
PS:Master-Worker設計模式核心思想是將原來串行的邏輯并行化, 并將邏輯拆分成很多獨立模塊并行執(zhí)行。其中主要包含兩個主要組件Master和Worker,Master主要將邏輯進行拆分,拆分為互相獨立的部分,同 時維護了Worker隊列,將每個獨立部分下發(fā)到多個Worker并行執(zhí)行,Worker主要進行實際邏輯計算,并將結果返回給Master。
問:nginx采用這種進程模型有什么好處?
答:采用獨立的進程,可以讓互相之間不會影響,一個進程退出后,其它進程還在工作,服務不會中斷,Master 進程則很快重新啟動新的Worker進程。當然,Worker進程的異常退出,肯定是程序有bug了,異常退出,會導致當前Worker上的所有請求失 敗,不過不會影響到所有請求,所以降低了風險。
(6)內存消耗小:處理大并發(fā)的請求內存消耗非常小。在3萬并發(fā)連接下,開啟的10個Nginx 進程才消耗150M內存(15M*10=150M)。
(7)內置的健康檢查功能:如果 Nginx 代理的后端的某臺 Web 服務器宕機了,不會影響前端訪問。
(8)節(jié)省帶寬:支持 GZIP 壓縮,可以添加瀏覽器本地緩存的 Header 頭。
(9)穩(wěn)定性高:用于反向代理,宕機的概率微乎其微。
三、構建實戰(zhàn):Nginx+IIS構筑Web服務器集群的負載均衡
這里我們主要在Windows環(huán)境下,通過將同一個Web網站部署到不同服務器的IIS上,再通過一個統(tǒng)一的Nginx反響代理服務器對外提供統(tǒng)一訪問接入,實現一個最簡化的反向代理和負載均衡服務。但是,受限于實驗條件, 我們這里主要在一臺計算機上進行反向代理、IIS集群的模擬,具體的實驗環(huán)境如下圖所示:我們將nginx服務和web網站都部署在一臺計算機 上,nginx監(jiān)聽http80端口,而web網站分別以不同的端口號(這里是8050及8060)部署在同一個IIS服務器上,用戶訪問 localhost時,nginx作為反向代理將請求均衡地轉發(fā)給兩個IIS中不同端口的Web應用程序進行處理。雖然實驗環(huán)境很簡單而且有限,但是對于 一個簡單的負載均衡效果而言,本文是可以達到并且展示的。
Nginx搭建反向代理服務器過程詳解
3.1 準備一個ASP.NET網站部署到IIS服務器集群中
(1)在VS中新建一個ASP.NET Web應用程序,但是為了在一臺計算機上展示效果,我們將這個Web程序復制一份,并修改兩個Web程序的Default.aspx,讓其的首頁顯示不同 的一點信息。這里Web1展示的是“The First Web:”,而Web2展示的則是“The Second Web”。
Nginx搭建反向代理服務器過程詳解
(2)調試運行,看看兩個網站的效果如何?
①Web1的展示效果:
Nginx搭建反向代理服務器過程詳解
②Web2的展示效果:
Nginx搭建反向代理服務器過程詳解
③部署到IIS中,分配不同的端口號:這里我選擇了Web1:8050,Web2:8060
Nginx搭建反向代理服務器過程詳解
(3)總結:在真實環(huán)境中,構建Web應用服務器集群的實現是將同一個Web應用程序部署到Web服務器集群中的多個Web服務器上。
3.2 下載Nginx并部署到服務器中作為自啟動的Windows服務
(1)到Nginx官網下載Nginx的Windows版本:http://nginx.org/en/download.html(這里我們使用nginx/Windows-1.4.7版本進行實驗,本文底部有下載地址)
(2)解壓到磁盤任意目錄,例如這里我解壓到了:D:\Servers\nginx-1.4.7
(3)啟動、停止和重新加載服務:通過cmd以守護進程方式啟動nginx.exe:start nginx.exe,停止服務:nginx -s stop,重新加載配置:nginx -s reload;
Nginx搭建反向代理服務器過程詳解
(4)每次以cmd方式啟動Nginx服務不符合實際要求,于是我們想到將其注冊為Windows服務,并設置為自動啟動模式。這里,我們使用一個 不錯的小程序:“Windows Service Wrapper”,將nginx.exe注冊為Windows服務,具體的步湊如下:
①下載最新版的 Windows Service Wrapper 程序,比如我下載的名稱是 “winsw-1.8-bin.exe”(本文底部有下載地址),然后把它命名成你想要的名字(比如: “nginx-service.exe”,當然,你也可以不改名)
②將重命名后的 nginx-service.exe 復制到 nginx 的安裝目錄(比如,我這里是 “D:\Servers\nginx-1.4.7″)
③在同一個目錄下創(chuàng)建一個Windows Service Wrapper 的XML配置文件,名稱必須與第一步重命名時使用的名稱一致(比如我這里是 “nginx-service.xml”, 如果,你沒有重命名,則應該是 “winsw-1.8-bin.xml”),這個XML的內容如下:
<?xml version="1.0" encoding="UTF-8" ?>
<service>
<id>nginx</id>
<name>Nginx Service</name>
<description>High Performance Nginx Service</description>
<executable>D:\Servers\nginx-1.4.7\nginx.exe</executable>
<logpath>D:\Servers\nginx-1.4.7\</logpath>
<logmode>roll</logmode>
<depend></depend>
<startargument>-p D:\Servers\nginx-1.4.7</startargument>
<stopargument>-p D:\Servers\nginx-1.4.7 -s stop</stopargument>
</service>
④在命令行下執(zhí)行以下命令,以便將其注冊成Windows服務:nginx-service.exe install
Nginx搭建反向代理服務器過程詳解
⑤接下來就可以在Windows服務列表看到Nginx服務了,這里我們可以將其設置為自動啟動了:
Nginx搭建反向代理服務器過程詳解
(5)總結:在Windows環(huán)境中,要對外提供的Windows服務一般都要將其啟動類型設置為自動。
3.3 修改Nginx核心配置文件nginx.conf
(1)進程數與每個進程的最大連接數:
?nginx進程數,建議設置為等于CPU總核心數
?單個進程最大連接數,那么該服務器的最大連接數=連接數*進程數
Nginx搭建反向代理服務器過程詳解
(2)Nginx的基本配置:
?監(jiān)聽端口一般都為http端口:80;
?域名可以有多個,用空格隔開:例如 server_name www.ha97.com ha97.com;
Nginx搭建反向代理服務器過程詳解
(3)負載均衡列表基本配置:
?location / {}:對aspx后綴的進行負載均衡請求,假如我們要對所有的aspx后綴的文件進行負載均衡時,可以這樣寫:location ~ .*\.aspx$ {}
?proxy_pass:請求轉向自定義的服務器列表,這里我們將請求都轉向標識為http://cuitccol.com的負載均衡服務器列表;
Nginx搭建反向代理服務器過程詳解
?在負載均衡服務器列表的配置中,weight是權重,可以根據機器配置定義權重(如果某臺服務器的硬件配置十分好,可以處理更多的請求,那么可以 為其設置一個比較高的weight;而有一臺的服務器的硬件配置比較差,那么可以將前一臺的weight配置為weight=2,后一臺差的配置為 weight=1)。weigth參數表示權值,權值越高被分配到的幾率越大;
Nginx搭建反向代理服務器過程詳解
(4)總結:最基本的Nginx配置差不多就是上面這些內容,當然僅僅是最基礎的配置。(詳細的配置內容請下載底部的nginx-1.4.7詳細查看)
3.4 添加Nginx對于靜態(tài)文件的緩存配置
為了提高響應速度,減輕真實服務器的負載,對于靜態(tài)資源我們可以在反向代理服務器中進行緩存,這也是反向代理服務器的一個重要的作用。
(1)緩存靜態(tài)資源之圖片文件
root /nginx-1.4.7/staticresources/image:對于配置中提到的jpg/png等文件均定為到/nginx-1.4.7/staticresources/image文件夾中進行尋找匹配并將文件返回;
expires 7d:過期時效為7天,靜態(tài)文件不怎么更新,過期時效可以設大一點,如果頻繁更新,則可以設置得小一點;
TIPS:下面的樣式、腳本緩存配置同這里一樣,只是定位的文件夾不一樣而已,不再贅述。
Nginx搭建反向代理服務器過程詳解
(2)緩存靜態(tài)資源之樣式文件
Nginx搭建反向代理服務器過程詳解
(3)緩存靜態(tài)資源之腳本文件
Nginx搭建反向代理服務器過程詳解
(4)在nginx服務文件夾中創(chuàng)建靜態(tài)資源文件夾,并要緩存的靜態(tài)文件拷貝進去:這里我主要將Web程序中用到的image、css以及js文件拷貝了進去;
Nginx搭建反向代理服務器過程詳解
(5)總結:通過配置靜態(tài)文件的緩存設置,對于這些靜態(tài)文件的請求可以直接從反向代理服務器中直接返回,而無需再將這些靜態(tài)資源請求轉發(fā)到具體的Web服務器進行處理了,可以提高響應速度,減輕真實Web服務器的負載壓力。
3.5 簡單測試Nginx反向代理實現負載均衡效果
(1)第一次訪問http://localhost/Default.aspx時從127.0.0.1:8050處理響應返回結果
(2)第二次訪問http://localhost/Default.aspx時從127.0.0.1:8060處理響應返回結果
(3)多次訪問http://localhost/Default.aspx時的截屏:
Nginx搭建反向代理服務器過程詳解
學習小結
在本文中,借助了Nginx這個神器簡單地在Windows環(huán)境下搭建了一個反向代理服務,并模擬了一個IIS服務器集群的負載均衡效果。從這個 DEMO中,我們可以簡單地感受到反向代理為我們所做的事情,并體會負載均衡是怎么一回事。但是,在目前大多數的應用中,都會將Nginx部署在 Linux服務器中,并且會做一些針對負載均衡的優(yōu)化配置,這里我們所做的僅僅就是一個小小的使用而已(just修改一下配置文件)。不過,萬丈高樓平地 起,前期的小小體會,也會幫助我們向后期的深入學習奠定一點點的基礎。
三、為什么要用Nginx反向代理
用Nginx反向代理是為了不讓客戶端知道真正訪問的服務器地址是多少,以防止暴露服務器信息讓服務器變的不安全。
當然也有其它的功能,如網站的動靜分離,可以加快客戶端的訪問效率。
四、通過nginx實現智能家居自動內外網切換
搞了HomeAssistant的外網訪問后,內外網訪問需要不同的地址,導致一些不必要的麻煩。通過host+nginx配置可以實現同一個域名內網下訪問內網ip,外網訪問外網ip
以上就是關于nginx反向代理內網訪問外網相關問題的回答。希望能幫到你,如有更多相關問題,您也可以聯系我們的客服進行咨詢,客服也會為您講解更多精彩的知識和內容。
推薦閱讀:
濱河景觀設計創(chuàng)意靈感論文(濱河景觀設計創(chuàng)意靈感論文范文)