NGINX應用性能優化指南(第三部分):內容緩存、轉發和微緩存

RacPrather 8年前發布 | 11K 次閱讀 Nginx Web服務器

【編者的話】本文是“NGINX應用性能優化指南”系列文章的第三篇,主要介紹了如何從內容緩存、轉發和微緩存方面實現NGINX應用性能優化。

正文

NGINX反向代理非常適合強力I/O,作為一個不錯的內容緩存,將數據移動到距離客戶端或邊緣節點較近的地方。這讓你可以完全解放你的服務器,讓它們專注于處理業務邏輯和動態內容生成。

在理想情況下,靜態文件由位于源服務器反向代理上的本地快速存儲(SSD)提供,并進一步通過CDN緩存。針對內容緩存和繁重工作設置NGINX反向代理有幾種通常互補的方式。它們是:

  1. 動態內容微緩存;
  2. 靜態內容緩存;
  3. 通過本地存儲和/或應用服務器重定向實現內容轉發;
  4. 后臺存儲陣列轉發;
  5. 帶響應緩存的存儲服務轉發。

NGINX應用性能優化指南(第三部分):內容緩存、轉發和微緩存

微緩存的思想是,動態、非個性化響應可以緩存非常短的時間(比如1秒)。事實上,有人會說,根據預期工作流的不同,個性化響應也可以緩存一小段時間。

 

雖然它也許沒有提供直觀的意義,但微緩存讓你的服務在面臨過量需求或攻擊時可以存活更長的時間。它可以(有點人為地)提高基準測試數值。

相關閱讀:NGINX微緩存的好處

在處理靜態內容的可管理目錄時,最簡單的方法可能是讓反向代理在其文件系統上存儲大量公共資源,作為一個簡單的WebRoot,并直接提供它們。公共資源可以使用一個名為try_files(或者alias)的普通location 塊提供。緩存不命中的話,可以像平常一樣發送給后臺服務器,而響應可以緩存:

location / {
  alias /home/nginx/www-sparse;
  try_files $uri @backend;
}
location @backend {
    proxy_cache myCache;
    proxy_cache_valid 2h;
    proxy_pass http://backend;
}

當資源訪問需要身份驗證或其他業務邏輯時,應用服務器可以使用HTTP頭X-Accel-Redirect生成一個重定向響應,請求反向代理向客戶端提供資源。

可以在反向代理上使用internal 指令限制訪問這些內部產生的請求。NGINX確保客戶端請求永遠不會匹配被標記為internallocation

location /secret {
  internal;
  alias /home/nginx/group/data;
  try_files $uri =404;
}

后臺存儲陣列也可以使用proxy_pass指令尋址。如果你使用存儲服務代替,那么你可能還會想緩存響應,為了將數據移動到距離客戶端或邊緣節點較近的地方。

location /external {
    proxy_cache MY_CACHE;
    proxy_cache_valid 1h;
    proxy_pass http://192.168.10.201;
}

不要忘記更新所需的HTTP頭,并在XFF頭(或者新的RFC 7239 Forwarded頭)中添加代理的IP地址:

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

當代理HTTPS客戶端連接到達HTTP后臺時,應用服務器必須為恰當的模式生成內容URL。你可以使用X-Forwarded-Proto頭傳播這個模式。部分微軟應用程序會查找Front-End-Https作為替代。

map $scheme $front_end_https {
    https on;
    default off;
}
proxy_set_header X-Forwarded-Proto $scheme;
    add_header Front-End-Https $front_end_https;

例如,在生成鏈接時,WordPress會使用PHP的全局變量$_SERVER控制HTTP(S)模式。你可以將下面的代碼片段加到WordPress后臺的根目錄下(例如,在wp-config.php末尾),以便使用X-Forwarded-Proto頭。

<?php
  if ($_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https')
        $_SERVER['HTTPS']='on';
?>

指令proxy_cache_key決定NGINX如何唯一標識一個響應正文。通過預先在參數名上加上前綴“$arg_”,你可以使用NGINX變量顯式引用緩存鍵中的查詢參數。舉例來說,考慮下這個URL:http: //www.example.com?abc=1&xyz=2。NGINX將提供$arg_abc$arg_xyz供NGINX配置使用。

來源:InfoQ

 本文由用戶 RacPrather 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!