1. 程式人生 > >nginx代理、緩存、upstream

nginx代理、緩存、upstream

區別 gin fast -a ref ngx 兩臺 type error

代理服務器:客戶機在發送請求時,不會直接發送給目的主機,而是先發送給代理服務器,代理服務接受客戶機請求之後,再向主機發出,並接收目的主機返回的數據,存放在代理服務器的硬盤中,再發送給客戶機。

技術分享圖片

正向代理與反向代理的區別:正向代理的代理對象是客戶端,反向代理的代理對象是服務端

架設在客戶機與目標主機之間,只用於代理內部網絡對Internet的連接請求,客戶機必須指定代理服務器,並將本來要直接發送到Web服務器上的http請求發送到代理服務器中

技術分享圖片

反向代理服務器架設在服務器端,通過緩沖經常被請求的頁面來緩解服務器的工作量,將客戶機請求轉發給內部網絡上的目標服務器;並將從服務器上得到的結果返回給Internet上請求連接的客戶端,此時代理服務器與目標主機一起對外表現為一個服務器。

技術分享圖片

ngx_http_proxy_module模塊配置

(1) proxy_pass URL;

context:location, if in location, limit_except

proxy_pass後面的路徑不帶uri時,其會將location的uri傳遞給後端的主機;下面的示例會將/uri/傳遞給backend服務器;

location /uri/ {

proxy_pass http://hostname;

}

eg:http://www.xu.com/bbs/-->http://192.168.1.10/bbs/

若 proxy_pass http://hostname/

則路徑映射為: http://192.168.1.10/">http://www.xu.com/bbs/-->http://192.168.1.10/

技術分享圖片

訪問結果:

技術分享圖片

proxy_pass後面的路徑是一個uri時,其會將location的uri替換為後端主機自己的uri;

location /uri/ {

proxy_pass http://hostname/new_uri/;

}

技術分享圖片

訪問結果為後端主機的主頁:

技術分享圖片

如果location定義其uri時使用的正則表達式模式匹配,則proxy_pass後的路徑不能夠使用uri;

location ~* \.(jpg|gif|jpeg)$ {

proxy_pass http://HOSTNAME;

} :此處的http://HOSTNAME後面不可以;不能有任何uri,哪怕只有/也

技術分享圖片

當在hostname後添加“/”時報錯:

技術分享圖片

技術分享圖片

nginx代理動靜分離搭建環境:

技術分享圖片

代理服務器配置:

技術分享圖片

兩臺服務其分別安裝httpd和php並提供測試頁面:

訪問192.168.1.111/index.html.和index.php和效果

技術分享圖片

技術分享圖片

upstream

ngx_http_upstream_module模塊配置 :nginx反代負載均衡器

用於將多個服務器定義成服務器組,而由proxy_pass, fastcgi_pass等指令進行引用;

(1) upstream name { ... }

定義一個後端服務器組,name為組名稱;僅能用於http上下文 ;

(2) server address [parameters];

在upstream中定義一個服務器及其相關參數;僅能用於upstream上下文;

address定義:IP[:porrt]

HOSTNAME[:port]

unix:/path/to/some_socket_file

常用參數:

weight=number:定義服務器權重,默認為1;

max_fails=number:最大失敗連接嘗試次數,失敗連接超時時長由fail_timeout參數指定;

fail_timeout=number:等待目標服務器發送響應的時長;

backup:備用服務器,所有主服務器均故障時才啟用此主機;sorry_server

down:手動標記其不再處理任何用戶請求;灰度發布模式

eg:官方文檔配置示例:

upstream backend {

server backend1.example.com weight=5;

server backend2.example.com:8080;

server unix:/tmp/backend3;

server backup1.example.com:8080 backup;

server backup2.example.com:8080 backup;

}

server {

location / {

proxy_pass http://backend;

}

}

在http上下文配置upstream 201/202集群服務器

技術分享圖片

訪問效果:

技術分享圖片 技術分享圖片


緩存相關的選項(緩存要先定義,後調用):定義level目錄最多有3級

proxy_cache_path path [levels=levels] [use_temp_path=on|off] keys_zone=name:size [inactive=time] [max_size=size]

定義緩存;可用上下文為http;

eg:proxy_cache_path /var/cache/nginx/proxy levels=1:1:1 keys_zone=pcache:10m max_size=1g;

proxy_cache zone | off; 調用緩存;可用上下文 為http, server和location;

proxy_cache_key string;定義緩存鍵;

proxy_cache_key $scheme$proxy_host$request_uri;

proxy_cache_valid [code ...] time;對不同響應碼的響應設定其可緩存時長;

eg: proxy_cache_valid 200 302 10m;

proxy_cache_valid 404 1m;

location {

proxy_cache pcache;

proxy_cache_key $scheme$proxy_host$request_uri;

roxy_cache_valid 200 302 10m;

proxy_cache_valid 404 1m;

proxy_pass http://192.168.1.202;

index index.html index.htm;

}

設置在何種情況下使用緩存響應:

proxy_cache_use_stale error | timeout | invalid_header | updating | http_500 | http_502 | http_503 | http_504 | http_403 | http_404 | off ...;

跟連接相關的選項

proxy_connect_timeout time;定義與後端服務器建立連接的超時時長;默認為60s,不建議超出75s;

proxy_send_timeout time;把請求發送給後端服務器的超時時長;默認為60s;

proxy_read_timeout time;等待後端服務器發送響應報文的超時時長;








nginx代理、緩存、upstream