上節課講了nginx代理服務器能夠修改傳遞給後端服務器和客戶端的請求報文,其中還有
proxy_pass_header field;---可以容許nginx把由後端被代理服務器發來的響應報文的指定首部和值直接傳遞給客戶端。
proxy_pass_request_body on|off;
proxy_pass_request_headers on|off;---可否把請求報文的某些首部直接傳遞給後端服務器,默認onphp
nginx代理服務器:一、代理服務器本地沒有緩存的時候,經過到後端服務器的網絡IO和後端服務器的本地磁盤IO才能到達代理服務器二、後端服務器的文件結構是樹狀結構,經過根一級一級的去查找,而代理服務器的緩存數據結構雖然也是樹狀結構,可是是固定等級的路徑,而每級路徑的名字是哈希碼
nginx代理服務器的緩存有兩種:一種是內存中的hash表,根據用戶請求來去hash表中查找,速度快,另一種是磁盤上的多級目錄1:1:2,若是hash表中有,就遍歷
緩存空間要先定義後使用,多級目錄也要先定義,哪個地方放這些緩存
有些狀況是不須要緩存的,例如:用戶提交表單的post方法不須要,put上傳文件不須要,delete刪除文件不須要,f5+shift強刷(告訴代理服務器不要緩存),httpv一、httpv2等版本不一樣的緩存,ftp、http不一樣協議可能請求的url相同可是請求內容不一樣,也不須要緩存,後端服務器掛了也不能緩存,緩存滿了也不能緩存,有些動態信息也不能緩存;mysql
需不須要緩存,要看用戶能不能接受過時的信息linux
接上節課的課件:
三、proxy_cache_path
定義可用於proxy功能的緩存;Context:http
四、proxy_cache zone | off
指明要調用的緩存,或關閉緩存機制;Context:http,server,location
五、proxy_cahe_key string;
緩存中用於"鍵"的內容;
默認值:proxy_cache_key $scheme$proxy_host$request_url;
六、proxy_cache_valid [code ...] time;
定義對特定響應碼的響應內容的緩存時長;
定義在http{...}中;
proxy_cache_path /var/cache/nginx/proxy_cache levels=1:1:1 keys_zone=pxycache:20m max_size=1g;
定義在須要調用緩存功能的配置段,例如server{...};
proxy_cache pxycache;
proxy_cache_key $request_url;
proxy_cache_valid 200 302 301 1h;
proxy_cache_valid any 1m;
七、proxy_cache_use_state---定義對於那些過時的內容響應與否怎麼響應,默認off,只要後端服務器聯繫不上就不能使用緩存來響應。
八、proxy_cache_methods GET|HEAD|POST...;---post沒有必要緩存,默認是get和head,能夠不用定義
九、proxy_hide_header field;
十、proxy_connect_timeout time;---定義向服務器一側發請求(創建三次握手的鏈接)超時時間。
默認爲60s,最長爲75s;
十一、proxy_read_timeout time;---定義兩次重傳之間的時間間隔,而不是多長時間完成請求,讀取後端服務器給代理服務器的響應的超時時間
十二、proxy_send_timeout time;---設置向服務端,向被代理服務端發請求報文時的超時時長,默認60snginx
ngx_http_headers_modules模塊:
向由代理服務器響應給客戶端的響應報文添加自定義首部,或修改指定首部的值;
一、add_header name value [always];
添加自定義首部;
add_header X-Via $server_addr;
add_header X-Accel $server_name;
二、expires [modified] time;
expires epoch | max|off;
用於定義Expire或Cache-Control首部的值;web
下邊是如何定義緩存的演示:
vim nginx.conf---放在http上下文中,添加下列一行
proxy_cache_paht /data/nginx/cache levels=1:1:1 keys_zone=pcache:10m max_size=2g;
定義緩存的存放目錄,指明是幾級子目錄(每一個子目錄截取URL多少個字符),在內存中取個名字以及大小,存放緩存目錄的磁盤空間最大是多少
mkdir -pv /data/nginx/cache---會自動按需建立緩存目錄
nginx -s reload
而後編輯自定義的虛擬主機配置文件:
vim ilinux.conf
server {
listen 80;
server_name www.ilinux.io;
proxy_cache pcache;---使用pcache這個緩存,上邊已經定義過了下邊的兩個location都生效。
proxy_cache_key $request_uri;
proxy_cache_method GET POST;
proxy_cache_min_uses 1;---緩存內部的緩存項在指定非活動時間內(默認10min)至少訪問到幾回認爲是活動項,若是少於定義的次數,就把它清理掉,默認是1次
proxy_cache_valid 200 302 10m;
proxy_cache_valid 404 1m;
proxy_cache_use_state http_502;正則表達式
location / {---沒有root就無法提供web服務,可是咱們是反代服務器,不須要web功能 proxy_pass http://192.168.10.11:80;---能夠是域名,能夠是ip地址,後邊要不要跟斜線,若是沒有斜線,是把能匹配到的補到後邊,若是有斜線,是替換斜線 proxy_set_header X-Real-IP $remote_addr;---把客戶端真實地址添加到報文首部發給後端主機 add_header X-Via $server_addr;---把真實後端服務器地址發給客戶端 } location ~* \.(jpg|jpeg|png)$ {---這是另外一臺後端服務器了UPSS2,使用了正則表達式匹配的話,url後邊不能加斜線 proxy_pass http://192.168.10.12:80; }
}
定義好緩存後,就能夠進入到咱們建立的緩存目錄中,查看緩存的信息了
cat /data/nginx/cache/9/d/7/**---能夠查看到緩存信息sql
httpd+php有兩種方式:一、把php作成httpd的模塊二、把php作成fpm server
而nginx只能用第二種方式fpm serverapache
lnmp架構
lnamp也是不錯的架構nginx apache+php mysqlvim