開啓三臺虛擬機 192.168.80.100 Nginx 192.168.80.101 web1 192.168.80.102 web2
提供與Squid相似的緩存,把URL以及相關信息當成key,用MD5編碼哈希後,把數據文件保存在硬盤上,而且只能爲指定的URL或者狀態碼設置過時時間,並不支持相似 squid的purge命令來手動清除指定緩存頁面,可是能夠經過第三方的ngx_cache_purge來清除指定的URL緩存
Nginx的緩存加速功能是由proxy_cache(用於反向代理和靜態緩存)和fastcgi_cache(PHP動態緩存)兩個功能模塊完成html
反向代理:proxy_pass 轉發
Nginx緩存特色: 緩存穩定,運行速度與Squid相差無幾(由於都使用硬盤緩存) 對多核CPU的利用率比其餘的開源軟件好 支持高併發請求數,能同時承受更多的訪問請求
nginx有兩段緩存: 共享內存(存儲鍵和緩存對象元數據) 磁盤空間:存儲數據
Nginx緩存、Varnish、Squid對比
Squid:應用較早,支持傳統、透明、反向等功能的一款應用軟件,設置較複雜,通常配合CDN Varnish:新興軟件,設計簡單,使用內存緩存數據(快) Nginx緩存:需經過調用模塊實現緩存功能,基於硬盤緩存數據 nginx要定義緩存,須要如下配置: proxy_cache_path:不能定義在server{}上下文中 官方幫助手冊:https://docs.nginx.com/nginx/admin-guide/
實戰:nginx緩存
三臺虛擬機都要啓動: systemctl stop firewalld //關閉防火牆 setenforce 0 //關閉監控
yum install lrz* -y //安裝上傳軟件 再把nginx-1.13.5.tar ngx_cache_purge-2.3.tar pcre-8.41.tar拉入
解壓軟件包: tar xf ngx_cache_purge-2.3.tar.gz -C /opt/ tar xf pcre-8.41.tar.gz -C /opt/ tar xf nginx-1.13.5.tar.gz -C /opt/ cd /opt/nginx-1.13.5/
yum install -y zlib-devel //安裝插件 yum install -y gcc gcc-c++ make
./configure \ --prefix=/usr/local/nginx \ --user=nginx \ --group=nginx \ --with-http_stub_status_module \ --with-pcre=/opt/pcre-8.41 \ --add-module=/opt/ngx_cache_purge-2.3
make && make install
useradd -M -s /sbin/nologin nginx //建立一個程序用戶 cd
ln -s /usr/local/nginx/conf/nginx.conf /etc/ //軟連接
vi /etc/nginx.conf 修改新增如下內容: user nginx nginx; …… error_log logs/error.log info;前面的#去掉 pid的#去掉 use epoll; //新增 ,事件驅動模型 default_type application/octet-stream; #默認文件類型 charset utf-8; //新增 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; #代理請求緩衝區,會保存用戶的頭信息以供nginx進行處理 proxy_buffers 4 64k; #nginx保存單個用幾個buffer最大用多少空間 proxy_busy_buffers_size 128k; #系統很忙時候能夠申請最大的proxy_buffers proxy_temp_file_write_size 128k; #proxy緩存臨時文件的大小 #如下兩行是開啓nginx緩存功能的配置: proxy_temp_path /var/cache/nginx/cache_temp; #建立緩存的時候可能生成一些臨時文件存放的位置,自動建立 proxy_cache_path /var/cache/nginx/proxy_cache levels=1:2 keys_zone=cache_one:200m inactive=1d max_size=30g; #定義緩存存儲目錄;緩存級別,子目錄級別,表示緩存目錄的一級子目錄是1個字符,二級子目錄是2個字符;創建共享緩存,緩存數據元數據的空間,查緩存時,先今後空間查找,而後到相應目錄中查找;緩存的時間;緩存空間大小 upstream backend_server{ server 192.168.80.101:80 weight=1 max_fails=2 fail_timeout=30s; server 192.168.80.102:80 weight=1 max_fails=2 fail_timeout=30s; } 加權輪詢 location / { proxy_next_upstream http_502 http_504 error timeout invalid_header; #出現502-504或錯誤,會跳過此臺服務器訪問下一臺服務器 proxy_cache cache_one; #啓用名爲cache_one緩存 proxy_cache_valid 200 304 12h; #狀態碼,有效時間12小時,其他狀態碼10分鐘過時 proxy_cache_key $host$uri$is_args$args; #緩存key,經過惟一key來進行hash存取 proxy_set_header Host $host; #增長頭部信息,方便觀察客戶端respoce是否命中 proxy_set_header X-Forwarded-For $remote_addr; #後端節點機器獲取客戶端真實ip,$remote_addr表明客戶端的ip地址, proxy_pass http://backend_server; 請求轉向 }
ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/ //軟鏈接到$PATH環境變量中,方便系統識別 nginx -t //檢查nginx語法錯誤
mkdir -p /var/cache/nginx/cache_temp //建立緩存目錄 mkdir /var/cache/nginx/proxy_cache //建立代理目錄 nginx -t //檢查nginx語法錯誤
nginx //啓動nginx服務 netstat -anpt | grep nginx
在另外一臺虛擬機搭建一個web服務器:web1(80.101) yum install -y httpd //安裝http
vi /etc/httpd/conf/httpd.conf 把ServerName www.example.com:80 前面#刪除
echo "<h1>192.168.80.101</h1>" > /var/www/html/index.html
systemctl start httpd
在另外一臺虛擬機搭建一個web服務器:web2(80.102) yum install -y httpd //安裝http
vi /etc/httpd/conf/httpd.conf 把ServerName www.example.com:80 前面#刪除
echo "<h1>192.168.80.102</h1>" > /var/www/html/index.html
systemctl start httpd
在瀏覽器上輸入: http://192.168.80.101/
http://192.168.80.102/
http://192.168.80.100/
cd /var/cache/nginx/proxy_cache cd 8 cd 9e/ cd curl -I 192.168.80.100
vi /etc/nginx.conf 在server_name localhost;下添加 add_header X-Via $server_addr; add_header X-Cache "$upstream_cache_status from $server_addr";
nginx -t pkill -9 nginx nginx curl -I 192.168.80.100
vi /etc/nginx.conf 把如下內容添加在/404.html上面: location ~/purge(/.*) { allow 127.0.0.1; allow 192.168.80.0/24; deny all; proxy_cache_purge cache_one $host$1$is_args$args; }
nginx -t pkill -9 nginx nginx
http://192.168.80.100/purge/ //用來清除緩存