国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統 > Linux > 正文

nginx cache靜態化+tmpfs 高性能cdn方案

2024-08-27 23:58:42
字體:
來源:轉載
供稿:網友

下面來到各位介紹一篇章nginx cache靜態化+tmpfs 高性能cdn方案,如果各位對于高性能的服務器有興趣可了解此文章.

匹配不同URL訪問不同后端

如果想通過訪問不同類別URL分配到不同的后端通過nginx實現,首先舉個例子,將需求場景進行描述:

域名為:www.xxx.com  (本機IP為192.168.12.63)

域名下有3個目錄product、cart、goods,這3個目錄分別為不同業務,那么我們打算訪問3個不同目錄下的內容時分別分配到不同的后端進行處理,如訪問www.xxx.com/product/xxx.html,那么我們預設是下面3類情況:

訪問product下的資源時分配到127.0.0.1:8081和127.0.0.1:8082

訪問cart下的資源時分配到127.0.0.1:8083和127.0.0.1:8084

訪問goods下的資源時分配到192.168.12.34:8081和192.168.12.34:8082

如果要滿足上述需求,那么我們就需要用到nginx的upstream模塊和rewrite的if模塊配合,首先我們需要配置3個后端,分別滿足3種不同業務分配,配置如下:

  1. #product業務的后端 
  2. upstream product_tomcats{ 
  3. server 127.0.0.1:8081 weight=10; 
  4. server 127.0.0.1:8082 weight=10; 
  5. --Vevb.com 
  6. #cart 業務的后端 
  7. upstream cart_tomcats{ 
  8. server 127.0.0.1:8083 weight=10; 
  9. server 127.0.0.1:8084 weight=10; 
  10. #goods 業務的后端 
  11. upstream goods_tomcats{ 
  12. server 192.168.12.34:8081 weight=10; 
  13. server 192.168.12.34:8082 weight=10; 

配置好upstream后,我們配置匹配不同目錄訪問不同后端的內容,通過if語法來實現根據不同請求的url進程正則匹配,然后滿足條件的分配到指定的后端,if語句用來實現判斷不同URL分配后端配置的功能,具體配置如下:

:$request變量是獲取 http method(GET POST)瀏覽器訪問URL HTTP協議,代碼如下:

  1. GET /goods/2222.html HTTP/1.1 
  2. location / { 
  3. proxy_cache cache_one; 
  4. proxy_cache_key "$host:$server_port$request_uri"; 
  5. proxy_cache_valid  200 304 20m; 
  6. rewrite /product/([0-9]+)\.html /index.jsp?id=$1 last; 
  7. rewrite /cart/([0-9]+)\.html /index1.jsp?id=$1 last; 
  8. rewrite /goods/([0-9]+)\.html /index2.jsp?id=$1 last; 
  9. #判斷是否匹配product通過正則,如果匹配將請求轉發到product_tomcats集群上 
  10. if ($request ~* .*/product/(.*)){ 
  11. proxy_pass http://product_tomcats; 
  12. #判斷是否匹配cart通過正則,如果匹配將請求轉發到cart _tomcats集群上 
  13. if ($request ~* .*/cart/(.*)){ 
  14. proxy_pass http://cart_tomcats; 
  15. #判斷是否匹配goods通過正則,如果匹配將請求轉發到goods _tomcats集群上 
  16. if ($request ~* .*/goods/(.*)){ 
  17. proxy_pass http://goods_tomcats; 
  18. } --Vevb.com 
  19. proxy_set_header Host $host; 
  20. proxy_set_header X-Forwarded-For $remote_addr; 
  21. add_header X-Cache '$upstream_cache_status from $host'; 

這樣通過upstream配置不同的后端集群組,然后通過if語法的正則匹配URL來分配到不同的集群組上來實現不同種類的URL 匹配訪問不同后端處理.

Nginx cache 掛載內存文件系統,我們采用tmpfs內存文件系統,來做緩存文件系統,這樣可以讓系統不經過I/O提高效率.

掛載tmpfs:mount tmpfs自定義名稱 掛載位置 -t tmpfs -o size=分配空間大小.

例,代碼如下:

  1. mkdir /tmpfs 
  2. mount my_tmpfs /tmpfs -t tmpfs -o size=500m 

動態調整tmpfs空間大小:

mount 掛載位置 -o remount,size=重新分配空間大小

例:mount /tmpfs -o remount,size=1024m

卸載已掛載的tmpfs:umount /tmpfs

配置nginx cache,Nginx cache狀態,代碼如下:

MISS

EXPIRED - expired,請求被傳送到后端。

UPDATING - expired,由于proxy/fastcgi_cache_use_stale正在更新,將使用舊的應答.

STALE - expired,由于proxy/fastcgi_cache_use_stale,后端將得到過期的應答.

HIT:proxy_cache_key 可采用2種配法,根據需求來定義:

1.通過瀏覽器獲取的URL做KEY

域名:端口 瀏覽器完整地址(包括動態參數,如:www.xxx.com:80/goods/1.html).

proxy_cache_key "$host:$server_port$request_uri";

1.通過真實的URL地址做KEY

域名:端口 真實請求地址(不是rewrite后的)? 參數

(如www.xxx.com:80/index.jsp?id=111)

proxy_cache_key "$host:$server_port$uri$is_args$args";

建議采用第一種.

下面是對緩存內容進行的配置,代碼如下:

  1. #日志配置 
  2. # $upstream_addr 請求后端的地址 
  3. # $upstream_status 請求后端響應狀態 
  4. # $upstream_cache_status 緩存狀態 
  5. log_format main  '$remote_addr - $remote_user [$time_local] ' 
  6. "$request" $status $bytes_sent' 
  7. '"$http_referer""$http_user_agent"' 
  8. '"$gzip_ratio"' 
  9. '"addr:$upstream_addr-status:$upstream_status- cachestatus:$upstream_cache_status"'
  10. #緩沖代理請求,proxy_temp_path需要和proxy_cache_path在一個分區下 
  11. proxy_temp_path /tmpfs_cache/proxy_temp_path; 
  12. #緩存地址為/tmpfs_cache/proxy_cache_path,緩存目錄級別分為2級, 
  13. #cache名稱為cache_one,內存緩存空間大小為500M,自動清除超過1天未訪問的緩存數據,緩存硬盤空間為15G 
  14. proxy_cache_path /tmpfs_cache/proxy_cache_path levels=1:2 keys_zone=cache_one:500m inactive=1d max_size=15g; 
  15. server { 
  16. listen 80; 
  17. server_name  www.xxx.com; 
  18. charset utf-8; 
  19. access_log logs/cache_test.access.log main; 
  20. error_log logs/cache_test.error.log warn; 
  21. autoindex on
  22. index index.html; 
  23. location / { 
  24. #使用緩存cache_one上面proxy_cache_path中定義的key_zone=cache_one; 
  25. proxy_cache  cache_one; 
  26. #緩存key拼接規則:域名:端口 獲取瀏覽器請求的URL完整地址 
  27. proxy_cache_key "$host:$server_port$request_uri"
  28. #對HTTP狀態碼200和304的緩存20分鐘 
  29. proxy_cache_valid  200 304 20m; 
  30. #獲取proxy的真實域名 
  31. proxy_set_header Host $host; 
  32. proxy_set_header X-Forwarded-For $remote_addr; 
  33. #設置瀏覽器中的header可查看該頁面的緩存狀態 
  34. add_header X-Cache '$upstream_cache_status from $host'

proxy cache配置詳細內容:

proxy_cache_key

語法:proxy_cache_key line;

默認值:$scheme$proxy_host$request_uri;

使用字段:http,server,location

指令指定了包含在緩存中的緩存關鍵字.

proxy_cache_key "$host$request_uri$cookie_user";

注意默認情況下服務器的主機名并沒有包含到緩存關鍵字中,如果你為你的站點在不同的location中使用二級域,你可能需要在緩存關鍵字中包換主機名:

proxy_cache_key "$scheme$host$request_uri";

proxy_cache_methods

語法:proxy_cache_methods [GET HEAD POST];

默認值:proxy_cache_methods GET HEAD;

使用字段:http, server, location

GET/HEAD用來裝飾語句,即你無法禁用GET/HEAD即使你只使用下列語句設置:

  1. proxy_cache_methods POST; 
  2.  
  3. proxy_cache_min_uses  

語法:proxy_cache_min_uses the_number;

默認值:proxy_cache_min_uses 1;

使用字段:http, server, location

多少次請求后應答將被緩存,默認1.

proxy_cache_path

語法:proxy_cache_path path [levels=number] keys_zone=zone_name:zone_size [inactive=time] [max_size=size];

默認值:None

使用字段:http

指令指定緩存的路徑和一些其他參數,緩存的數據存儲在文件中,并且使用代理url的哈希值作為關鍵字與文件名,levels參數指定緩存的子目錄數,例如:

proxy_cache_path  /data/nginx/cache  levels=1:2   keys_zone=one:10m;

文件名類似于:/data/nginx/cache/c/29/b7f54b2df7773722d382f4809d65029c

可以使用任意的1位或2位數字作為目錄結構,如 X,X:X,或X:X:X e.g.: “2”,“2:2”, “1:1:2”,但是最多只能是三級目錄,所有活動的key和元數據存儲在共享的內存池中,這個區域用keys_zone參數指定,注意每一個定義的內存池必須是不重復的路徑,例如:

  1. proxy_cache_path  /data/nginx/cache/one    levels=1      keys_zone=one:10m; 
  2. proxy_cache_path  /data/nginx/cache/two    levels=2:2    keys_zone=two:100m; --Vevb.com 
  3. proxy_cache_path  /data/nginx/cache/three  levels=1:1:2  keys_zone=three:1000m; 

如果在inactive參數指定的時間內緩存的數據沒有被請求則被刪除,默認inactive為10分鐘,一個名為cache manager的進程控制磁盤的緩存大小,它被用來刪除不活動的緩存和控制緩存大小,這些都在max_size參數中定義,當目前緩存的值超出max_size指定的值之后,超過其大小后最少使用數據(LRU替換算法)將被刪除.

內存池的大小按照緩存頁面數的比例進行設置,一個頁面(文件)的元數據大小按照操作系統來定,FreeBSD/i386下為64字節,FreeBSD/amd64下為128字節。

proxy_cache_path和proxy_temp_path應該使用在相同的文件系統上。

proxy_cache_valid

語法:proxy_cache_valid reply_code [reply_code …] time;

默認值:None

使用字段:http, server, location

為不同的應答設置不同的緩存時間,例如:

  1. proxy_cache_valid  200 302  10m; 
  2. proxy_cache_valid  404  1m; 

為應答代碼為200和302的設置緩存時間為10分鐘,404代碼緩存1分鐘,如果只定義時間:

proxy_cache_valid 5m;

那么只對代碼為200, 301和302的應答進行緩存,同樣可以使用any參數任何應答.

  1. proxy_cache_valid  200 302 10m; 
  2. proxy_cache_valid  301 1h; 
  3. proxy_cache_valid  any 1m;

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 临汾市| 两当县| 勃利县| 永丰县| 安新县| 汉源县| 鄂托克旗| 顺平县| 安义县| 广元市| 滦平县| 湖北省| 遂平县| 辛集市| 原平市| 太原市| 华宁县| 万州区| 甘谷县| 雅安市| 丹阳市| 高清| 梅州市| 册亨县| 五华县| 报价| 福建省| 平塘县| 深圳市| 和田县| 佛教| 武安市| 尼勒克县| 大余县| 鄂尔多斯市| 荣昌县| 昭苏县| 定远县| 武威市| 晴隆县| 墨竹工卡县|