1. 程式人生 > >linux-nginx-2

linux-nginx-2

ron ali 版本 ssl協議 test 監聽 服務端 站點 combined

****一.Nginx配置文件

  1. nginx配置文件:/etc/nginx/nginx.conf /etc/nginx/conf.d/ /etc/nginx/default.d/
    配置文件結構
    nginx配置文件的結構:
    main(全局配置段)
    events {...}
    http {
    ...
    server {
    location ... {...}
    location ... {...}
    ...
    }
    server {
    ...
    }
    }

    2、配置參數需要以分號結尾,語法格式:
    參數名 值1 [值2 ...];
    3、配置文件中還可使用變量:
    模塊內置變量
    用戶自定義變量:set var_name value
    4、配置文件檢查:nginx -t
    5、重載配置文件:nginx -s reload

    ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
    二、nginx的基本核心配置(main段、events{}段)
    1、正常運行的必備配置:
    ①user username [groupname]; #指定運行worker進程的用戶和組
    ②pid /path/to/pidfile_name; #指定nginx的pid文件
    ③worker_rlimit_nofile NUM;
    worker進程所能夠打開的最大文件句柄數。該值不能小於worker_connections×worker_processes,如果nginx工作為反向代理服務器,則該值不能小於worker_connections×worker_processes×2,因為此時一個請求需要維持兩個套接字文件。

    ④worker_rlimit_sigpending NUM; 設定每個用戶能夠發往worker進程的信號的數量;
    2、優化性能相關的配置:
    ①worker_processes num; worker進程的個數;通常其數值應該為CPU的核心數減1;默認為auto,系統自動識別設定
    ②worker_cpu_affinity cpumask ...;用於定義worker進程和哪顆CPU有”親和性”,worker進程就會只在指定的CPU上運行了。CPU使用CPU掩碼指定2。也可在CPU掩碼前加入”auto”令其自動在指定CPU設置親和性
    例如:
    worker_processes 4;
    worker_cpu_affinity 0001 0010 0100 1000;
    表示將4個worker進程分別綁定在CPU0,CPU1,CPU3 CPU4上
    ③ssl_engine device; #在存在ssl硬件加速器的服務器上,指定所使用的ssl硬件加速設備;
    ④timer_resolution t; #每次內核事件調用返回時,都會使用gettimeofday()來更新nginx緩存時鐘;timer_resolution用於定義每隔多久才會由gettimeofday()更新一次緩存時鐘;x86-64系統上,gettimeofday()代價已經很小,可以忽略此配置;
    ⑤worker_priority nice; 設置worker進程的nice值以調整其優先級,默認值0。這個指令的參數範圍也就是nice值範圍(-20至19)
    技術分享圖片

events段

默認配置:

events {
worker_connections 1024; # 定義每個worker進程最大並發連接數
}
①accept_mutex [on|off] #是否打開nginx的負載均衡鎖;此鎖能夠讓多個worker進程輪流地、序列化地與新的客戶端建立連接;而通常當一個worker進程的負載達到其上限的7/8,master就盡可能不再將請求調度此worker;
②lock_file /path/to/lock_file;如果多個worker進程負載均衡,需要鎖文件。該選項用於指定鎖文件路徑。編譯安裝時也可通過./configure的選項指定
③accept_mutex_delay #ms; #accept鎖模式中,一個worker進程為取得accept鎖的等待時長;如果某worker進程在某次試圖取得鎖時失敗了,至少要等待#ms才能再一次請求鎖;
④multi_accept on|off; #是否允許一次性地響應多個用戶請求;默認為off;
⑤use [epoll|rtsig|select|poll]; #定義使用的事件模型,建議讓nginx自動選擇;
⑥worker_connections #; #每個worker進程能夠並發響應的最大請求數;
4、用於調試、定位問題: 只調試nginx時使用
①daemon on|off; #是否讓ningx運行於後臺;默認為on,調試時可以設置為off,使得所有信息直接輸出至控制臺;
②master_process on|off #是否以master/worker模式運行nginx;默認為on;調試時可設置off以方便追蹤;
③error_log /path/to/error_log level; #錯誤日誌文件及其級別;默認為error級別;調試時可以使用debug級別,但要求在編譯時必須使用--with-debug啟用debug功能;

     +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
     web服務相關配置

http段用於定義nginx作為web服務的配置。

http段結構:

