nginx簡單配置
1、下載
下載地址為:http://nginx.org/en/download.html
這裡我們下載1.13.7版本,具體版本自己把握。(1.13之後支援websocket)
2、啟動
下載的壓縮包解壓之後如圖所示:
nginx解壓目錄
這裡conf資料夾裡面主要存放的一些配置檔案,logs資料夾裡面主要存放日誌檔案,剛開始主要使用這兩個資料夾裡面的東西。
可以看到一個可執行檔案nginx.exe。雙擊之後就能啟動nginx了。也可以使用命令start nginx啟動,重啟命令:nginx -s reload
nginx的預設埠是80,我們在瀏覽器視窗輸入localhost
我這裡已經修改了埠為8080,所以訪問的是localhost:8080
出現如上介面,則說明nginx已經啟動成功了。
3、簡單的負載均衡
這裡使用最簡單的啟動兩個tomcat來實現負載均衡。首先我們啟動兩個toncat,並且為了區分在主頁上做了一些修改,如下圖所示:
第一個tomcat,標註the first toncat
第二個tomcat,標註the second toncat
然後我們用編輯器開啟conf資料夾下的nginx.conf檔案
首先我們在http的上下文中配置一個upstream,
#負載的server
upstream tomcat_server{
server 127.0.0.1:8081 ;
server 127.0.0.1:8082 ;
}
分別表示負載的兩個tomcat。然後在server的上下文中配置一個location:
server {
listen 80;
location /tomcat/ {
proxy_passhttp://tomcat_server/;
}
}
proxy_pass配置為上面upstream的名字。
這個時候我們訪問http://localhost/tomcat/,會發現交替出現兩個tomcat,說明負載均衡已經起作用。如下圖:
第一次訪問
第二次訪問
到此為止,一個最簡單的負載兩個tomcat的demo已經完成。
4、負載均衡的實現方式
4.1、輪詢(預設)
每個請求按時間順序逐一分配到不同的後端伺服器,如果後端伺服器down掉,能自動剔除。
4.2、weight
指定輪詢機率,weight和訪問比率成正比,用於後端伺服器效能不均的情況。
4.3、ip_hash
每個請求按訪問ip的hash結果分配,這樣每個訪客固定訪問一個後端伺服器,可以解決session的問題。
4.4、fair(第三方)
按後端伺服器的響應時間來分配請求,響應時間短的優先分配。
4.5、url_hash(第三方)
按訪問url的hash結果來分配請求,使同樣的url定向到同一個後端伺服器,後端伺服器為快取時比較有效
5、其他的一些配置
首先我們來看一個配置檔案:
max_fails=1 fail_timeout=600s表示失敗1次後就認為在之後的10分鐘中該server已經down掉;還可以配置backup,則設定該server為備份伺服器,當其他的server都down的時候,才會訪問這臺伺服器。
接下里我們看一個完整的server上下文:
稍微完整的server上下文配置
上圖中的proxy_next_upstream這個配置表示為發生後面的錯誤後直接請求下一個sever(注意這裡讀請求的時候沒有問題,但可能在寫請求的時候容易出問題)這裡本來還有一個配置項timeout,如果配置了timeout一旦出現了超時,去訪問下一個server的,有多少個server就訪問多少次,這就回造成一直訪問失敗,超時。
在模擬一臺伺服器down的時候,迅速切換另一臺的時候,剛開始總是很慢,後來才發現是proxy_connect_timeout這個配置的問題,配置1秒則是連線1秒沒有響應就切換到另一臺服務,proxy_read_timeout和proxy_send_timeout則是連線成功後讀和寫的超時時間。
使用中還發現負載均衡時websocke無法連線,一直返回400錯誤。後來發現需要配置幾個配置項,在負載均衡中要使用websocket必須加配置才可以,就是如上圖中的三行配置。
6.session問題
使用負載均衡的時候會出現session不同步的問題,導致無法登陸等一系列操作。我們使用redis來儲存session,
如何使用redis(windows環境下),把圖一中的三個配置檔案覆蓋到圖二的同名字的配置檔案,然後點選圖三的start.bat檔案啟動redis
圖一
圖二
圖三
然後在專案配置檔案中配置如下:
7、附上一份詳細的配置檔案(以下三張圖轉載自https://www.coderknock.com/blog/2016/04/28/nginx.conf.html)