Nginx快取伺服器配置

十五十六發表於2018-09-09

ngx_http_proxy_module模組

代理模組,允許向另一個伺服器傳送請求

重要的幾個指令

1.proxy_pass URL;

設定代理伺服器的協議和地址以及應該對映位置的URI。作為協議,可以指定“HTTP”或“HTTPS”。地址可以指定為域名或IP地址,以及可選埠
有個容易混的地方需要注意下

server {
		...
		server_name HOSTNAME;
		location /uri/ {
			proxy http://host[:port];
##proxy_pass後面的路徑不帶uri時,其會將location的uri傳遞給後端主機			
##客戶端訪問:http://HOSTNAME/uri  實際上訪問: http://host/uri 
		}
		...
}
server {
	...
	server_name HOSTNAME;
	location /uri/ {
		proxy http://host/new_uri/;
#proxy_pass後面的路徑是一個uri時,其會將location的uri替換為proxy_pass的uri;
#客戶端訪問http://HOSTNAME/uri/,實際上是在訪問 http://host/new_uri/
	}
	...
}

2、proxy_set_header field value;

設定發往後端主機的請求報文的請求首部的值;可以自定義首部

proxy_set_header X-Real-IP  $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

3、proxy_cache_path

定義可用於proxy功能的快取;使用者訪問代理伺服器的時候,如果每次都往後端去重新取資料,這個非常耗資源,所以可以再這裡設定快取,將常用的快取在代理伺服器本地。這裡使用的方式需要先用這個指令定義,再用proxy_cache這個指令指定使用。這個指令後面會說。
格式:

proxy_cache_path path [levels=levels] [use_temp_path=on|off] keys_zone=name:size [inactive=time] [max_size=size] [manager_files=number] [manager_sleep=time] [manager_threshold=time] [loader_files=number] [loader_sleep=time] [loader_threshold=time] [purger=on|off] [purger_files=number] [purger_sleep=time] [purger_threshold=time];

示例:

proxy_cache_path   /usr/local/nginx/proxy_cache  levels=1:2:1  keys_zone=pcache:5m max_size=2g

表示快取存放的路徑為/usr/local/nginx/proxy_cache,levels=1:2:1 使用者訪問的時候我們可以設定對uri做hash得到的值,從右到左。第1個字元表示第一級目錄的目錄名,第2,3個字元表示第二級目錄名,第4個字元表示第三級目錄名。這種方式方便查詢,,假設我們基於uri做hash,使用者訪問的時候我們根據hash的結果查詢目錄。可以快速檢索。pcache表示鍵的名字,5m是鍵使用的空間。目錄磁碟空間最大不能超過2g,可以結合後面的圖進行理解

4、proxy_cache zone | off;

指明要呼叫的快取,或關閉快取機制;使用的時候再http,server,location中寫
示例:

proxy_cache pcache;
#表示使用pcache快取,這個使用之前必須先用proxy_cache_path先定義。

5、 proxy_cache_key string;

快取中用於“鍵”的內容;

proxy_cache_key $scheme$proxy_host$request_uri;
這裡設定$scheme$proxy_host$request_uri作為鍵

6、proxy_cache_valid [code …] time;

定義對特定響應碼的響應內容的快取時長;定義在http{…}中;Nginx不僅可以

常用配置的示例

環境
代理伺服器ip:192.168.253.128
後端真實伺服器ip:192.168.253.139 (這臺機上有一個httpd服務,index.html內容為httpd)

http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;
    proxy_cache_path   /usr/local/nginx/proxy_cache  levels=1:2:1  keys_zone=pcache:5m max_size=2g; ##定義快取存放路徑
    server {
        listen       80;
        server_name  localhost;
        location / {
             root html;
             proxy_cache pcache;  ##使用上面定義的pcache快取
             proxy_pass http://192.168.253.139; ##後端伺服器為192.168.253.139
             proxy_cache_key $request_uri; ##將$request_uri作為鍵
       	     proxy_cache_valid 200 302 301 1h;##將響應碼200,302,301進行快取,時間為1小時
             proxy_cache_valid any 1m; ##除了200,302,301這幾個響應碼,其他的響應碼都快取1分鐘。
        }
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }
}

然後啟動Nginx

nginx

訪問一下代理伺服器看是否正常
這裡寫圖片描述
這個是後端真實伺服器的頁面。之前設定的。所以可以看出是成功了的。然後我們可以看一下快取是否生效了
這裡寫圖片描述

相關文章