nginx是經常使用的web服務器,用於獲取靜態資源,相似的服務器還有apache。css
tomcat是基於java servlet 的 web 容器,用於獲取動態資源。html
通常的web服務架構:前端部署nginx,後端部署tomcat。用戶訪問nginx,靜態資源nginx直接返回,動態資源的請求被nginx轉發到tomcat,tomcat將處理完的結構返回給nginx,而後到瀏覽器。前端
Nginx ("engine x") 是一個高性能的HTTP和反向代理服務器,也是一個IMAP/POP3/SMTP服務器。Nginx是由Igor Sysoev爲俄羅斯訪問量第二的Rambler.ru站點開發的。java
何爲反向代理呢?即以代理服務器來接受internet上的鏈接請求,而後將請求轉發給內部網絡上的服務器,並將從服務器上獲得的結果返回給internet上請求鏈接的客戶端,此時代理服務器對外就表現爲一個服務器。nginx
而Nginx主要完成的工做就是反向代理,好比咱們向一臺服務器的80端口發送了請求,該請求首先由Nginx監聽到,其接受到請求內容後再轉發給其餘服務器,其餘服務器處理完後再將結果傳送給Nginx,最後由Nginx來統一返回給初始請求端。web
Nginx最多見的使用方法就是做爲靜態資源服務器,好比將CSS,JS,html,htm等文件進行緩存處理。apache
首先在官網中下載所需版本:http://nginx.org/en/download.html。目前我使用的版本是windows環境下的1.9.15。windows
下載完畢後,解壓。後端
開啓Nginx有兩種方法,一種是直接點擊開啓,一種是命名行開啓。瀏覽器
a.點擊開啓:
b.命名行開啓:
開啓成功後,在資源管理中能夠看到:
出現啓動失敗問題,通常是端口衝突問題,好比win7下的IIS已經啓動並佔用了80端口。在config目錄下找到nginx.conf,打開文件進行以下修改:
其中的配置爲:
其表示監聽8010端口請求後,會首先去html文件夾下尋找index.html頁面。
listen:表示當前的代理服務器監聽的端口,默認的是監聽80端口。注意,若是咱們配置了多個server,這個listen要配置不同,否則就不能肯定轉到哪裏去了。
server_name:表示監聽到以後須要轉到哪裏去,這時咱們直接轉到本地,這時是直接到nginx文件夾內。
location:表示匹配的路徑,這時配置了/表示全部請求都被匹配到這裏
root:裏面配置了root這時表示當匹配這個請求的路徑時,將會在這個文件夾內尋找相應的文件,這裏對咱們以後的靜態文件伺服頗有用。
index:當沒有指定主頁時,默認會選擇這個指定的文件,它能夠有多個,並按順序來加載,若是第一個不存在,則找第二個,依此類推。
經過proxy_pass配置請求轉發地址。即當訪問localhost的8010端口時,請求會跳轉至localhost的8080端口處。修改完Nginx的配置後不須要重啓Nginx,輸入以下命令便可:
測試以下:
上面咱們直接試了一個小例子,讓nginx進行轉發,即所謂的反向代理。但實際上咱們的需求不會是這樣的,咱們須要分文件類型來進行過濾,好比jsp直接給tomcat處理,由於nginx並非servlet容器,沒辦法處理JSP,而html,js,css這些不須要處理的,直接給nginx進行緩存。
下面咱們來進行一下配置,讓JSP頁面直接給tomcat,而html,png等一些圖片和JS等直接給nginx進行緩存。
這時最主要用的仍是location這個元素,而且涉及到一部分正則,但不難,具體配置以下:
此時再直接輸入localhost:8010,則會報404錯誤了。可是輸入localhost:8010/index.jsp,則同樣能夠跳轉至tomcat首頁中。
當一臺服務器出現故障後,咱們須要將請求自動轉向另外一臺服務器,此種需求該如何配置呢?利用Nginx也是比較方便可以實現,具體配置以下:
注意,上面還加上了一個weight屬性,此屬性表示各服務器被訪問到的權重,weight越高訪問到的概率越高。