案例:Nginx作為Web快取伺服器應用
從0.7.48版本開始,nginx支援類似Squid的快取功能。nginx的Web快取服務主要由proxy_cache相關命令集和fastcgi_cache相關命令集構成,前者用於反向代理時對後端內容源伺服器進行快取,後者主要用語對FastCGI的動態程式進行快取。此外,也可以使用第三方模組ngx_slowfs_cache來實現快取伺服器配置。
首先是安裝,安裝過程基本上和安裝nginx無區別,不同的是要在編譯時加上ngx_cache_purge模組,它是清理nginx快取的一個外掛。
外掛安裝
編譯安裝nginx,安裝完成後可通過nginx -V來檢視已經安裝的nginx版本和載入的模組資訊wget http://labs.frickle.com/files/ngx_cache_purge-2.3.tar.gz tar zxvf ngx_cache_purge-2.3.tar.gz -C /usr/local/app/ngx_cache_purge-2.3
./configure --prefix=/usr/local/app/nginx \
--add-module=/usr/local/app/ngx_cache_purge-2.3 \
--with-http_stub_status_module --with-http_ssl_module
make
make install
配置快取伺服器,老樣子,同樣是貼出配置檔案內容
#user nobody; worker_processes 1; #error_log logs/error.log; #error_log logs/error.log notice; #error_log logs/error.log info; #pid logs/nginx.pid; events { worker_connections 1024; } http { include mime.types; default_type application/octet-stream; charset utf-8; server_names_hash_bucket_size 128; client_header_buffer_size 32k; large_client_header_buffers 4 32k; sendfile on; tcp_nopush on; keepalive_timeout 65; tcp_nodelay on; client_body_buffer_size 512k; proxy_connect_timeout 5; proxy_read_timeout 60; proxy_send_timeout 5; proxy_buffer_size 16k; proxy_buffers 4 64k; proxy_busy_buffers_size 128k; proxy_temp_file_write_size 128k; gzip on; gzip_min_length 1k; gzip_buffers 4 16k; gzip_http_version 1.1; gzip_comp_level 2; gzip_types text/plain application/x-javascript text/css application/xml; gzip_vary on; proxy_cache_path /backup/proxy_cache_dir levels=1:2 keys_zone=cache_one:512m inactive=1d max_size=3g; proxy_temp_path /backup/proxy_temp_dir; server { listen 80; server_name 1.j.cn 2.j.cn; index index.html index.htm; if ($host = '2.j.cn') { rewrite ^/(.*)$ http://1.j.cn/$1 permanent; } charset utf-8; access_log logs/1.j.cn.access.log; location / { proxy_cache cache_one; proxy_cache_valid 200 304 12h; proxy_cache_key $host$uri$is_args$args; proxy_pass http://127.0.0.1:8080; proxy_set_header Host $Host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; expires 1d; } location ~ /purge(/.*) { allow 127.0.0.1; deny all; proxy_cache_purge cache_one $host$1$is_args$args; } error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } } }
具體的解釋,就不細寫了,因為碼字真的很累。。。。。。
那麼,上面配置能夠得到什麼呢,首先,通過proxy_cache_path定義 快取目錄/backup/proxy_cache_dir和/backup/proxy_temp_dir,這個資料夾要自行建立,需在同一磁碟分割槽
levels設定快取的目錄深度
kets_zone設定快取區名稱和指配的記憶體大小
max_size設定快取空間最大使用值
通過location ~ /purge(/.*)設定了手動清楚快取的策略,清楚的方法為:如果一個url為
http://1.j.cn/www/index.html,那麼通過訪問
http://1.j.cn/purge/www/index.html即可清楚該url的快取,
其中allow用來做訪問策略,這裡的配置是隻允許本地清除快取,也就是說,當大家需要檢視頁面更新內容時,必須在linux主機上使用curl命令進行訪問即可,否則均返回403,這樣避免了不相干人員擁有能夠清除快取的許可權。
清除成功如下
那麼還可以通過配置:
location ~ .*\.(jsp|php\jspx)?$ {
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_pass http://http://127.0.0.1:8080;
}
來控制不做快取的內容,這裡是以.jsp .php .jspx結尾的動態應用程式不快取。
那麼nginx作為快取伺服器,就介紹到這裡,大家可以多次開啟網址,通過檢視開啟速度,就可以感受到有快取的訪問速度,也可以進入到backup的快取目錄裡去檢視有沒有內容產生來判斷快取是否成功。