1. 程式人生 > >Nginx配置段(3)

Nginx配置段(3)

spdy jpg ipv6 web服務 lag prot 接受 文件系統 安裝

安裝方法: rpm及源碼安裝: # ./configure --prefix=/usr/local/nginx --conf-path=/etc/nginx/nginx.conf --user=nginx --group=nginx --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --pid-path=/var/run/nginx/nginx.pid --lock-path=/var/lock/nginx.lock --with-http_ssl_module --with-http_stub_status_module --with-http_gzip_static_module --with-http_flv_module --with-http_mp4_module --http-client-body-temp-path=/var/tmp/nginx/client --http-proxy-temp-path=/var/tmp/nginx/proxy --http-fastcgi-temp-path=/var/tmp/nginx/fastcgi # make && make install Tmalloc, gperftools

配置段:
nginx:
main配置段
http {
}

http配置:http core 配置一個靜態web服務器
    ngx_http_core_module

    配置框架:
    http {
        upstream {
            .,..
        }

        server {
            listen IP:PORT;
            # 虛擬主機
            location /URL {
                if ...{
                    ...
                }    #類似於httpd中的<Location>,用於定義URL與本地文件系統的映射關系;
                root "/path/to/somewhere";
                ...
            }  
        }       #每個server類似於httpd中的一個<VirtualHost>

        server {
            ,,. 
        }  
    }

        註意:與http配置相關的指令必須放在http、server、location、upstream、if塊中;

    虛擬主機相關的配置:
        1、server {}
            定義一個虛擬主機;

            server {
                listen 8080;
                server_name www.zhanx.wang;
                root "/vhosts/web1";
            }

        2、listen
            監聽的端口
            完整格式 :listen address[:port] [default_server] [ssl] [spdy] [proxy_protocol] [setfib=number] [fastopen=number] [backlog=number] [rcvbuf=size] [sndbuf=size] [accept_filter=filter] [deferred] [bind] [ipv6only=on|off] [so_keepalive=on|off|[keepidle]:[keepintvl]:[keepcnt]];

            listen address[:port] [default_server] ssl 

            backlog=number: 指明TCP協議backlog隊列的大小。默認為-1,表示不設置;
            rcvbuf=size:設定監聽句柄的SO_RCVBUF參數;

            例如:
                listen 172.16.100.8:8080

        3、server_name name [...];
            後可跟多個主機名;名稱還可以使用通配符和正則表達式(~);

            (1) 先做精確匹配;www.zhanxwang: 
            (2) 左側通配符匹配,例如:*.zhanx.wang; 
            (3) 右側通配符匹配,例如:www.*;
            (4) 正則表達式匹配,例如: ~^.*\.zhanx\.wang$
            (5) default_server

        4、location [=|~|~*|^~] /uri {...}
            location @name
            功能:允許根據用戶請求的URI來匹配定義的各location,匹配到時,此請求將被相應的location塊中的配置所處理;

                =: 精確匹配檢查;
                ~: 正則表達式模式匹配,區分字符大小寫;
                ~*:正則表達式模式 匹配,不區分字符大小寫;
                ^~:URI的前半部分匹配,不檢查正則表達式;

            匹配優先級:精確匹配(=)、^~、~和~*、由不帶符號的URL進行左側匹配;

            server {
                listen 80
                server_name www.zhanx.wang
                location / {
                        root "/vhosts/web1";
                    }

                location /images/ {
                        root "vhosts/images";
                    }

                location ~*\.php${
                        fcgipass
                    }
                }

        5、root
            設置web資源路徑映射;用於指明請求的URL所對應的文檔的根目錄路徑;

            location /images/ {
                root "/web/imgs/";
            }

        6、alias path
            用於location配置段,定義路徑別名 

            location /images/ {
                alias /www/pictures/;
            }
            http://www.zhanx.wang/image/a.jpg  <--- /www/pictures/a.jpg

            註意:root表示指明路徑為對應location的“ /” URL;
            alias表示路徑映射,即location中的URL是相對於alias所指明的路徑而言;

        7、index file
            默認主頁面
                index  index.php  index.html; 

        8、error_page code [...] [=code] URI | @name
            根據http狀態碼重定向錯誤頁面
            error_page  404   /404.html

            =[code]: 以指定的響應碼進行響應;省略code表示以新資源的響應碼為響應碼;

        9、try_files
            try_files path1[,path2,...] URI 

        10、基於IP地址的訪問控制;
            allow IP/Network;
            deny  IP/Network;

        11、基於用戶的訪問控制;
            basic,digest

            auth_basic  "";
            auth_basic_user_file "/PATH/TO/PASSWORD_FILE"
                賬號密碼文件建議使用htpasswd來創建;

        12、https服務
            生成私鑰

        13、stub_status {on|off};
            僅能用於location上下文;

            location /status {
                stub_status on;
                allow 172.16.0.0/16;
                deny  all;
            }

            結果示例:

            Active connection: 6 #當前所有處於打開狀態的連接數;
            server accepts handled requests
            241    241     431
            (1)已經接受的連接
            (2)已經處理過的連接數
            (3)已經處理過的請求數:在“保持連接”模式下,請求數量可能會多於連接數量;
            Reading:0 Writing:1 Waiting:5
                Reading:正處於接收請求狀態的連接數;
                Writing:請求已經接收完成,正在處理請求或發送響應的過程中的連接數;
                waiting:保持連接模式,且處於活動狀態的連接數;

        14、rewrite regex replacement flag;

            例如:
                ...
                rewrite ^/images/(.*\.jpg)$ /imgs/$1 last;
                rewrite ^/imgs/(.*\.jpg)$ /images/$1 last;

                ...
                rewrite ^/images/(.*\.jpg)$ /imgs/$1 break;
                ...

                http://www.zhanx.wang/image/a/b/c/1.jpg --> /imgs/a/b/c/1.jpg

            flag:
                last:一旦此rewrite規則重寫完成後,就不再被後面其它的rewrite規則進行處理,而是由user
                    Agent重新對重寫後的url再一次發起請求,並從頭開始執行類似的過程
                break:一旦此rewrite規則重寫完成後,由user 
                    Agent 對新的URl重新發起請求,且不再會被當前location內的任何rewrite規則所檢查
                redirect:以302響應碼(臨時重定向)返回新的URL;
                permanent:以301響應碼(永久重定向)返回新的URL;

        15、if
            語法:if(condition){...}
            應用環境:server,location

            condition:
                (1) 變量名:
                    變量值為空串,或者以“0”開始,則為false;其他的均為true;
                (2) 以變量為操作數構成的比較表達式
                    可使用=,!=類似的比較操作符進行測試
                (3) 正則表達式的模式匹配操作
                    ~:區分大小寫的模式匹配檢查
                    ~*:不區分大小寫的模式匹配檢查
                    !~和!~*: 對上面兩種測試取反
                (4) 測試路徑為文件可能性:-f,!-f
                (5) 測試指定路徑為目錄的可能性:-d, !-d
                (6) 測試文件的存在性: -e, !-e
                (7) 檢查文件是否有執行權限:-x,!-x

            例如:
                if ($http_user_agent ~* MSIE) {
                    rewrite ^(.*)$ /msie/$1 break;
                }

        16、防盜鏈
            location ~* \.(jpg|gif|jpeg|png)$ {
                valid_referer none blocked www.zhanx.wang
                if ($invalid_referer) {
                    rewrite ^/ http://www.zhanx.wang/403.html      #(盜鏈提示)
                }
            }

        17、定制訪問日誌格式
                log_format  main  ‘$remote_addr - $remote_user [$time_local] "$request" ‘
                                  ‘$status $body_bytes_sent "$http_referer" ‘
                                  ‘"$http_user_agent" "$http_x_forwarded_for"‘;

                access_log  /var/log/nginx/access.log  main;

            註意:此處可用變量為Nginx各模塊內建變量;

    網絡連接相關的配置:
        1、keepalive_timeout time;
            保持連接的超時時長,默認為75s;

        2、keepalive_requests #;
            在一次保持連接上允許承載最大資源請求數;

        3、keepalive_disable [msie6|safari|none]
            為指定類型的瀏覽器禁用長連接;

        4、tcp_nodelay on|off
            對長連接是否使用TCP_NODELAY選項;

        5、client_header_timeout time;
            讀取http請求報文首部的超時時長;

        6、client_body_timeout time;
            讀取http請求報文body部分的超時時長;

        7、send_timeout time;
            發送響應報文的超時時長;

Nginx配置段(3)