nginx編譯配置

nginx配置
===========================================
Nginx官網:http://nginx.org/
Nginx官網下載地址(選擇 Stable version 穩定版):http://nginx.org/en/download.html
官網安裝介紹:http://nginx.org/en/linux_packages.html


一:安裝

nginx 顯示目錄

http {
    autoindex on;  # 自動顯示目錄
    autoindex_exact_size off; # 人性化方式顯示文件大小否則以byte顯示
    autoindex_localtime on; # 按服務器時間顯示,否則以gmt時間顯示
}


二:配置

2.1:

2.2:

    配置:
        配置文件 的組成部分:
            主配置文件:nginx.conf
                include  conf.d/*.conf
            facscgi, scgi, uwscgi的相關配置
            mime.types

        配置指令(必須以分號結尾):
            directive  value1 [value2...];
            
            支持使用變量:
                內置變量:由模塊引入,可直接引用;
                自定義變量:set  variable_name  value;
                    
                    引用變量:$variable_name
                    
        配置文件結構:
            main block:全局配置;
            event {
                ...
            }:事件驅動的相關配置;
            http {
                ...
            }:http協議的相關配置
            mail {
                ...
            }:mail相關的配置;
        
            http相關的配置:
                http {
                    ...
                    ...
                    server {
                        ...
                        server_name
                        root
                        alias
                        location /uri/ {
                            ...
                        }
                        ...
                    }
                    server {
                        ...
                        ...
                    }
                }
                
        main block:
            配置指令的類別:
                正常運行必備的配置;
                優化性能的配置;
                用於調試、定位問題的配置;
                
            正常運行必備的配置:
                1、user  USERNAME  [GROUPNAME];
                    指定用於運行worker進程的用戶和組;
                    
                    user  nginx  nginx;
                    
                2、pid  /PATH/TO/PID_FILE;
                    指定nginx進程的pid文件路徑;
                    
                    pid  /var/run/nginx.pid;
                    
                3、worker_rlimit_nofile number;
                    單個worker進程所能夠打開的最大文件數;
                    
            性能優化相關的配置:
                1、  worker_processes number | auto;
                    worker的進程數;通常應該爲CPU的核心數減1;
                    
                2、worker_cpu_affinity cpumask ...;
                      worker_cpu_affinity auto [cpumask];
                      
                      CPUMASK:
                        0000 0001
                        0000 0010
                        0000 0100
                        0000 1000
                        0001 0000
                        ...
                3、worker_priority nice;
                    [-20,19]
                        100-139
                        
            調試、定位問題:
                1、daemon on | off;
                    是否以守護進程方式啓動nginx進程;
                    
                2、master_process on | off;
                    是否以master/worker模型啓動nignx進程;
                    
                3、error_log file | stderr | syslog:server=address[,parameter=value] | memory:size [debug | info | notice | warn | error | crit | alert | emerg];
                    錯誤日誌文件的記錄方式,及其日誌級別:
                        方式:
                            file  /PATH/TO/SOME_LOG_FILE;
                            stderr:發送到錯誤輸出;
                             syslog:server=address[,parameter=value]:發送給syslog服務器;
                             memory:size
                             
                        日誌級別:
                            debug依賴於configure時的--with-debug選項;
                            
回顧:IO模型、nginx

    IO模型:
        阻塞式
        非阻塞式
        IO複用(select, poll)
        信號驅動的IO(epoll, kqueue, /dev/poll)
        AIO
            
        階段:等待數據準備完成,複製數據(從內核緩衝區到進程的地址空間)
        
    nginx:master/worker
        master
        worker()
        cache loader
        cache manager
        
        模塊類別:核心模塊、標準模塊(http標準模塊,http可選模塊,mail模塊)、3rd模塊
        
    nginx.conf
        main block
        event {
            ...
        }
        http {
            ...
            server {
                ...
                server_name
                root
                location /uri/ {
                    ...
                }
            }
            server {
                ...
            }
        }
        
Nginx(2)

    nginx.conf:
        main block
        events {
            ...
        }
        
            1、worker_connections number;
                每個worker進程所能夠併發打開的最大連接數;
                
                worker_processes * worker_connections
                
            2、use method;
                指明併發連接請求處理時使用的方法;
                
                use  epoll;
                
            3、accept_mutex on | off;
                啓用時,表示用於讓多個worker輪流地、序列化地響應新請求;
                
        http {
            ...
        }
        
        定義套接字相關功能
        
            1、server { ... }
                配置一個虛擬主機;
                
                server {
                    listen PORT;
                    server_name  HOSTNAME;
                    root /PATH/TO/DOCUMENTROOT;
                    ...
                }
                
                注意:
                    (1) 基於port的虛擬主機:
                        listen指令要使用不同的端口;
                    (2) 基於Hostname的虛擬主機;
                        server_name指令指向不同的主機名;
                    (3) 基於ip的虛擬主機:
                        listen IP:PORT;
                
            2、listen address[:port] [default_server] [ssl] [backlog=number] [rcvbuf=size] [sndbuf=size];
                  listen port [default_server] [ssl];
                  listen unix:path [default_server] [ssl] ;
                  
                default_server:默認虛擬主機;
                ssl:限制只能通過ssl連接提供服務;
                backlog:後緩隊列的長度;
                rcvbuf:接收緩衝大小;
                sndbuf:發送緩衝區大小;
                
            3、server_name name ...;
                指明當前server的主機名;後可跟一個或空白字符分隔的多個主機;
                支持使用*任意長度的任意字符;
                支持~起始的正則表達式模式字符串;
                
                應用策略:
                    (1) 首先精確匹配;
                    (2) 左則*通配符匹配;
                    (3) 右側*通配符匹配;
                    (4) 正則表達式模式匹配;
                                                                
                    server_name  www.magedu.com;
                    
                    server_name *.magedu.com;
                    
                    server_name  www.magedu.*;
                    
                    server_name ~^.*\.magedu\..*$;
                    
                    mail.magedu.com, www.magedu.com
                    
            4、tcp_nodelay  on|off;
                對keepalived模式下的連接是否啓用TCP_NODELAY選項;
                
            5、sendfile on | off;
                是否啓用sendfile功能;
                
        
        定義路徑相關配置
            6、root path;
                設置web資源路徑映射;用於指明用戶請求的url所對應的本地文件系統上的文檔所在目錄路徑;
                可用上下文:http, server, location, if
                
            7、location [ = | ~ | ~* | ^~ ] uri { ... }
                  location @name { ... }
                  
                  根據用戶請求的URI來匹配定義的location,匹配到時,此請求將被相應的location塊中的指令所處理;
                  
                server {
                    ...
                    location {
                        
                    }
                    location {
                        ...
                    }
                }
                
                =:URI精確匹配;
                ~:做正則表達式模式匹配,區分字符大小寫;
                ~*:做正則表達式模式匹配,不區分字符大小寫;
                ^~:對URI的左半部分做匹配檢查,不區分字符大小寫;
                
                匹配優先級:=、^~、~/~*、不帶符號;
                
            8、alias path;
                定義路徑別名,文檔映射的一種機制;僅能用於location上下文;
                
                alias  /bbs/  /web/forum/

                http://www.magedu.com/bbs/a.jpg     
                    
                    location  /bbs/  {
                        alias  /web/forum/;
                    }
                    
                    /web/forum/a.jpg
                
                    location  /bbs/  {
                        root  /web/forum/;
                    }
                    
                    /web/forum/bbs/a.jpg
                
                
                注意:
                    root指令:給定的路徑對應於location中的/uri/左側的/;
                    alias指令:給定的路徑對應於location中的/uri/右側的/;
                
            9、index file ...;
                可用位置:http, server, location
                
                默認主面;
                
            10、error_page code ... [=[response]] uri;
                根據用戶請求的資源的http響應的狀態碼實現錯誤頁重定向;
                
                http://www.magedu.com/hello.html --> 因爲資源不存在而被改爲對
                    http://www.magedu.com/404.html
                    
            11、
            
            
        
        定義客戶端請求的相關配置
        
            12、keepalive_timeout timeout [header_timeout];
                設定保持連接的超時時長,0表示禁止長連接 ;默認爲75s;
                
            13、keepalive_requests number;
                在一次長連接上所允許請求的資源的最大數量,默認爲100;
                
            14、keepalive_disable none | browser ...;
                對哪種瀏覽器禁用長連接;
                
            15、send_timeout time;
                向客戶端發送響應報文的超時時長; 特別地,是指兩次寫操作之間的間隔時長;
            
            16、client_body_buffer_size size;
                用於接收客戶端請求報文的body部分的緩衝區大小;默認爲16k;超時此大小時,其將被暫存到磁盤上;
                
            17、client_body_temp_path path [level1 [level2 [level3]]];
                設定用於存儲客戶端請求報文的body部分的臨時存儲路徑及子目錄結構和數量;
                
                /var/tmp/body  2 1 2
                    00-ff
            
        
        對客戶的請求進行限制的相關配置:
            18、limit_rate rate;
                限制響應給客戶端的傳輸速率,單位是bytes/second,0表示無限制;
                
            19、limit_except method ... { ... };
                限制對指定的請求方法之外的其它方法的使用客戶端;
                
                limit_except GET POST {
                    allow  172.18.0.0/16;
                    deny all;
                }
                
                表示除了GET和POST之外的其它方法僅允許172.18.0.0/16中的主機使用;
        
        文件操作優化的配置:
            20、aio on | off | threads[=pool];
                是否啓用aio功能;
                
            21、directio size | off;
                
            22、open_file_cache off;
                open_file_cache max=N [inactive=time];
                    nginx可以緩存以下三種信息:
                        (1) 文件的描述符、文件大小和最近一次的修改時間;
                        (2) 打開的目錄的結構;
                        (3) 沒有找到的或者沒有權限訪問的文件的相關信息;
                        
                    max=N:可緩存的緩存項上限;達到上限後會使用LRU算法實現緩存管理;
                    
                    inactive=time:緩存項的超時時長,在此處指定的時長內未被命中的緩存項即爲非活動項;
                    
            23、open_file_cache_errors on | off;
                是否緩存查找時發生錯誤的文件一類的信息;
                
            24、open_file_cache_min_uses number;
                在open_file_cache指令的inactive參數指定的時長內,至少命中此處指定的次數方可不被歸類到非活動項;
                
            25、open_file_cache_valid time;
                緩存項有效性的檢查頻率;默認是60s;
                
        ngx_http_access_module模塊:
            實現基於ip的訪問控制功能;
            
            26、allow address | CIDR | unix: | all;
            27、deny address | CIDR | unix: | all;
            
            可用上下文:http, server, location, limit_except

        ngx_http_auth_basic_module模塊:
            28、auth_basic string | off;
                使用basic機制進行用戶認證;
                
            29、auth_basic_user_file file;
                認證用的賬號密碼文件;
                
                文件格式:
                    name:password:commet
                    
                密碼格式:
                    htpasswd命令;
                    
                    location /admin/ {
                    auth_basic "Admin Area";
                    auth_basic_user_file /etc/nginx/.ngxpasswd;
                    }
                
        ngx_http_stub_status_module模塊:
            用於輸出nginx的基本狀態信息;
            
            Active connections: 1
            server accepts handled requests
            155 155 298
            Reading: 0 Writing: 1 Waiting: 0        
            
            Active connections:  處於活動狀態的客戶端連接的數量;
            accepts:已經接受的客戶端請求的總數;
            handled:已經處理完成的客戶端請求的總數;
            requests:客戶端發來的總的請求數;
            Reading:處於讀取客戶端請求報文首部的連接數;
            Writing:處於向客戶端發送響應報文過程中的連接數;
            Waiting:處於等待客戶端發出請求的空閒連接數;
            
        ngx_http_referer_module模塊:
            The ngx_http_referer_module module is used to block access to a site for requests with invalid values in the “Referer” header field.
            
            30、valid_referers none | blocked | server_names | string ...;
                定義合法的referer數據;
                
                none:請求報文首部沒有referer首部;
                blocked:請求報文的referer首部沒有值;
                server_names:其值是主機名;
                arbitrary string:直接字符串,可以使用*作爲通配符;
                regular expression:被指定的正則表達式模式匹配到的字符串;要使用~起始;
                
                valid_referers none blocked server_names *.magedu.com magedu.* ~\.magedu\.;
                
                if ($invalid_referer) {
                    return 403;
                }
                
回顧:
    master/worker
    
    nginx.conf:
        main block
        events {
            ...
        }
        http {
            ...
            server {
                ...
                listen
                server_name
                location [=|^~|~|~*] /uri/ {
                    root
                    ...
                }
                ...
        }
        
Nginx(3)
    
    ngx_http_ssl_module
    
        ssl on | off;
            是否啓用當前虛擬主機的ssl功能;
            
        ssl_certificate file;
            當前虛擬主機使用的PEM格式的證書文件;
            
        ssl_certificate_key file;
            當前虛擬機使用的證書文件中的公鑰配對兒的私鑰文件路徑,PEM格式;
            
        ssl_protocols [SSLv2] [SSLv3] [TLSv1] [TLSv1.1] [TLSv1.2];
            SSL協議的版本;
            
        ssl_session_cache off | none | [builtin[:size]] [shared:name:size];
            指明ssl會話的緩存機制;
                builtin:使用openssl內建的緩存機制,此爲各worker獨有;
                shared:由各worker共享的緩存;
                    name:緩存空間的名稱;
                    size:字節爲單位的緩存空間的大小;每1MB內存空間可緩存4000個會話;
                    
        ssl_session_timeout time;
            ssl會話超時時長,指ssl session cache中緩存條目有效時長;
            
    ngx_http_log_module
    
        The ngx_http_log_module module writes request logs in the specified format.
        
        access_log path [format [buffer=size [flush=time]] [if=condition]];
        access_log path format gzip[=level] [buffer=size] [flush=time] [if=condition];
        access_log syslog:server=address[,parameter=value] [format [if=condition]];
        access_log off;
        
        log_format name string ...;
            
        open_log_file_cache max=N [inactive=time] [min_uses=N] [valid=time];
        open_log_file_cache off;
        
            max:最大緩存條目;
            inactive=time:非活動時長;
            min_uses:最少使用次數;
            valid:驗正緩存條目有效性的頻率;
            
    ngx_http_rewrite_module
    
        rewrite regex replacement [flag];
            把用戶請求的URI基於regex做檢查,匹配到時將替換爲replacement指定的字符串;          
            在同一個location中存在的多個rewrite規則會自上而下逐個被檢查(循環);可以使用flag控制此循環功能;
            如果replacement是以http://或https://開頭,則替換結果會直接以重定向方式返回給客戶端;
            
            [flag]:
                last:重寫完成後停止對當前uri在當前location中的後續其它重寫操作,改爲對新uri的新一輪處理;
                break:重寫完成後停止對當前uri在當前location中的後續其它重寫操作;
                redirect:重寫完成後以臨時重定向方式直接返回重寫後生成的新URL給客戶端,由客戶對新URL進行請求;(302)
                permanent:重寫完成後以永久重定向方式直接返回重寫後生成的新URL給客戶端,由客戶對新URL進行請求;(301)
                
        rewrite_log on | off;
            是否啓用重寫日誌;啓用時,日誌信息被髮往錯誤日誌;
            
        if (condition) { ... }:
            條件判斷機制,在條件滿足時,執行配置塊中的配置;
            引入了一個新的配置上下文;
            
            condition:
                比較表達式:
                    ==, !=
                    ~:模式匹配,區分字母大小寫;
                    ~*:模式匹配,不區分字符大小寫;
                    !~:模式不匹配,區分字母大小寫;
                    !~*:模式不匹配,不區分字母大小寫;
                文件及目錄存在性判斷:
                    -f, !-f:文件
                    -d, !-d:目錄
                    -e, !-e:存在
                    -x, !-x:執行
                    
        return:
            return code [text];
            return code URL;
            return URL;
            
        set $variable value;
            用戶自定義變量;
            
    ngx_http_gzip_module
        
        過濾器,對指定類型的資源壓縮傳輸以節約帶寬;
        
        gzip on | off;
            啓用或禁用gzip壓縮響應報文;
        gzip_comp_level level;
            指定壓縮比,1-9,默認爲1;
        gzip_disable regex ...;
            regex是匹配客戶端瀏覽器類型的模式,表示對所有匹配到的瀏覽器不執行壓縮響應;
        gzip_min_length length;
            觸發啓用壓縮功能的響應報文的最小長度;
        gzip_http_version 1.0 | 1.1;
            設定啓用壓縮響應功能時,協議的最小版本;
        gzip_types mime-type ...;
            指定僅執行壓縮的資源內容類型;默認爲text/html;
        gzip_proxied off | expired | no-cache | no-store | private | no_last_modified | no_etag | auth | any ...;
            對代理的請求基於何種屬性判斷其是否應該啓用壓縮功能;
            
        示例:
            gzip on;
            gzip_http_version 1.0;
            gzip_comp_level 6;
            gzip_disable msie6;
            gzip_min_length 2;
            gzip_types text/plain text/css text/xml application/x-javascript  application/xml  application/json application/java-script;
            
    ngx_http_fastcgi_module
    
        LAMP:
            httpd+php:
                modules
                cgi
                fastcgi
                    proxy_fastcgi_module
            
        LNMP:
            nginx+php:
                fastcgi
                
            php:編譯時,支持fpm;
                ./configure   ...  --enable-fpm ...
                
                php-fpm工作方式(類似於httpd的prefork):
                    listen = 127.0.0.1:9000
                    listen.allowed_clients = 127.0.0.1
                    pm = dynamic | static
                        pm.start_servers:啓動fpm進程時啓動的工作進程數量;
                        pm.min_spare_servers:最少空閒進程數;
                        pm.max_spare_servers:最大空閒進程數;
                        pm.max_children:最大工作進程數;
                    user = USERNAME
                    group = GROUPNAME
                    
            fastcgi模塊指令:
                
                    fastcgi_pass address;
                        address是fpm服務器監聽的地址和端口;
                        
                        示例:     fastcgi   127.0.0.1:9000;
                    
                    fastcgi_index name;
                        fastcgi應用的主頁名稱;
                        
                    fastcgi_param parameter value [if_not_empty];
                        傳遞給fpm服務器的參數及其值;
                        
                    fastcgi_cache_path path [levels=levels] [use_temp_path=on|off] keys_zone=name:size [inactive=time] [max_size=size] [loader_files=number] [loader_sleep=time] [loader_threshold=time] [purger=on|off] [purger_files=number] [purger_sleep=time] [purger_threshold=time];
                        path:文件系統路徑,用於存儲緩存的文件數據;
                        max_size=size:定義此路徑下的多大空間用於存儲緩存數據;
                        levels=#[:#[:#]]:緩存目錄層級定義;
                            levels=1:2
                        keys_zone=name:size
                            內存中用於緩存k/v映射關係的空間名稱及大小;
                        inactive=time
                        
                        注意:只能定義在http上下文 ;
                        
                    fastcgi_cache zone | off;
                        是否啓用cache,如果啓用,數據緩存於哪個cache中;
                        
                    fastcgi_cache_key string;
                        定義要使用的緩存鍵;
                        
                        例如: fastcgi_cache_key  $request_uri;
                        
                    fastcgi_cache_methods GET | HEAD | POST ...;
                        緩存哪些類型的請求的相關數據;
                        
                    fastcgi_cache_min_uses number;
                        
                    fastcgi_cache_valid [code ...] time;
                        對不同響應碼設定其可緩存時長;
                        
                    注意:調用緩存時,至少應該 指定三個參數
                        fastcgi_cache
                        fastcgi_cache_key
                        fastcgi_cache_valid  






























Nginx:

    web服務器:http協議;
    
    http協議:html,MIME(多用途互聯網郵件擴展)
        major/minor:
            text/html, text/plain, image/jpeg, ...
            
        web資源:URL (scheme://server:port/path/to/source)

        方法:GET,HEAD,POST,PUT,DELETE,TRACE,OPTIONS,...
            WEBDAV
            
        http事務:request <--> response
            request:
                <method> <URL> <version>
                <HEADERS>
                ...
                
                <body>
                
            response:
                <version> <status> <reason phrase>
                <HEADERS>
                ...
                
                <body>
                
            status:
                1xx:信息類
                2xx:成功類,200
                3xx:重定向,301, 302, 304
                4xx:錯誤類,客戶端錯誤,404,403
                5xx:錯誤類,服務器端錯誤,502
                
        認證:basic, digest
            
        httpd:MPM
            prefork, worker, event
            
    I/O模型:
    
        同步/異步:
            關注的是消息通知機制
        
            同步:synchronous,
            異步:asynchronous,
        
        消息通知:
            同步:等待對方返回消息;
            異步:被調用者通過狀態、通知或回調通知調用者
                狀態:調用者每隔一段時間就需要檢查一次;
                通知:
                回調:
                
        阻塞/非阻塞
            關注調用者等等結果返回之前所處的狀態;
            
            阻塞:block,調用結果返回之前,調用者會被掛起;
            非阻塞:nonblock,調用結果返回之前,調用者不會被掛起;
        
    I/O:
        網絡IO:本質是socket讀取;
        磁盤IO:流;
        
        每次IO,都會經由兩個階段:
            第一步:數據先加載至內核內存空間(緩衝區);
            第二步:數據從內核緩衝區複製到用戶空間的進程的內存中去;
            
            等待數據準備完成;
            數據內核複製到進程;
        
        I/O模型:
            同步阻塞:
            同步非阻塞:
            IO multipexing:select, poll
            Signal Driven IO:
            Asynchronous IO:
            
    Nginx:
    
        C10k, http://nginx.org/
            engin X: nginx
            
            二次開發版:tengine, openresty
            
        Nginx的特性:
            模塊化設計,較好的擴展性;
            高可靠性
                master/worker
            支持熱部署
                不停機更新配置文件、更換日誌文件、更新服務器程序版本;
            低內存消耗
                10000個keep-alive連接模式下的非活動連接僅消耗2.5M內存;
            event-driven, aio, mmap
                
        基本功能:
            靜態資源的web服務器;
            http協議反向代理服務器;
            pop3/imap4協議反射代理服務器;
            FastCGI(lnmp), uWSGI等協議;
            模塊化(非DSO),著名有zip, SSL, ...;
            
            web服務器相關的功能:
                虛擬主機、keepalive、訪問日誌、url rewrite、路徑別名、基於ip及用戶的訪問控制、支付速率限制及併發數限制,...;
                
        Nginx的程序架構:
            master/worker
                一個master進程,可生成一個或多個worker進程;
                    master:加載配置文件、管理worker進程、平滑升級、...
                    worker:http服務、http代理、fastcgi代理、...
                    
        模塊類型:
            核心模塊: core module
            標準模塊:
                Standard HTTP modules
                Optional HTTP modules
                Mail modules
            3rd party modules:
            
        nginx用來做什麼?
            靜態資源的web服務器
            http協議反向代理
            
    nginx的安裝:
        # yum -y install pcre-devel openssl-devel zlib-devel
        # ./configure \
            --prefix=/usr/local
            --sbin-path=/usr/sbin/nginx
            --conf-path=/etc/nginx/nginx.conf
            --error-log-path=/var/log/nginx/error.log
            --http-log-path=/var/log/nginx/access.log
            --pid-path=/var/run/nginx.pid
            --lock-path=/var/run/nginx.lock
            --http-client-body-temp-path=/var/cache/nginx/client_temp
            --http-proxy-temp-path=/var/cache/nginx/proxy_temp
            --http-fastcgi-temp-path=/var/cache/nginx/fastcgi_temp
            --http-uwsgi-temp-path=/var/cache/nginx/uwsgi_temp
            --http-scgi-temp-path=/var/cache/nginx/scgi_temp
            --user=nginx
            --group=nginx
            --with-http_ssl_module
            --with-http_realip_module
            --with-http_addition_module
            --with-http_sub_module
            --with-http_dav_module
            --with-http_flv_module
            --with-http_mp4_module
            --with-http_gunzip_module
            --with-http_gzip_static_module
            --with-http_random_index_module
            --with-http_secure_link_module
            --with-http_stub_status_module
            --with-http_auth_request_module
            --with-threads
            --with-stream
            --with-stream_ssl_module
            --with-http_slice_module
            --with-file-aio
            --with-http_v2_module
        # make && make install
        
    配置:
        配置文件 的組成部分:
            主配置文件:nginx.conf
                include  conf.d/*.conf
            facscgi, scgi, uwscgi的相關配置
            mime.types
            
        配置指令(必須以分號結尾):
            directive  value1 [value2...];
            
            支持使用變量:
                內置變量:由模塊引入,可直接引用;
                自定義變量:set  variable_name  value;
                    
                    引用變量:$variable_name
                    
        配置文件結構:
            main block:全局配置;
            event {
                ...
            }:事件驅動的相關配置;
            http {
                ...
            }:http協議的相關配置
            mail {
                ...
            }:mail相關的配置;
        
            http相關的配置:
                http {
                    ...
                    ...
                    server {
                        ...
                        server_name
                        root
                        alias
                        location /uri/ {
                            ...
                        }
                        ...
                    }
                    server {
                        ...
                        ...
                    }
                }
                
        main block:
            配置指令的類別:
                正常運行必備的配置;
                優化性能的配置;
                用於調試、定位問題的配置;
                
            正常運行必備的配置:
                1、user  USERNAME  [GROUPNAME];
                    指定用於運行worker進程的用戶和組;
                    
                    user  nginx  nginx;
                    
                2、pid  /PATH/TO/PID_FILE;
                    指定nginx進程的pid文件路徑;
                    
                    pid  /var/run/nginx.pid;
                    
                3、worker_rlimit_nofile number;
                    單個worker進程所能夠打開的最大文件數;
                    
            性能優化相關的配置:
                1、  worker_processes number | auto;
                    worker的進程數;通常應該爲CPU的核心數減1;
                    
                2、worker_cpu_affinity cpumask ...;
                      worker_cpu_affinity auto [cpumask];
                      
                      CPUMASK:
                        0000 0001
                        0000 0010
                        0000 0100
                        0000 1000
                        0001 0000
                        ...
                3、worker_priority nice;
                    [-20,19]
                        100-139
                        
            調試、定位問題:
                1、daemon on | off;
                    是否以守護進程方式啓動nginx進程;
                    
                2、master_process on | off;
                    是否以master/worker模型啓動nignx進程;
                    
                3、error_log file | stderr | syslog:server=address[,parameter=value] | memory:size [debug | info | notice | warn | error | crit | alert | emerg];
                    錯誤日誌文件的記錄方式,及其日誌級別:
                        方式:
                            file  /PATH/TO/SOME_LOG_FILE;
                            stderr:發送到錯誤輸出;
                             syslog:server=address[,parameter=value]:發送給syslog服務器;
                             memory:size
                             
                        日誌級別:
                            debug依賴於configure時的--with-debug選項;
                            
回顧:IO模型、nginx

    IO模型:
        阻塞式
        非阻塞式
        IO複用(select, poll)
        信號驅動的IO(epoll, kqueue, /dev/poll)
        AIO
            
        階段:等待數據準備完成,複製數據(從內核緩衝區到進程的地址空間)
        
    nginx:master/worker
        master
        worker()
        cache loader
        cache manager
        
        模塊類別:核心模塊、標準模塊(http標準模塊,http可選模塊,mail模塊)、3rd模塊
        
    nginx.conf
        main block
        event {
            ...
        }
        http {
            ...
            server {
                ...
                server_name
                root
                location /uri/ {
                    ...
                }
            }
            server {
                ...
            }
        }
        
Nginx(2)

    nginx.conf:
        main block
        events {
            ...
        }
        
            1、worker_connections number;
                每個worker進程所能夠併發打開的最大連接數;
                
                worker_processes * worker_connections
                
            2、use method;
                指明併發連接請求處理時使用的方法;
                
                use  epoll;
                
            3、accept_mutex on | off;
                啓用時,表示用於讓多個worker輪流地、序列化地響應新請求;
                
        http {
            ...
        }
        
        定義套接字相關功能
        
            1、server { ... }
                配置一個虛擬主機;
                
                server {
                    listen PORT;
                    server_name  HOSTNAME;
                    root /PATH/TO/DOCUMENTROOT;
                    ...
                }
                
                注意:
                    (1) 基於port的虛擬主機:
                        listen指令要使用不同的端口;
                    (2) 基於Hostname的虛擬主機;
                        server_name指令指向不同的主機名;
                    (3) 基於ip的虛擬主機:
                        listen IP:PORT;
                
            2、listen address[:port] [default_server] [ssl] [backlog=number] [rcvbuf=size] [sndbuf=size];
                  listen port [default_server] [ssl];
                  listen unix:path [default_server] [ssl] ;
                  
                default_server:默認虛擬主機;
                ssl:限制只能通過ssl連接提供服務;
                backlog:後緩隊列的長度;
                rcvbuf:接收緩衝大小;
                sndbuf:發送緩衝區大小;
                
            3、server_name name ...;
                指明當前server的主機名;後可跟一個或空白字符分隔的多個主機;
                支持使用*任意長度的任意字符;
                支持~起始的正則表達式模式字符串;
                
                應用策略:
                    (1) 首先精確匹配;
                    (2) 左則*通配符匹配;
                    (3) 右側*通配符匹配;
                    (4) 正則表達式模式匹配;
                                                                
                    server_name  www.magedu.com;
                    
                    server_name *.magedu.com;
                    
                    server_name  www.magedu.*;
                    
                    server_name ~^.*\.magedu\..*$;
                    
                    mail.magedu.com, www.magedu.com
                    
            4、tcp_nodelay  on|off;
                對keepalived模式下的連接是否啓用TCP_NODELAY選項;
                
            5、sendfile on | off;
                是否啓用sendfile功能;
                
        
        定義路徑相關配置
            6、root path;
                設置web資源路徑映射;用於指明用戶請求的url所對應的本地文件系統上的文檔所在目錄路徑;
                可用上下文:http, server, location, if
                
            7、location [ = | ~ | ~* | ^~ ] uri { ... }
                  location @name { ... }
                  
                  根據用戶請求的URI來匹配定義的location,匹配到時,此請求將被相應的location塊中的指令所處理;
                  
                server {
                    ...
                    location {
                        
                    }
                    location {
                        ...
                    }
                }
                
                =:URI精確匹配;
                ~:做正則表達式模式匹配,區分字符大小寫;
                ~*:做正則表達式模式匹配,不區分字符大小寫;
                ^~:對URI的左半部分做匹配檢查,不區分字符大小寫;
                
                匹配優先級:=、^~、~/~*、不帶符號;
                
            8、alias path;
                定義路徑別名,文檔映射的一種機制;僅能用於location上下文;
                
                alias  /bbs/  /web/forum/

                http://www.magedu.com/bbs/a.jpg     
                    
                    location  /bbs/  {
                        alias  /web/forum/;
                    }
                    
                    /web/forum/a.jpg
                
                    location  /bbs/  {
                        root  /web/forum/;
                    }
                    
                    /web/forum/bbs/a.jpg
                
                
                注意:
                    root指令:給定的路徑對應於location中的/uri/左側的/;
                    alias指令:給定的路徑對應於location中的/uri/右側的/;
                
            9、index file ...;
                可用位置:http, server, location
                
                默認主面;
                
            10、error_page code ... [=[response]] uri;
                根據用戶請求的資源的http響應的狀態碼實現錯誤頁重定向;
                
                http://www.magedu.com/hello.html --> 因爲資源不存在而被改爲對
                    http://www.magedu.com/404.html
                    
            11、
            
            
        
        定義客戶端請求的相關配置
        
            12、keepalive_timeout timeout [header_timeout];
                設定保持連接的超時時長,0表示禁止長連接 ;默認爲75s;
                
            13、keepalive_requests number;
                在一次長連接上所允許請求的資源的最大數量,默認爲100;
                
            14、keepalive_disable none | browser ...;
                對哪種瀏覽器禁用長連接;
                
            15、send_timeout time;
                向客戶端發送響應報文的超時時長; 特別地,是指兩次寫操作之間的間隔時長;
            
            16、client_body_buffer_size size;
                用於接收客戶端請求報文的body部分的緩衝區大小;默認爲16k;超時此大小時,其將被暫存到磁盤上;
                
            17、client_body_temp_path path [level1 [level2 [level3]]];
                設定用於存儲客戶端請求報文的body部分的臨時存儲路徑及子目錄結構和數量;
                
                /var/tmp/body  2 1 2
                    00-ff
            
        
        對客戶的請求進行限制的相關配置:
            18、limit_rate rate;
                限制響應給客戶端的傳輸速率,單位是bytes/second,0表示無限制;
                
            19、limit_except method ... { ... };
                限制對指定的請求方法之外的其它方法的使用客戶端;
                
                limit_except GET POST {
                    allow  172.18.0.0/16;
                    deny all;
                }
                
                表示除了GET和POST之外的其它方法僅允許172.18.0.0/16中的主機使用;
        
        文件操作優化的配置:
            20、aio on | off | threads[=pool];
                是否啓用aio功能;
                
            21、directio size | off;
                
            22、open_file_cache off;
                open_file_cache max=N [inactive=time];
                    nginx可以緩存以下三種信息:
                        (1) 文件的描述符、文件大小和最近一次的修改時間;
                        (2) 打開的目錄的結構;
                        (3) 沒有找到的或者沒有權限訪問的文件的相關信息;
                        
                    max=N:可緩存的緩存項上限;達到上限後會使用LRU算法實現緩存管理;
                    
                    inactive=time:緩存項的超時時長,在此處指定的時長內未被命中的緩存項即爲非活動項;
                    
            23、open_file_cache_errors on | off;
                是否緩存查找時發生錯誤的文件一類的信息;
                
            24、open_file_cache_min_uses number;
                在open_file_cache指令的inactive參數指定的時長內,至少命中此處指定的次數方可不被歸類到非活動項;
                
            25、open_file_cache_valid time;
                緩存項有效性的檢查頻率;默認是60s;
                
        ngx_http_access_module模塊:
            實現基於ip的訪問控制功能;
            
            26、allow address | CIDR | unix: | all;
            27、deny address | CIDR | unix: | all;
            
            可用上下文:http, server, location, limit_except

        ngx_http_auth_basic_module模塊:
            28、auth_basic string | off;
                使用basic機制進行用戶認證;
                
            29、auth_basic_user_file file;
                認證用的賬號密碼文件;
                
                文件格式:
                    name:password:commet
                    
                密碼格式:
                    htpasswd命令;
                    
                    location /admin/ {
                    auth_basic "Admin Area";
                    auth_basic_user_file /etc/nginx/.ngxpasswd;
                    }
                
        ngx_http_stub_status_module模塊:
            用於輸出nginx的基本狀態信息;
            
            Active connections: 1
            server accepts handled requests
            155 155 298
            Reading: 0 Writing: 1 Waiting: 0        
            
            Active connections:  處於活動狀態的客戶端連接的數量;
            accepts:已經接受的客戶端請求的總數;
            handled:已經處理完成的客戶端請求的總數;
            requests:客戶端發來的總的請求數;
            Reading:處於讀取客戶端請求報文首部的連接數;
            Writing:處於向客戶端發送響應報文過程中的連接數;
            Waiting:處於等待客戶端發出請求的空閒連接數;
            
        ngx_http_referer_module模塊:
            The ngx_http_referer_module module is used to block access to a site for requests with invalid values in the “Referer” header field.
            
            30、valid_referers none | blocked | server_names | string ...;
                定義合法的referer數據;
                
                none:請求報文首部沒有referer首部;
                blocked:請求報文的referer首部沒有值;
                server_names:其值是主機名;
                arbitrary string:直接字符串,可以使用*作爲通配符;
                regular expression:被指定的正則表達式模式匹配到的字符串;要使用~起始;
                
                valid_referers none blocked server_names *.magedu.com magedu.* ~\.magedu\.;
                
                if ($invalid_referer) {
                    return 403;
                }
                
回顧:
    master/worker
    
    nginx.conf:
        main block
        events {
            ...
        }
        http {
            ...
            server {
                ...
                listen
                server_name
                location [=|^~|~|~*] /uri/ {
                    root
                    ...
                }
                ...
        }
        
Nginx(3)
    
    ngx_http_ssl_module
    
        ssl on | off;
            是否啓用當前虛擬主機的ssl功能;
            
        ssl_certificate file;
            當前虛擬主機使用的PEM格式的證書文件;
            
        ssl_certificate_key file;
            當前虛擬機使用的證書文件中的公鑰配對兒的私鑰文件路徑,PEM格式;
            
        ssl_protocols [SSLv2] [SSLv3] [TLSv1] [TLSv1.1] [TLSv1.2];
            SSL協議的版本;
            
        ssl_session_cache off | none | [builtin[:size]] [shared:name:size];
            指明ssl會話的緩存機制;
                builtin:使用openssl內建的緩存機制,此爲各worker獨有;
                shared:由各worker共享的緩存;
                    name:緩存空間的名稱;
                    size:字節爲單位的緩存空間的大小;每1MB內存空間可緩存4000個會話;
                    
        ssl_session_timeout time;
            ssl會話超時時長,指ssl session cache中緩存條目有效時長;
            
    ngx_http_log_module
    
        The ngx_http_log_module module writes request logs in the specified format.
        
        access_log path [format [buffer=size [flush=time]] [if=condition]];
        access_log path format gzip[=level] [buffer=size] [flush=time] [if=condition];
        access_log syslog:server=address[,parameter=value] [format [if=condition]];
        access_log off;
        
        log_format name string ...;
            
        open_log_file_cache max=N [inactive=time] [min_uses=N] [valid=time];
        open_log_file_cache off;
        
            max:最大緩存條目;
            inactive=time:非活動時長;
            min_uses:最少使用次數;
            valid:驗正緩存條目有效性的頻率;
            
    ngx_http_rewrite_module
    
        rewrite regex replacement [flag];
            把用戶請求的URI基於regex做檢查,匹配到時將替換爲replacement指定的字符串;          
            在同一個location中存在的多個rewrite規則會自上而下逐個被檢查(循環);可以使用flag控制此循環功能;
            如果replacement是以http://或https://開頭,則替換結果會直接以重定向方式返回給客戶端;
            
            [flag]:
                last:重寫完成後停止對當前uri在當前location中的後續其它重寫操作,改爲對新uri的新一輪處理;
                break:重寫完成後停止對當前uri在當前location中的後續其它重寫操作;
                redirect:重寫完成後以臨時重定向方式直接返回重寫後生成的新URL給客戶端,由客戶對新URL進行請求;(302)
                permanent:重寫完成後以永久重定向方式直接返回重寫後生成的新URL給客戶端,由客戶對新URL進行請求;(301)
                
        rewrite_log on | off;
            是否啓用重寫日誌;啓用時,日誌信息被髮往錯誤日誌;
            
        if (condition) { ... }:
            條件判斷機制,在條件滿足時,執行配置塊中的配置;
            引入了一個新的配置上下文;
            
            condition:
                比較表達式:
                    ==, !=
                    ~:模式匹配,區分字母大小寫;
                    ~*:模式匹配,不區分字符大小寫;
                    !~:模式不匹配,區分字母大小寫;
                    !~*:模式不匹配,不區分字母大小寫;
                文件及目錄存在性判斷:
                    -f, !-f:文件
                    -d, !-d:目錄
                    -e, !-e:存在
                    -x, !-x:執行
                    
        return:
            return code [text];
            return code URL;
            return URL;
            
        set $variable value;
            用戶自定義變量;
            
    ngx_http_gzip_module
        
        過濾器,對指定類型的資源壓縮傳輸以節約帶寬;
        
        gzip on | off;
            啓用或禁用gzip壓縮響應報文;
        gzip_comp_level level;
            指定壓縮比,1-9,默認爲1;
        gzip_disable regex ...;
            regex是匹配客戶端瀏覽器類型的模式,表示對所有匹配到的瀏覽器不執行壓縮響應;
        gzip_min_length length;
            觸發啓用壓縮功能的響應報文的最小長度;
        gzip_http_version 1.0 | 1.1;
            設定啓用壓縮響應功能時,協議的最小版本;
        gzip_types mime-type ...;
            指定僅執行壓縮的資源內容類型;默認爲text/html;
        gzip_proxied off | expired | no-cache | no-store | private | no_last_modified | no_etag | auth | any ...;
            對代理的請求基於何種屬性判斷其是否應該啓用壓縮功能;
            
        示例:
            gzip on;
            gzip_http_version 1.0;
            gzip_comp_level 6;
            gzip_disable msie6;
            gzip_min_length 2;
            gzip_types text/plain text/css text/xml application/x-javascript  application/xml  application/json application/java-script;
            
    ngx_http_fastcgi_module
    
        LAMP:
            httpd+php:
                modules
                cgi
                fastcgi
                    proxy_fastcgi_module
            
        LNMP:
            nginx+php:
                fastcgi
                
            php:編譯時,支持fpm;
                ./configure   ...  --enable-fpm ...
                
                php-fpm工作方式(類似於httpd的prefork):
                    listen = 127.0.0.1:9000
                    listen.allowed_clients = 127.0.0.1
                    pm = dynamic | static
                        pm.start_servers:啓動fpm進程時啓動的工作進程數量;
                        pm.min_spare_servers:最少空閒進程數;
                        pm.max_spare_servers:最大空閒進程數;
                        pm.max_children:最大工作進程數;
                    user = USERNAME
                    group = GROUPNAME
                    
            fastcgi模塊指令:
                
                    fastcgi_pass address;
                        address是fpm服務器監聽的地址和端口;
                        
                        示例:     fastcgi   127.0.0.1:9000;
                    
                    fastcgi_index name;
                        fastcgi應用的主頁名稱;
                        
                    fastcgi_param parameter value [if_not_empty];
                        傳遞給fpm服務器的參數及其值;
                        
                    fastcgi_cache_path path [levels=levels] [use_temp_path=on|off] keys_zone=name:size [inactive=time] [max_size=size] [loader_files=number] [loader_sleep=time] [loader_threshold=time] [purger=on|off] [purger_files=number] [purger_sleep=time] [purger_threshold=time];
                        path:文件系統路徑,用於存儲緩存的文件數據;
                        max_size=size:定義此路徑下的多大空間用於存儲緩存數據;
                        levels=#[:#[:#]]:緩存目錄層級定義;
                            levels=1:2
                        keys_zone=name:size
                            內存中用於緩存k/v映射關係的空間名稱及大小;
                        inactive=time
                        
                        注意:只能定義在http上下文 ;
                        
                    fastcgi_cache zone | off;
                        是否啓用cache,如果啓用,數據緩存於哪個cache中;
                        
                    fastcgi_cache_key string;
                        定義要使用的緩存鍵;
                        
                        例如: fastcgi_cache_key  $request_uri;
                        
                    fastcgi_cache_methods GET | HEAD | POST ...;
                        緩存哪些類型的請求的相關數據;
                        
                    fastcgi_cache_min_uses number;
                        
                    fastcgi_cache_valid [code ...] time;
                        對不同響應碼設定其可緩存時長;
                        
                    注意:調用緩存時,至少應該 指定三個參數
                        fastcgi_cache
                        fastcgi_cache_key
                        fastcgi_cache_valid  
                        
Nginx(5)

    ngx_http_proxy_module
        
        (1) proxy_pass URL;
            location, if in location, limit_except
            
            proxy_pass後面的路徑不帶uri時,其會將location的uri傳遞給後端主機;
            
                location  /uri/  {
                    proxy_pass  http://HOST;
                }
                
            proxy_pass後面路徑是一個uri時,其會將location的uri替換爲proxy_pass後端主機的uri;
            
                location  /uri/  {
                    proxy_pass  http://HOST/new_uri/;
                }
                
            如果location定義其uri時使用了正則表達模式匹配機制,則proxy_pass後的路徑必須不能使用uri;
                location  ~|~*  PATTERN {
                    proxy_pass  http://HOST;
                }
            
                
                http://www.magedu.com/bbs/  -->  http://172.16.100.7/bbs/
                http://www.magedu.com/bbs/  -->  http://172.16.100.7/
                        
        (2)     proxy_set_header
                proxy_set_header field value;
                設定向後端主機發送的請求報文的首部及其值;
                
            示例:
                proxy_set_header  X-Real-IP  $remote_addr;
                proxy_set_header  X-Forwarded-For $proxy_add_x_forwared_for;
                
                        
        緩存相關的選項(緩存要先定義,後調用)
        (3) proxy_cache_path path [levels=levels]  keys_zone=name:size [inactive=time] [max_size=size] ;
            用於http上下文 ;
            
        (4) proxy_cache zone | off;
            調用緩存,默認爲off;
            
        (5) proxy_cache_key string;
            定義緩存鍵;
                proxy_cache_key  $request_uri
                proxy_cache_key  $scheme$proxy_host$request_uri
                
        (6) proxy_cache_valid [code ...] time;
            爲不同的響應碼設定其緩存的時長;
            
            示例:
                proxy_cache_valid  200 302  10m;
                proxy_cache_valid  404 1m;
                
        (7) proxy_cache_use_stale error | timeout | invalid_header | updating | http_500 | http_502 | http_503 | http_504 | http_403 | http_404 | off ...;
            Determines in which cases a stale cached response can be used when an error occurs during communication with the proxied server.
            
回顧:
    nginx:proxy
        正向代理
        反向代理
        
    ngx_http_proxy_module:
        proxy_pass
        proxy_set_header
        proxy_cache_path (http)
        proxy_cache
        proxy_cache_key
        proxy_cache_valid
        proxy_cache_use_stale
        
Nginx(6)
    
    ngx_http_proxy_module模塊
        
        跟連接相關的指令
            (8) proxy_connect_timeout time;
                與後端服務器建立連接的超時時長,默認爲60s,最長爲75s;
                
            (9) proxy_read_timeout time;
                等待後端主機發送響應報文的超時時長,默認爲60s;
                
            (10) proxy_send_timeout time;
                向後端服務發送請求報文的超時時長,默認爲60s;
                
    ngx_http_headers_module
        用於在響應給客戶端的報文中添加首部;
        
        (1) add_header name value [always];
            向響應報文添加自定義首部,並賦值;           
            http, server, location, if in location
            
            add_header  X-Via  $server_addr;
            
        (2) expires [modified] time;
            expires epoch | max | off;
            
            用於添加Expire及Cache-Control首部或修改首部的值;
            
    ngx_http_upstream_module
        將多個後端主機定義爲服務器組,而後可由proxy_pass, fastcgi_pass, memcached_pass等進行引用;
        
        (1) upstream name { ... }
            定義後端服務器組;引入新的上下文;只能用於http上下文;
            name:名稱,直接字符串;
            
        (2) server
            server address [parameters];
            
            定義服務器的地址和相關的參數;
                地址格式:
                    IP[:port]
                    HOSTNAME[:port]
                    unix:/PATH/TO/SOME_SOCK_FILE
                    
                參數:
                    weight=number:服務器權重;
                    max_fails=number:最大失敗嘗試次數;
                    fail_timeout=time:設置服務器不可用超時時長;
                    backup:備用主機;
                    down:手動標記其不再處理任何用戶請求;
                    
        (3) ip_hash
            源地址哈希調度算法;
            
        (4) least_conn
            最少連接調度算法;
            
        (5) health_check [parameters];
            定義後端主機的健康狀態檢測機制;只能用於location上下文;
            
            可用參數:
                interval=#:檢測的頻度,默認爲5秒;
                fails=number:判定爲失敗的檢測次數;
                passes=number:判定爲成功的檢測次數;
                uri=uri:執行健康狀態檢測時請求的uri;
                match=name:基於哪個match做檢測結果爲“成功”或“失敗”的判定;
                port=number:向服務器的哪個端口發起健康狀態檢測請求;
                
        (6) match name { ... }
            僅能用於http上下文 ;對後端主機做健康狀態檢測時,定義其結果判斷標準;
            
            專用指令:
                status:期望的響應碼;
                    status  CODE
                    status  ! CODE
                    status CODE-CODE
                header:基於響應首部進行判斷
                    header HEADER=VALUE
                    header HEADER!=VALUE
                    header [!] HEADER
                    header HEADER ~ VALUE
                body:期望的響應報文的主體部分應該有的內容;
                    body ~ "CONTENT"
                    body !~ "CONTENT"
                    
        (7) hash key [consistent];
            定義調度方法,可自定義基於何種信息(key)進行綁定;
            
            hash $remote_addr
            hash $request_uri
            hash $cookie_username
            
        補充:內置變量的調用,向客戶端展示緩存命令與否:
            add_header  X-Cache  $upstream_cache_status;
            
    課外作業:嘗試使用tengine實現此前的講到的所有內容;
    博客作業:nginx的所有內容,重點實現:
        url rewrite, gzip, https, upstream, fastcgi
        
memcached:
    
    數據結構模型:
        結構化數據:關係型數據庫;
        半結構化數據:xml, json, ... (NoSQL);
        非結構化數據:文件系統;
        
    k/v:
        memcached:存儲於內存中;
        redis:存儲於內存中,週期性地將數據同於輔存上;
        
    memcached:
        LiveJournal旗下的Danga Interactive
        
        特性:
            k/v緩存:可序列化數據;存儲項:key, value, flag, expire time;
            功能的實現一半依賴於服務端,一半依賴客戶端;
            分佈式緩存:互不通信的分佈式集羣;
            O(1)的執行效率;
            清理過期數據:LRU
                緩存項過期
                緩存空間用盡
            
        緩存系統的種類:
            代理式緩存;
            旁路式緩存;
            
        分佈式系統主機路由:
            取模法
            一致性hash;
            
        memcached:
            11211/tcp, 11211/udp
            
            主程序:memcached
            環境配置文件:/etc/sysconfig/memcached
            
            協議格式
                文本協議
                二進制協議   
                
            命令:
                統計類:stats,stats items, stats slabs, stats sizes
                存儲類:set, add, replace, append, prepend
                獲取數據類:get, delete, incr/decr
                清空:flush_all
                
            memcached程序的常用選項:
                -l <ip_addr>: 監聽的地址;
                -m <num>:緩存空間大小,單位爲MB;默認爲64;
                -c <num>:最大併發連接數,默認爲1024;
                -p <num>:Listen on TCP port <num>, the default is port 11211.
                -U <num>:Listen on UDP port <num>, the default is port 11211, 0 is off.
                -M:緩存空間耗盡時,向請求者返回錯誤信息,而不是基於LRU算法進行緩存清理;
                -f <factor>:growth factor,增長因子;
                -t <threads>:處理用於請求的線程數;
                
            memcached默認沒有認證機制,但可藉助於SASL進行認證;
            
            php連接memcached服務的模塊:
                memcache:php-pecl-memcache
                memcached:php-pecl-memcached
                    
            可提供工具程序的程序包:libmemcached;
            
    LB Cluster保持會話的方法:
        session sticky
        session cluster
        session server
        
    博客作業:
        nginx負載均衡用戶請求至後端多個ammp主機,php的會話保存於memcached中;
        
    

發佈了4 篇原創文章 · 獲贊 0 · 訪問量 9534
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章