Nginx反向代理服務器


    反向代理(reverse proxy)方式是指用代理服務器來接受Internet上的連接請求,然後將請求轉發給内部網絡中的上游服務器,從上游服務器上得到返回結果給internet上請求連接的客戶端,此時,代理服務器對外的表現就是一個web服務器。

    nginx具有强悍的高并發高負載能力,因此一般會作爲前端的服務器直接向客戶端提供靜態文件服務,但也有一些複雜、多變的業務不適合放到nginx服務器上,這時會用apache,tomcat等服務器來處理。

    nginx通常會配置爲既是靜態web服務器也是反向代理服務器,不適合nginx處理的請求就會直接轉發到上游服務器中處理。

wKiom1csRTjyViaDAAF4A4kE7EA855.jpg


    當客戶端發來http請求時,nginx反向代理不會立刻轉發到上游服務器,而是先把用戶的請求完整地接受到nginx反向代理服務器的硬盤或者内存中,然後再向上游服務器發起連接,把緩存的客戶端請求轉發到上游服務器

wKioL1csTgOjqaCHAAIj2UQPNTs967.jpg


    這種工作方式的優缺點:


     缺點:延長了一個請求處理時間,并增加了用戶緩存請求内容的内存和磁盤空間。


     優點:降低了上游服務器的負載,盡量把壓力放在nginx反向代理服務器上。

                    爲什麽會降低降低了上游服務器的負載?   

    通常客戶端與代理服務器的網絡環境會比較複雜,多半是“走”公網,網速平均下來可能較慢,因此一個請求可能要持續很久才能完成。而代理服務器與上游服務器之間一般都是走内網,或者有專綫連接,傳輸速度比較快。Squid等反向代理服務器在與客戶端建立連接且還沒有開始接收http包體時,就已經向上游服務器建立了連接。例如,某個請求要上傳一個1G的文件,那麽每次Squid在收到一個tcp分包(如2KB)時,就會即時地向上游服務器轉發,在接收客戶端完整http包體的漫長過程中,上游服務器始終要維持這個連接,這直接對上游服務器的并發處理能力提出了挑戰,
    nginx反向代理不一樣,它在接收到完整的客戶端請求(如1G的文件)后,才會與上游服務器建立連接轉發請求,由於是内網,所以這個轉發過程會執行的很快。這樣,一個客戶端請求占用上游服務器的連接時間就會非常短,也就是說,nginx這種反向代理方案主要是爲了降低上游服務器的并發壓力