ngx_http_memcached_module 模組

範例配置
指令
     memcached_bind
     memcached_buffer_size
     memcached_connect_timeout
     memcached_gzip_flag
     memcached_next_upstream
     memcached_next_upstream_timeout
     memcached_next_upstream_tries
     memcached_pass
     memcached_read_timeout
     memcached_send_timeout
     memcached_socket_keepalive
嵌入變數

ngx_http_memcached_module 模組用於從 memcached 伺服器取得回應。金鑰設定於 $memcached_key 變數中。回應應事先透過 nginx 外部的方式放入 memcached 中。

範例配置

server {
    location / {
        set            $memcached_key "$uri?$args";
        memcached_pass host:11211;
        error_page     404 502 504 = @fallback;
    }

    location @fallback {
        proxy_pass     http://backend;
    }
}

指令

語法 memcached_bind address [transparent ] | off;
預設
上下文 http, server, location

此指令出現於 0.8.22 版本。

使連往 memcached 伺服器的外送連線,源自指定的本機 IP 位址,並帶有可選的埠 (1.11.2)。參數值可以包含變數 (1.3.12)。特殊值 off (1.3.12) 會取消從先前的配置層級繼承的 memcached_bind 指令的效果,這允許系統自動指派本機 IP 位址和埠。

transparent 參數 (1.11.0) 允許連往 memcached 伺服器的外送連線,源自非本機 IP 位址,例如,來自用戶端的實際 IP 位址。

memcached_bind $remote_addr transparent;

為了使此參數生效,通常需要以超級使用者權限執行 nginx worker 程序。在 Linux 上則不需要 (1.13.8),因為如果指定了 transparent 參數,worker 程序會從主程序繼承 CAP_NET_RAW 功能。此外,也需要設定核心路由表,以攔截來自 memcached 伺服器的網路流量。

語法 memcached_buffer_size size;
預設
memcached_buffer_size 4k|8k;
上下文 http, server, location

設定用於讀取從 memcached 伺服器接收之回應的緩衝區 size。回應在接收到時會同步傳遞給用戶端。

語法 memcached_connect_timeout time;
預設
memcached_connect_timeout 60s;
上下文 http, server, location

定義與 memcached 伺服器建立連線的逾時時間。應注意,此逾時時間通常不能超過 75 秒。

語法 memcached_gzip_flag flag;
預設
上下文 http, server, location

此指令出現於 1.3.6 版本。

啟用測試 memcached 伺服器回應中是否有 flag,如果設定了標記,則將 "Content-Encoding" 回應標頭欄位設定為 "gzip"。

語法 memcached_next_upstream error | timeout | invalid_response | not_found | off ...;
預設
memcached_next_upstream error timeout;
上下文 http, server, location

指定在哪些情況下應將請求傳遞至下一個伺服器。

error
在與伺服器建立連線、將請求傳遞至伺服器或讀取回應標頭時發生錯誤;
timeout
在與伺服器建立連線、將請求傳遞至伺服器或讀取回應標頭時發生逾時;
invalid_response
伺服器傳回空的回應或無效的回應;
not_found
在伺服器上找不到回應;
off
停用將請求傳遞至下一個伺服器。

應記住,只有在尚未將任何內容傳送至用戶端時,才有可能將請求傳遞至下一個伺服器。也就是說,如果回應傳輸過程中發生錯誤或逾時,則無法修正此問題。

此指令也定義什麼被視為與伺服器通訊的不成功嘗試errortimeoutinvalid_response 的情況永遠被視為不成功的嘗試,即使它們未在指令中指定。not_found 的情況永遠不被視為不成功的嘗試。

將請求傳遞至下一個伺服器可能會受到嘗試次數時間的限制。

語法 memcached_next_upstream_timeout time;
預設
memcached_next_upstream_timeout 0;
上下文 http, server, location

此指令出現於 1.7.5 版本。

限制請求可傳遞至下一個伺服器的時間。0 值會關閉此限制。

語法 memcached_next_upstream_tries number;
預設
memcached_next_upstream_tries 0;
上下文 http, server, location

此指令出現於 1.7.5 版本。

限制將請求傳遞至下一個伺服器的可能嘗試次數。0 值會關閉此限制。

語法 memcached_pass address;
預設
上下文 location, if in location

設定 memcached 伺服器位址。該位址可以指定為網域名稱或 IP 位址,以及一個埠。

memcached_pass localhost:11211;

或指定為 UNIX 網域 Socket 路徑。

memcached_pass unix:/tmp/memcached.socket;

如果網域名稱解析為多個位址,所有位址將以循環方式使用。此外,位址也可以指定為伺服器群組

語法 memcached_read_timeout time;
預設
memcached_read_timeout 60s;
上下文 http, server, location

定義從 memcached 伺服器讀取回應的逾時時間。逾時時間僅設定在兩個連續讀取操作之間,而不是針對整個回應的傳輸。如果 memcached 伺服器在此時間內沒有傳輸任何內容,則連線將關閉。

語法 memcached_send_timeout time;
預設
memcached_send_timeout 60s;
上下文 http, server, location

設定將請求傳輸至 memcached 伺服器的逾時時間。逾時時間僅設定在兩個連續寫入操作之間,而不是針對整個請求的傳輸。如果 memcached 伺服器在此時間內沒有收到任何內容,則連線將關閉。

語法 memcached_socket_keepalive on | off;
預設
memcached_socket_keepalive off;
上下文 http, server, location

此指令出現於 1.15.6 版本。

為連往 memcached 伺服器的外送連線設定「TCP keepalive」行為。預設情況下,作業系統的設定對 Socket 有效。如果將指令設定為值 "on",則會針對 Socket 開啟 SO_KEEPALIVE Socket 選項。

嵌入變數

$memcached_key
定義從 memcached 伺服器取得回應的金鑰。