niginx的效能優化實踐
一、Nginx 正向代理和反向代理實現
那麼什麼是反向代理其與正向代理有什麼區別?
正向代理的概念:
正向代理是指客戶端與目標伺服器之間增加一個代理伺服器,客戶端直接訪問代理伺服器,在由代理伺服器訪問目標伺服器並返回客戶端並返回 。這個過程當中客戶端需要知道代理伺服器地址,並配置連線。
反向代理的概念:
反向代理是指 客戶端訪問目標伺服器,在目標服務內部有一個統一接入閘道器將請求轉發至後端真正處理的伺服器並返回結果。這個過程當中客戶端不需要知道代理伺服器地址,代理對客戶端而言是透明的。
反向代理與正向代理的區別
Nginx代理基本配置
nginx 代理只需要配置 location 中配置proxy_pass 屬性即可。其指向代理的伺服器地址
# 正向代理到baidu 服務
location = /baidu.html {
proxy_pass http://www.baidu.com;
}
測試:
通過自己虛擬代理到百度的頁面,不過當然在搜尋的肯定是到百度的服務的,畢竟這不是真的代理,只是模擬而已。
反向代理測試:
# 反向代理至 本機的8010服務
location /demo/ {
proxy_pass http://127.0.0.1:8082;
}
注意:demo是放在Linux中的專案的專案名,開始本人也被這個坑了,結果反向代理的時候測試一致報404的錯誤
測試:
代理相關引數:(用法可以去查官網的文件)
proxy_pass # 代理服務
proxy_redirect off; # 是否允許重定向
proxy_set_header Host $host; # 傳 header 引數至後端服務
proxy_set_header X-Forwarded-For $remote_addr; # 設定request header 即客戶端IP 地址
proxy_connect_timeout 90; # 連線代理服務超時時間
proxy_send_timeout 90; # 請求傳送最大時間
proxy_read_timeout 90; # 讀取最大時間
proxy_buffer_size 4k;
proxy_buffers 4 32k;
proxy_busy_buffers_size 64k;
proxy_temp_file_write_size 64k;
負載均衡配置與引數解析
通過proxy_pass 可以把請求代理至後端服務,但是為了實現更高的負載及效能, 我們的後端服務通常是多個, 這個是時候可以通過upstream 模組實現負載均衡。
upstream 相關引數:
service反向服務地址 加埠
weight權重
max_fails失敗多少次 認為主機已掛掉則,踢出
fail_timeout踢出後重新探測時間
backup備用服務
max_conns允許最大連線數
slow_start當節點恢復,不立即加入,而是等待 slow_start 後加入服務對列。
演示upstream 的實現。
upstream backend {
server 127.0.0.1:8080 weight=1;
server 127.0.0.1:8081 weight=2;
}
location / {
proxy_pass http://backend;
}
預設的負載均衡是1:1的;
測試:所以配置tomcat服務的交替出現
改變weight權重
測試結果:(除了第一次,其他的都是按2:1的比例)
upstream 負載均衡演算法介紹
ll+weight: 輪詢加權重 (預設)
ip_hash : 基於Hash 計算 ,用於保持session 一至性
url_hash: 靜態資源快取,節約儲存,加快速度(第三方)
least_conn :最少連結(第三方)
least_time :最小的響應時間,計算節點平均響應時間,然後取響應最快的那個,分配更高權重(第三方)
Nginx 快取記憶體
Nginx 靜態快取基本配置
一、在http元素下新增快取區宣告。
#proxy_cache_path 快取路徑
#levels 快取層級及目錄位數
#keys_zone 快取區記憶體大小
#inactive 有效期
#max_size 硬碟大小
proxy_cache_path /data/nginx/cache_test/ levels=1:2 keys_zone=cache_test:500m inactive=20d max_size=1g;
二、為指定location 設定快取策略。
# 指定快取區
proxy_cache cache_test;
#以全路徑md5值做做為Key
proxy_cache_key $host$uri$is_args$args;
#對不同的HTTP狀態碼設定不同的快取時間
proxy_cache_valid 200 304 12h;
配置步驟:
1.配置宣告快取路徑
2.配置nginx.conf檔案
測試:
分析,因為在nginx.conf配置levels表示 快取目錄層級最高三層,每層1~2個字元表示。如1:1:2 表示三層。然後通過md5對www.nginx_test.com/加密,然後取最後一位作為第一層目錄,接著後兩位為第二層目錄,因為我們配置的就是(levels=1:2)
所以只要是www.nginx_test.com/這個地址不變我們訪問的都是相同的頁面
改變地址訪問(在均衡負載2:1,因為前面實驗設定了權重為2:1了)後就訪問了8081的埠的伺服器
md5的加密
生成快取
如果檔案小我們還可以直接檢視快取內容
快取引數詳細說明
快取的清除:
該功能可以採用第三方模組 ngx_cache_purge 實現。
為nginx 新增 ngx_cache_purge 模組
#下載ngx_cache_purge 模組包 ,這裡nginx 版本為1.6.2 purge 對應2.0版
wget http://labs.frickle.com/files/ngx_cache_purge-2.0.tar.gz
#檢視已安裝模組
./sbin/nginx -V
#進入nginx安裝包目錄 重新安裝 --add-module為模組解壓的全路徑(這個要對應自己上次安裝的模組)
./configure --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module --with-debug --add-module=/home/cym/ngix/ngx_cache_purge-2.0
#重新編譯
make # make後不要make install 這樣子回直接把你原來的覆蓋了
#拷貝 安裝目錄/objs/nginx 檔案用於替換原nginx 檔案
cp objs/nginx /usr/local/nginx/sbin/nginx
#檢測檢視安裝是否成功
清除配置:
location ~ /clear(/.*) {
#允許訪問的IP
allow 127.0.0.1;
allow 自己電腦ip;
#禁止訪問的IP
deny all;
#配置清除指定快取區和路徑(與proxy_cache_key一至)
proxy_cache_purge cache_test $host$1$is_args$args;
}
配置好以後 直接訪問 :
# 訪問生成快取檔案
# 清除生成的快取,如果指定快取不存在 則會報404 錯誤。
#清除主機生成的快取 curl 127.0.0.1/clear/
....學習中.....