1.背景介紹
2.知識剖析
3.常見問題
4.解決方案
5.編碼實戰
6.擴展思考
7.參考文獻
8.更多討論
1.背景介紹
什么是Nginx?
Nginx(engine x)是一個高性能的HTTP和反向代理服務器,是一款輕量級的Web 服務器/反向代理服務器及電子郵件(IMAP/POP3)代理服務器。其特點是占有內存少,并發能力強,事實上nginx的并發能力確實在同類型的網頁服務器中表現較好,中國大陸使用nginx網站用戶有:百度、京東、新浪、網易、騰訊、淘寶等。Nginx 可以在大多數 Unix、Linux OS 上編譯運行,并有 Windows 移植版。
2.知識剖析
Nginx的作用是什么?
(1)Nginx 是一個很強大的高性能Web服務器,在高連接并發的情況下,Nginx是Apache服務器不錯的替代品,能夠支持高達 50,000 個并發連接數的響應。
(2)Nginx作為反向代理服務器,Nginx在反向代理時,提供性能穩定,并且能夠提供配置靈活的轉發功能,Nginx可以根據不同的正則匹配,采取不同的轉發策略,比如在圖片文件結尾的走文件服務器,動態頁面走web服務器,對返回結果進行錯誤頁跳轉,異常判斷等。如果被分的服務器存在異常,他可以將請求重新轉發給另外一臺服務器,然后自動去除異常服務器。
(3)Nginx作為負載均衡服務器:Nginx 既可以在內部直接支持 Rails 和 PHP 程序對外進行服務,也可以支持作為 HTTP代理服務器對外進行服務。
(4)Nginx作為郵件代理服務器:Nginx 同時也是一個非常優秀的郵件代理服務器(最早開發這個產品的目的之一也是作為郵件代理服務器)。
3.常見問題
在WEB服務前端配置Nginx的好處是什么?
配置Nginx服務器,最大的好處得益于反向代理以及負載均衡的功能。
反向代理
客戶端本來可以直接通過HTTP協議訪問某網站應用服務器,網站管理員可以在中間加上一個Nginx,客戶端請求Nginx,Nginx請求應用服務器,然后將結果返回給客戶端,此時Nginx就是反向代理服務器。
既然服務器可以直接HTTP訪問,為什么要在中間加上一個反向代理,不是多此一舉嗎?反向代理有什么作用?繼續往下看,下面的負載均衡、虛擬主機等,都基于反向代理實現,當然反向代理的功能也不僅僅是這些。
負載均衡
當網站訪問量非常大,網站各種服務越來越慢,一臺服務器已經不夠用了。于是將同一個應用部署在多臺服務器上,將大量用戶的請求分配給多臺機器處理。同時帶來的好處是,其中一臺服務器萬一掛了,只要還有其他服務器正常運行,就不會影響用戶使用。
1.將請求輪詢分配到應用服務器,也就是一個客戶端的多次請求,有可能會由多臺不同的服務器處理。
2.服務器的硬件配置可能有好有差,想把大部分請求分配給好的服務器,把少量請求分配給差的服務器,可以通過weight來控制。
虛擬主機
有的網站訪問量大,需要負載均衡。然而并不是所有網站都如此出色,有的網站,由于訪問量太小,需要節省成本,將多個網站部署在同一臺服務器上。
例如將www.aaa.com和www.bbb.com兩個網站部署在同一臺服務器上,兩個域名解析到同一個IP地址,但是用戶通過兩個域名卻可以打開兩個完全不同的網站,互相不影響,就像訪問兩個服務器一樣,所以叫兩個虛擬主機。虛擬主機的原理是通過HTTP請求頭中的Host是否匹配server_name來實現的,客戶端通過不同的域名訪問,根據server_name可以反向代理到對應的應用服務器。
4.解決方案
5.編碼實戰
6.擴展思考
還有別的反向代理服務器嗎?
7.參考文獻
http://blog.csdn.net/zhongguozhichuang/article/details/52816887
http://blog.csdn.net/zhu_tianwei/article/details/19396527
8.更多討論
Nginx 反向代理為什么可以提高網站性能?
提高的是吞吐量,而不是性能。
Nginx出現502 Bad Gateway錯誤?
配置文件:
proxy_next_upstream error timeout invalid_headerhttp_500http_503; 或者嘗試設置:? large_client_header_buffers 4 32k;
https://ptteng.github.io/PPT/PPT-java/java-task3nginx.html#/