http{
……

server{
    【server1配置】
}

server{
    【server2配置】
}

……

server就相當於httpd中的虛擬主機。不同之處是nginx沒有中心主機,即便只有一個站點,也要使用一個server段定義。
在server段外定義的配置,對所有server生效。 非虛擬主機的配置或公共配置,需要定義在server之外,http之內。
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
虛擬主機相關的配置
⑴server {...}
定義一個虛擬主機;nginx支持使用基於主機名或IP的虛擬主機;
listen IP [:PORT] [OPTIONS] ;指定監聽的地址、端口
root 根目錄路徑;指定頁面文件根目錄,如果使用相對路徑,則相對的是編譯安裝目錄(編譯時–prefix指定的路徑)。類似於httpd中的DocumentRoot,但不盡相同,root在location段中也常使用。定義root後,各指令所指定的相對路徑,就是相對於root了
server_name :指定虛擬主機名。相當於httpd虛擬主機段中的ServerName,可以跟多個主機名,名稱中可以使用通配符和正則表達式(通常以~開頭);當nginx收到一個請求時,會取出其首部的server的值,而後跟眾server_name進行比較;比較方式
①先做精確匹配,如 wwb1.lishuai.com
②左側通配符匹配,如 .lishuai.com
③右側通配符匹配,如 www.

④正則表達式匹配,如 ~^..lishuai.com$
如果客戶端在瀏覽器鍵入的主機名可以被上述方式中的多種匹配到,則優先級是:精確主機名–>左側使用通配–>右側使用通配–>正則表達式匹配
——————————————————————————————————————————————————————
location [ = | ~ | ~
| ^~ ] uri { ... } #location只能放在server和location中,location可出現多次
location @name { ... }
功能:允許根據用戶請求的URI來匹配指定的各location以進行訪問配置;匹配到時,將被location塊中的配置所處理
使用範圍:server段、location段
匹配URI的方式,按優先級依次為:
=PATH 精確匹配路徑
^~PATH 使用正則表達式匹配URI的前半段
~PATH 使用正則表達式匹配URI,區分大小寫
~*PATH 使用正則表達式匹配URI,不區分大小寫
PATH 直接使用PATH匹配,表示在PATH路徑下的資源
即優先級是先匹配小範圍,再匹配大範圍。
官方文檔的示例:

location = / { # 僅當URI為"/"時,使用A配置
[ configuration A ]
}

location / { # URI為"/"下包含的路徑時,使用B配置
[ configuration B ]
}

location /documents/ { # URI為"/documents/"下包含的路徑時,使用C配置
[ configuration C ]
}

location ^~ /images/ { # URI靠前部分為"/images/",使用D配置
[ configuration D ]
}

location ~* .(gif|jpg|jpeg)$ { # URI結尾是gif、jpg或jpeg時,使用E配置
[ configuration E ]
}
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++====++++
alias定義路徑別名

指令alias,僅能定義在location段中,用於把location指定的URI定義別名。

比如:

location /test/ {
alias /lishuai/txt/;
}
表示把uri中的test替換為/lishuai/txt/
比如我們本來訪問的是http://192.168.2.18/test/index.html 此時就被替換為http://192.168.2.18/lishuai/txt/index.html
區別root path和alias path:
①location /i/ {
root /data/images;
}
“/i/top.gif”將由/data/images/i/top.gif文件來響應
②location /i/ {
alias /data/images/;
}
“/i/top.gif”將由/data/images/top.gif文件來響應

技術分享圖片
技術分享圖片
技術分享圖片

index定義主頁

指令index來自模塊ngx_\http_index_module。用於定義主頁。

使用範圍:http段、server段、location段。定義在不同的段有不同的生效範圍。默認值是index.html

error_page定義錯誤頁面

指令error_page,用於自定義錯誤頁面。

使用格式:error_page code ... [=[response]] uri。表示根據響應碼code(可指定多個),返回給客戶端uri指定的頁面。

使用範圍:http段、server段、location段、location段中的if語句
技術分享圖片
error_page的實質是把對指定URI的錯誤請求,重定向至一個自定義頁面。相當於客戶端重新訪問了服務端(只是相當於。其實這個過程客戶端並不參與,由nginx自動進行),只不過請求的資源被重定向為了自定義的錯誤頁面。
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
網絡連接相關的設置:
⑴keepalive_timeout time; #保持連接的超時時長;默認為75秒
⑵keepalive_requests n; #在一次長連接上允許承載的最大請求數
⑶keepalive_disable [msie6 | safari | none ]; #對指定的瀏覽器禁止使用長連接
⑷tcp_nodelay on|off; #對keepalive連接是否使用TCP_NODELAY選項
⑸client_header_timeout time; #讀取http請求首部的超時時長
⑹client_body_timeout time; #讀取http請求包體的超時時長
⑺send_timeout time; #發送響應的超時時長

    **對客戶端請求進行限制:**
        1、limit_except METHOD {...}
            指定對範圍之外的其它方法的訪問控制;

            limit_except GET {
                allow 192.168.2.0/24;
                deny all;
            }

        2、client_body_max_size SIZE;
            限制請求報文中body部分的上限;通過檢測請求報文首部中的"Content_Length"來判定;

        3、limit_rate speed; 
            限制客戶端每秒種傳輸的字節數,默認為0,表示無限制;

            4、limit_rate_after time;
    nginx向客戶端發送響應報文時,如果時長超出了此處指定的時長,則後續的發送過程開始限速;

**          ◆文件操作的優化:**
 ⑴sendfile on|off;   #是否啟用sendfile功能;
 ⑵aio on|off;   #是否啟用aio功能;
 ⑶open_file_cache max=N [inactive=time]|off;   #是否打開文件緩存功能;
     max: 緩存條目的最大值;當滿了以後將根據LRU算法進行置換;
     inactive: 某緩存條目在指定時長時沒有被訪問過時,將自動被刪除;默認為60s
     緩存的信息包括:
       文件句柄、文件大小和上次修改時間;
       已經打開的目錄結構;
       沒有找到或沒有訪問權限的信息;
 ⑷open_file_cache_errors on|off;   #是否緩存文件找不到或沒有權限訪問等相關信息;
 ⑸open_file_cache_valid time;   #多長時間檢查一次緩存中的條目是否超出非活動時長,默認為60s
 ⑹open_file_cache_min_use #;   #在inactive指定的時長內被訪問超此處指定的次數地,才不會被刪除;

◆對客戶端請求的特殊處理
⑴ignore_invalid_headers on|off;
是否忽略不合法的http首部;默認為on,off意味著請求首部中出現不合規的首部將拒絕響應;只能用於server和http
⑵log_not_found on|off; #是否將文件找不到的信息也記錄進錯誤日誌中;
⑶resolver address; #指定nginx使用的dns服務器地址;
⑷resover_timeout time; #指定DNS解析超時時長,默認為30s;
⑸server_tokens on|off; #是否在錯誤頁面中顯示nginx的版本號;

◆內存及磁盤資源分配:
⑴client_body_in_file_only on|clean|off;
HTTP的包體是否存儲在磁盤文件中;非off表示存儲,即使包體大小為0也會創建一個磁盤文件;on表示請求結束後包體文件不會被刪除,clean表示會被刪除;
⑵client_body_in_single_buffer on|off;
HTTP的包體是否存儲在內存buffer當中;默認為off;
⑶cleint_body_buffer_size size;
nginx接收HTTP包體的內存緩沖區大小;若包體超出該值,則會寫入磁盤文件中
⑷client_body_temp_path dir-path [level1 [level2 [level3]]];
HTTP包體存放的臨時目錄;
例如:client_body_temp_path /var/tmp/client/ 1 2;
後面的數字表示十六制的位數;此語句表示在/var/tmp/client目錄下創建16個一級子目錄,然後在每個一級子目錄下創建16*16個二級子目錄
⑸client_header_buffer_size size;
正常情況下接收用戶請求的http報文header部分時分配的buffer大小;默認為1k
⑹large_client_header_buffers number size;
存儲超大Http請求首部的內存buffer大小及個數;
⑺connection_pool_size size;
nginx對於每個建立成功的tcp連接都會預先分配一個內存池,此處即用於設定此內存池的初始大小;默認為256
⑻request_pool_size size;
nginx在處理每個http請求時會預先分配一個內存池,此處即用於設定此內存池的初始大小;默認為4k

◆http核心模塊的內置變量:
$uri: 當前請求的uri,不帶參數;
$request_uri: 請求的uri,帶完整參數;
$host: http請求報文中host首部;如果請求中沒有host首部,則以處理此請求的虛擬主機的主機名代替;
$hostname: nginx服務運行在的主機的主機名;
$remote_addr: 客戶端IP
$remote_port: 客戶端Port
$remote_user: 使用用戶認證時客戶端用戶輸入的用戶名;
$request_filename: 用戶請求中的URI經過本地root或alias轉換後映射的本地的文件路徑;
$request_method: 請求方法
$server_addr: 服務器地址
$server_name: 服務器名稱
$server_port: 服務器端口
$server_protocol: 服務器向客戶端發送響應時的協議,如http/1.1, http/1.0
$scheme: 在請求中使用scheme, 如https://www.lishuai.com/中的https;
$http_HEADER: 匹配請求報文中指定的HEADER,$http_host匹配請求報文中的host首部
$sent_http_HEADER: 匹配響應報文中指定的HEADER,例如$http_content_type匹配響應報文中的content-type首部;
$document_root:當前請求映射到的root配置;


nginx作為web server的其它功能
1、訪問控制(http_access_module)
allow address | CIDR | unix: | all;
deny address | CIDR | unix: | all;
缺省是allow all
示例:
location / {
deny 192.168.2.29;
allow 192.168.2.0/24;
}
我們允許192.168.2.0網段的所有主機訪問,拒絕192.168.29這臺主機訪問
技術分享圖片


2、用戶認證(http_auth_basic_module)
auth_basic string | off;
auth_basic_user_file file;
示例:
技術分享圖片
技術分享圖片


3、當無默認主頁時顯示文件列表,常用於建立下載站點(http_autoindex_module)
autoindex on | off;



防盜鏈

指令valid_referers,來自模塊ngx_http_referer_module。
用於指定請求報文中的referer首部的哪些值是合法的。從而結合內置變量invalid_referer,對從非法地址跳轉而來的請求予以拒絕等操作。
使用範圍:server段、location段
⑴定義合規的引用
valid_referers none | blocked | server_names | string ...;
說明:
none:缺少“Referer”請求頭;
blocked:“Referer” 請求頭存在,但是它的值被防火墻或者代理服務器刪除; 這些值都不以“http://” 或者 “https://”字符串作為開頭;
server_names:“Referer” 請求頭包含某個虛擬主機名;
string可以是:
任意字符串:定義一個服務器名和可選的URI前綴。服務器名允許在開頭或結尾使用“*”符號。 當nginx檢查時,“Referer”請求頭裏的服務器端口將被忽略。
正則表達式:必須以“~”符號作為開頭。 需要註意的是表達式會從“http://”或者“https://”之後的文本開始匹配
示例

       valid_referers none blocked server_names      # 定義請求報文referer首部不存在、為空或符合下面列出的兩種主機名,為合法
           *.example.com example.* www.example.org/galleries/     # 字符串匹配主機名
           ~\.google\.;                                           # 正則表達式匹配主機名

                if ($invalid_referer) {                            # 定義合法referer首部之後,可使用內置變量invalid_referer作為條件,從而對非法referer首部的請求報文拒絕處理,比如返回403或重定向至另一位置
                return 403;拒絕不合規的引用
        }



日誌相關

ngx_http_log_module引入指令access_log、log_format、open_log_file_cache。

1、 access_log

使用範圍:http段、server段、location段、location段中的if語句、limit_except指令中

使用格式:


access_log path [format [buffer=size] [gzip[=level]] [flush=time] [if=condition]];
access_log off;      

各參數意義:

參數 意義
path 指定訪問存放位置。不同server當然應該存放在不同位置,否則難以查看
format 指定日誌格式
buffer=size 指定緩沖區大小。當有大量並發時,來不及把日誌內容寫入磁盤,則先寫在緩沖區,周期刷寫至磁盤
flush=time 指定緩沖區內容刷寫至磁盤的周期時間
gzip[=level] 使用壓縮並指定級別
syslog:server= 指定日誌存放在syslog服務器。如syslog:server=192.168.1.1等。如需使用syslog,該參數需放在最前端
默認值:

access_log logs/access.log combined             # 默認,路徑定義在編譯安裝時--prefix指定的路徑下的logs/access.log下,格式為combined(這個格式定義同httpd的`)

log_format

使用格式:log_format name string...,定義日誌格式名name,並為此格式名定義各字段。
類似httpd中的定義方式,只不過httpd中用的是各種宏,這裏用的是內置變量。

使用範圍:http段

各內置變量基本見名知意,比如combined格式的默認定義:

log_format combined ‘$remote_addr - $remote_user [$time_local] ‘
                    ‘"$request" $status $body_bytes_sent ‘
                    ‘"$http_referer" "$http_user_agent"‘;

各內置變量具體含義可在官網查詢,不贅述了。

open_log_file_cache

使用格式:

open_log_file_cache max=N [inactive=time] [min_uses=N] [valid=time];
open_log_file_cache off;

指定是否緩存日誌文件的文件描述符,提高打開日誌文件的效率以更新日誌文件。默認關閉。

參數意義:

參數 意義
max=N 指定最大緩存條目數。數量達到最大時,使用最近最少使用算法(LRU)清理多余條目
inactive=time 指定非活動時長。默認10秒
min_uses=N 指定在非活動時長內,至少要被訪問多少次,否則就視為非活動緩存(需清理)
valid=time 指定有效性檢查時間,即多久檢查一次緩存的文件描述符對應的文件是否還存在或是否改名。默認60秒

error_log

該指令在nginx核心模塊Core functionality,上述訪問日誌的各指令在ngx_http_log_module模塊。

寫在這裏是因為它們都是記錄日誌。error_log用於定義錯誤日誌。

使用範圍:main段、http段、mail段、stream段、server段、location段

使用格式:

error_log file | [syslog] | [stderr] | [memory] level # file表示錯誤日至記錄在哪個文件;

也可記錄在指定的syslog服務器

                                                            # 也可輸出至標準錯誤輸出(stderr)
                                                            # 也可記錄在內存中(memory)。性能好但不會永久保存,一般調試時使用

日誌級別嚴重程度由低到高依次為:debug, info, notice, warn, error, crit, alert, emerg
每個級別輸出的信息是當前級別以及比它更嚴重級別的信息。不過如要使用debug級別,編譯時要指定–with-debug選項才可。

默認配置:

error_log logs/error.log error




5、URL重寫(http_rewrite_module)
⑴rewrite regex replacement [flag];
如果URI能匹配指定的正則表達式,此URI將被replacement參數定義的字符串改寫。如果replacement的字符串以“http://”或“https://”開頭,nginx將結束執行過程,並返回給客戶端一個重定向。
flag參數可以是:
①last:一旦被當前規則匹配並重寫後立即停止檢查後續的其它rewrite的規則,而後通過重寫後的規則重新發起請求
②break:一旦被當前規則匹配並重寫後立即停止檢查後續的其它rewrite的規則,而後繼續由nginx進行後續操作;
③redirect:返回302臨時重定向,瀏覽器會顯示跳轉後的URL地址
④permanent:返回301永久重定向,瀏覽器會顯示跳轉後的URL地址。
註意:
last和break只是實現URL重寫,瀏覽器地址欄中的URL地址不變,這與重定向不同。
一般將rewrite寫在location中時都使用break標誌,或者將rewrite寫在if上下文中

     如果replacement字符串包括新的請求參數,以往的請求參數會添加到新參數後面。如果不希望這樣,在replacement字符串末尾加一個問號“?”,就可以避免,例如:
       rewrite ^/users/(.*)$ /show?user=$1? last;
     如果正則表達式中包含字符“}”或者“;”,整個表達式應該被包含在單引號或雙引號的引用中,因這兩個符號在nginx配置文件中有特殊意義。 
    示例:
      location / {
        root /www/b.org;
        rewrite ^/images/(.*)$ /imgs/$1 last; 
        rewirte ^/imgs/(.*)$ /images/$1 last;
      }
    上述用法會造成nginx重復10輪循環,然後返回錯誤500,應將last換成break

rewrite_log on|off;
是否把重寫過程記錄在錯誤日誌中,默認為off;若開啟,默認為notice級別;

替換為的路徑是”http://……”、”https://……”

server {
        listen 80;
        server_name www.test.com;
        root /var/www;

        location /test1.html {
                rewrite /test1.html http://192.168.0.106/test2.html;
        }
}



if

if指令用於根據指定條件是否滿足,執行相關配置。

使用格式:if (condition) { ... }

使用範圍:server段、location段

常用條件

條件 意義
變量名8 變量值為空或0時,表示“假”
=或!= 比較兩變量相等或不等
~或!~ 正則表達式匹配或不匹配,區分大小寫。如有“}”、“;”等字符,則需使用雙引號或單引號引起來
~或!~ 同上,只是不區分大小寫
-f或!-f 一個文件存在或不存在
-d或!-d 一個目錄存在或不存在
-e或!-e 一個文件、目錄、鏈接文件存在或不存在
-x或!-x 一個文件是否可執行
官方文檔部分示例:

if ($request_method = POST) {                  # 請求方法是POST時,返回405
    return 405;
}

if ($slow) {                                   # 內置變量slow為真時,限速10k
    limit_rate 10k;
}

if ($invalid_referer) {                            # 內置變量invalid_referer為真(即referer請求首部非法),返回403
    return 403;
}
   if (condition) { ... }
    示例:
     if ($http_user_agent ~ MSIE) {
             rewrite ^(.*)$ /msie/$1 break;
          }
          if ($invalid_referer) {
             return 403;
          }


return

指令return表示停止當前處理,直接返回客戶端。

使用格式:

return code [text]; # 返回指定狀態碼和原因短語(即狀態碼解釋)
return code URL; # 返回指定狀態碼和一個URL。所以這個狀態碼一般指定為301、302等
return URL; # 直接返回一個URL,類似於重定向了

使用範圍:server段、location段、if語句


6、查看nginx基本狀態信息(http_stub_status_module,非標準模塊,需在編譯安裝nginx時指定)
location /basic_status {
stub_status on;
}
技術分享圖片
內容意義:
1、Active connections,活動狀態的連接數。

活動狀態包括:已經建立連接等待發送響應報文、服務端正在加載資源、正在發送響應報文等
活動狀態連接數至少有1個,因為在訪問status頁面的一刻,訪問status頁面的連接就是處於活動狀態
2、第三行的3數字分別為:服務端已經接受過的請求總數、已經處理完成的請求總數、客戶端發來的請求總數。

3個數字統計的都是“已經發生過的”連接信息
第3個數字往往是最多的,因為它包含了客戶端發來的所有請求數,包括服務器接受、處理的請求數,也包括未接受、或接受後拒絕處理的請求數(比如訪問控制、請求方法限制等)
3、最後3數字分別為:reading為服務端正在讀取請求報文首部的連接數;writing為服務端正在發送響應報文的連接數;waiting為服務端正在等待客戶端發出請求的連接數(往往是長連接時間還沒到,等待客戶端下一個請求)。

3個數字統計的都是“正在發生的”連接信息。所以它們之和應等於Active connections




作為https服務端

同httpd配置https服務端類似,只是指令不同。單IP主機也是只能配置一個https服務端。
ngx_http_ssl_module模塊也是不會默認裝載,編譯時需指定”–with-http_ssl_module”。

常用指令:

指令 意義
ssl on|off 指定是否啟用ssl。類似httpd中的”ssl engine on|off”
ssl_certificate FILE 指定當前server使用的證書文件
ssl_certificate_key FILE 指定當前server使用的私鑰文件
ssl_protocols 指定使用的ssl協議版本,一般使用默認即可
ssl_session_cache 指定是否啟用ssl會話緩存。由於ssl會話比較消耗資源,所以可使用緩存把各密鑰信息緩存下來,同一客戶端再訪問時可節約資源
ssl_session_timeout 指定ssl會話緩存的超時時長(雖然字面意思像是ssl會話超時時長),默認5分鐘。
其他命令容易理解,主要說明下ssl_session_cache的各參數:

off:不使用ssl緩存,並明確告知客戶端ssl會話不可重復用
none:“禮貌”地不使用ssl緩存,告知客戶端ssl會話可重復用,實際不緩存會話參數。默認是none
builtin [:size]:openssl的內建緩存機制,每個worker進程獨占一段內存空間作為緩存。
可指定大小,默認大小是20480條會話
這種機制會產生內存碎片,而且如果不同worker進程先後處理同一請求,先前worker進程緩存的內容就無法命中了。
shared [name:size],與builtin相對,shared表示各worker進程共享一段內存空間作為緩存。
使用shared,要指定緩存名稱
可指定大小,以字節為單位。1M空間可緩存4000個會話
雖然shared和builtin可同時使用,比如ssl_session_cache builtin:1000 shared:SSL:10m,但單獨使用shared效果更好(官網文檔描述)。

linux-nginx-2