直接讓web服務運行在80端不行嗎,為什麼要用nginx反向代理?

孟偉康


讓web服務運行在80端口是可行的,但是會存在一些問題。

問題一:其他項目只能使用非80端口

通常一臺服務器都會部署很多項目,但是80端口只有一個,如果一個web項目獨自佔用了80端口,就會造成其他項目只能使用其他端口。

我們都知道訪問web服務需要通過“網址:端口”的形式,80端口作為HTTP協議的默認端口訪問時可以省略。

這樣一來對於那些沒有在80端口運行的web服務,用戶就需要手動在網址後面加上對應端口才能訪問到,這對用戶來講是不可接受的。

問題二:不方便擴展

當訪問量很小時可能只需要一臺服務器實例就能支撐,但是當訪問量上升之後服務就需要橫向擴展上負載均衡之類的措施。

這個時候每增加一個負載就需要一臺獨立的帶80端口的服務器,會平白無故的增大不必要的開銷,而且在負載均衡的方案選擇上可能也只有為數不多的選擇。

使用Nginx反向代理有什麼好處?

好處一:複用80端口

先來看一下使用Nginx反向代理之後多服務共用80端口的示意圖:

用戶請求首先會到達Nginx,Nginx根據根據鏈接地址將請求轉發至運行在其他端口的web服務上。

Nginx反向代理不僅可以充分利用服務器的性能部署多個web服務,而且多個項目可以共用80端口很友好的對外提供web服務。

好處二:擴展方便

同樣先來看一下使用Nginx反向代理之後的擴展方案示意圖:

當單實例的web服務支撐不了大量請求時,我們就需要做橫向擴容,啟動多個實例一起對外提供服務。

使用Nginx方向代理之後,我們只需要找幾臺服務器,可在任意的端口上啟動web服務。

用戶請求首先會到達Nginx,之後Nginx會根據ip哈希、實例權重等規則將請求轉發到對應服務器、對應端口的web服務上。

總結

直接讓web服務運行在80端口是可行的,但是會存在80端不能複用和擴展不方便的問題,所以實際情況中我們通常不會直接在80端口運行web服務。

使用Nginx反向代理之後,同一臺服務器上的多個web服務可以共用80端口對外提供服務,對用戶比較友好,另外服務的橫向擴展也會更方便。


萌新程序員成長日記


你說的當然可以,想搞明白你的疑問,必須先了解nginx是什麼,作用是什麼,什麼是反向代理,作用是什麼,等這些你瞭解了,自然明白為什麼要用nginx做反向代理了。

nginx是什麼?

nginx是一款輕量級的Web 服務器/反向代理服務器及電子郵件(IMAP/POP3)代理服務器。其特點是佔有內存少,併發能力強,事實上nginx的併發能力確實在同類型的網頁服務器中表現較好,中國大陸使用nginx網站用戶有:百度、京東、新浪、網易、騰訊、淘寶等。

nginx服務器有什麼作用?

1、反向代理

2、負載均衡

3、動靜分離

什麼叫反向代理?

反向代理:反向代理(ReverseProxy)是指以代理服務器來接受internet上的連接請求,然後將請求轉發給內部網絡上的服務器,並將從服務器上得到的結果返回給internet上請求連接的客戶端,簡單來說就是真實的服務器不能直接被外部網絡訪問,想要訪問必須通過代理。

為什麼要使用反向代理?

1、防止主服務器被惡意攻擊


2、為負載均衡和動靜分離提供實現支持


什麼是負載均衡?負載均衡的作用是什麼?

負載均衡就是將任務分攤到多個操作單元上進行執行。對於Nginx而言,就是將收到的訪問請求分發給不同的Web服務器,以提高訪問性能以及可靠性。負載均衡可以有效防止一個服務器宕機而導致服務停止。

當一臺服務器的單位時間內的訪問量越大時,服務器壓力就越大,大到超過自身承受能力時,服務器就會崩潰。為了避免服務器崩潰,讓用戶有更好的體驗,我們通過負載均衡的方式來分擔服務器壓力。我們可以建立很多很多服務器,組成一個服務器集群,當用戶訪問網站時,先訪問一箇中間服務器,在讓這個中間服務器在服務器集群中選擇一個壓力較小的服務器,然後將該訪問請求引入該服務器。如此一來,用戶的每次訪問,都會保證服務器集群中的每個服務器壓力趨於平衡,分擔了服務器壓力,避免了服務器崩潰的情況。

什麼是動靜分離?動靜分離的作用?

動靜分離:運用nginx的反向代理功能分發請求:所有動態資源的請求交給應用服務器,而靜態資源的請求(例如圖片、視頻、CSS、JavaScript文件等)則直接由Nginx返回到瀏覽器。

動靜分離的作用:主要是nginx處理靜態頁面的效率遠高於tomcat的處理能力,使用c語言開發的nginx對靜態資源每秒的吞吐量是使用Java語言開發的tomcat的6倍,也遠高於其它應用服務器。


好了上面大體解釋了nginx是什麼,反向代理是什麼,希望可以對你有幫助


唯一胡小然


不一定要用


DeepCode


直接讓web服務運行在80端,這當然沒問題!

但是有兩個前提條件:

1、你得有個運營商的固定IP地址,普通撥號寬帶獲取到的動態IP,是不行的,就算獲取到的是互聯網IP,80端口也是關閉的,並且運營商不會為你開通,所以要麼選擇獨立IP的雲服務器,要麼選擇運營商的專線接入網絡



2、必須在工信部備案成功以後,才能開放80端口,才能運行你的WEB服務;



而採用nginx反向代理,不需要你有固定IP,甚至不需要你獲取到互聯網IP,哪怕是10或者100開頭的“大內網”IP,也無所謂,照樣能讓你運行WEB服務。

當然了,如果是正規的、長久的WEB服務,那我強烈建議到工信部備案後開通。


IT狂人日誌


負載均衡 ssl等等


Koca966


Django官方有一句話:我們在web編程框架方面是專家,但在web服務器方面,我們並不是。


愛農務


答案很簡單。

一臺服務器只能一個80端口,多個服務就衝突了。


分享到:


相關文章: