1. 程式人生 > >Nginx優化(2)

Nginx優化(2)

緩存 文件的 分配 必須 功能 get 讀取文件 首部 pen

配置文件:
main配置段
http {
}

    配置指令要以分號結尾,語法格式:
        directive value1 [value2...];

    支持使用變量:
        模塊內置變量
        自定義變量
            set var_name value

    主配置段的指令的類別:
        用於調試、定位問題
        正常運行必備的配置
        優化性能的配置
        事件相關的配置

    正常運行的必備配置:
        1、user USERNAME [GROUPNAME];
            指定運行worker進程的用戶 和組,例如:
            user nginx nginx;s

        2、pid /path/to/pid_file;
            指定nginx的pid文件;

        3、worker_rlimit_nofile #;
            指定一個worker進程所能夠打開的最大文件句柄數;

        4、worker_rlimit_sigpending #;
            指定每個用戶能夠發往worker的信號的數量;

    優化性能相關的配置:
        1、worker_processes #:
            worker線程的個數;通常應該為物理CPU核心個數減1;

        2、worker_cpu_affinity cpumask ...;
            優點:提升緩存的命中率;
            context switch:會產生CPU的不必要的消耗

            綁定worker進程至指定的CPU上;
                CPUMASK
                    0001
                    0010
                    0100
                    1000 
                例如:
                    worker_cpu_affinity 00000001 00000010 00000100;

        3、timer_resolution t;
            計時器解析度:降低此值,可減少gettimeofday() 系統調用的次數。
            gettimeofday(); 

        4、worker_priority nice;
            指明worker進程的nice值
            -20, 19
            100, 139

    事件相關的配置:
        1、accept_mutex [on|off]
            master調度用戶請求至各worker進程時使用的負載均衡鎖:on表示能讓多個worker輪流地、序列化地去響應新請求;
            內部調用用戶 請求至各worker時用的負載均衡鎖;打開時表示能讓多個worker輪流地、序列化地與響應新請求;

        2、lock_file /path/to/lock_file; 
            accept-mutex用到的鎖文件路徑;

        3、accept_mutex_delay #ms;

        4、use [epoll|rgsig|select|poll];
            定義使用的事件模型;建議讓Nginx自動選擇;

        5、worker_connections #;
            每個worker進程所能夠響應的最大並發請求數;
            worker_connections * work_processes

    用於調試、定位問題:
    必須安裝--with-debug
        1、daemon [off|on]
            是否以守護進程方式啟動nginx;

        2、master_process on|off;
            是否以master/worker模型來運行nginx; 調試時可以設置為off;

        3、error_log /path/to/error_log level;
            錯誤日誌文件及其級別;出於調試的目的,可以使用debug級別,但此級別只有在編譯nginx時使用了--with-debug選項才有效;
            若要使用debug級別,需要在編譯ngnix時使用--with-debug選項;

對內存或磁盤資源進行分配
1、client_body_in_file_only on|clean|off;
請求報文的body部分是否可暫存於磁盤;on表示允許,並且即使請求結束,也不會刪除暫存的內容;clean表示會刪除;off不允許暫存;

        2、client_body_in_single_buffer on|off 

        3、client_body_buffer_size size;

        4、client_body_temp_path DIR [level1 [level2 [level3 [level4]]]]

            例如:client_body_temp_path /var/tmp/nginx/client  1 2

        5、client_header_buffer_size size:

    MIME類型相關的配置:

        1、types {}
            定義MIME types至文件的擴展名;
                types {
                    text/html .html;
                    image/jpeg  .jpg;
                }

        2、default_type MIME-TYPE;

    文件操作優化相關的配置:
        1、sendfile on|off; 

        2、aio on|off;

        3、directio size|off;
            是否使用O_DIRECT選項去請求讀取文件;與sendfile功能互斥;

        4、open_file_cache max=N[inactive=time] | off;
            nginx可以緩存以下三種信息:
                (1) 文件句柄、文件大小和最近一次修改時間;
                (2) 打開目錄的目錄結構;
                (3) 沒有找到的或者沒有權限操作的文件的相關信息;

            max=N表示可緩存的最大條目上限;一旦到達上限,則會使用LRU從緩存中刪除最近最少使用的條目;

            inactive=time: 在inactive指定的時長內沒有被訪問過的緩存條目就會淘汰;

        5、open_file_cache_errors on|off;
            是否緩存在文件緩存中緩存打開文件時出現找不到路徑,沒有權限等的錯誤信息;

        6、open_file_cache_min_uses time;
            每隔多久檢查一次緩存中緩存條目的有效性;默認60s;

基於gzip實現響應報文壓縮:

定制響應首部
    add_header name value [always];
    expires

Nginx優化(2)