Nginx是一款輕量級的Web 服務器/反向代理服務器及電子郵件(IMAP/POP3)代理服務器,並在一個BSD-like 協議下發行。由俄羅斯的程序設計師Igor Sysoev所開發,供俄國大型的入口網站及搜索引擎Rambler(俄文:Рамблер)使用。其特色是佔有內存少,併發能力強,事實上nginx的併發能力確實在同類型的網頁服務器中表現較好,中國大陸使用nginx網站用戶有:百度、京東、新浪、網易、騰訊、淘寶等。html
關於代理能夠參考:圖解正向代理、反向代理、透明代理nginx
一、下載安裝正則表達式
下載最新穩定版:nginx-1.12.0.zipapache
解壓,雙擊 ngnix.exe 就行了。windows
而後打開 cmd,輸入瀏覽器
tasklist /fi "imagename eq nginx.exe"
出現:bash
打開瀏覽器,輸入「localhost」服務器
出現 ngnix 歡迎頁,說明 ngnix 已經成功安裝並啓動了:網絡
若是沒有成功,就要到 logs\error.log 下查看錯誤日誌了,我遇到端口號80被佔用的狀況,這時候要修改配置 conf\nginx.conf,端口號改成800併發
參考 nginx for Windows:http://nginx.org/en/docs/windows.html
二、配置負載均衡
ngnix支持三種方式:
咱們首先在本地打開兩個 Tomcat 服務器,一個端口爲 8080 ,一個端口爲 9000。
咱們這麼配置 conf\nginx.conf:
http { upstream myapp1 { #集羣的名字,默認是輪詢的方式 #ip_hash; #least_conn; server 127.0.0.1:8080 weight=1; #原始服務器的地址,權重weight默認爲1 server 127.0.0.1:9000 weight=2; #可是當weight都是1的時候,刷新頁面也並非均等出現的,其餘數值則正常 } server { listen 800; server_name localhost; #監聽的地址和端口,屆時在瀏覽器輸入localhost:800就能夠訪問原始集羣了 location / { #這是個正則表達式,具體的做用還不清楚 proxy_pass http://myapp1; #須要與以前設置的集羣的名字一致 } } }
這樣就完成了對 ngnix 的簡單配置。
配置後不能當即生效,若是你沒有打開 ngnix,那麼雙擊運行exe文件就好了,若是已經打開了,須要重啓以生效:(參考Beginner’s Guide)
nginx -s reload
以後再瀏覽器輸入localhost:800/index.jsp就能夠查看原來部署在 Tomcat 上的原始的網頁了。nginx 會負責頁面的分配,刷新頁面可能會進入到不一樣的服務器上頁面,兩個頁面沒有什麼不一樣,地址欄的地址也不會有變化,正常狀況下客戶是不會察覺的。若是咱們是爲了作實驗,能夠對兩個服務器上的頁面稍做修改,這樣在進入到不一樣的服務器上的話就能夠直觀的發現了。
咱們知道 Session 對象保存在服務器上,採用輪詢或者 least-connected 的方式存在的問題是客戶端的下一次請求有可能被分配到其餘的服務器上,若是這樣就不能保持 Session 會話的正常通信,這種狀況下能夠使用 ip-hash 的方法,這個方法是基於客戶端的 IP 地址來進行服務器的分配的,只須要稍做修改:
upstream myapp1 { ip_hash; server srv1.example.com; server srv2.example.com; server srv3.example.com; }
參考 Using nginx as HTTP load balancer:http://nginx.org/en/docs/http/load_balancing.html
nginx.conf 的配置項:參考Nginx+Tomcat搭建高性能負載均衡集羣
worker_processes 1;#工做進程的個數,通常與計算機的cpu核數一致 events { worker_connections 1024;#單個進程最大鏈接數(最大鏈接數=鏈接數*進程數) } http { include mime.types; #文件擴展名與文件類型映射表 default_type application/octet-stream;#默認文件類型 sendfile on;#開啓高效文件傳輸模式,sendfile指令指定nginx是否調用sendfile函數來輸出文件,對於普通應用設爲 on,若是用來進行下載等應用磁盤IO重負載應用,可設置爲off,以平衡磁盤與網絡I/O處理速度,下降系統的負載。注意:若是圖片顯示不正常把這個改爲off。 keepalive_timeout 65; #長鏈接超時時間,單位是秒 gzip on;#啓用Gizp壓縮 #服務器的集羣 upstream netitcast.com { #服務器集羣名字 server 127.0.0.1:18080 weight=1;#服務器配置 weight是權重的意思,權重越大,分配的機率越大。 server 127.0.0.1:28080 weight=2; } #當前的Nginx的配置 server { listen 80;#監聽80端口,能夠改爲其餘端口 server_name localhost;############## 當前服務的域名 location / { proxy_pass http://netitcast.com; proxy_redirect default; } error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } } }