2-3-運維必備核心技能-nginx配置文件全面講解

aio這種邏輯通常只能在磁盤io上實現
綁定8顆cpu中的後4顆,從0開始
掩碼爲
四、0001 0000
五、0010 0000
六、0100 0000
七、1000 0000
看哪一個進程運行在哪一個cpu上
ps axo comm,pid,psr | grep nginx
watch -n.5 'ps axo comm,pid,psr | grep nginx'動態觀測0.5秒這個命令的執行結果
沒有人訪問,因此可能不會變化
yum install -y httpd-tools
ab -n 10000 -c 100 http://172.16.0.67/index.html---進行壓力測試,看有沒有變化
nginx的配置文件中能夠按順序綁定cpu
woker_cpu_affinity 1000 0100 0010 0001;---綁定的順序就是3210
nginx -t
nginx -s reload
再次運行watch命令,能夠看到綁定順序3210html

ps axo comm,pid,psr,ni | grep nginx
nice值默認都是0---優先級,對應的是120
調整nice值從-20到19,對應優先級從100到139
手動調整worker進程的優先級
配置文件中:worker_priority -5;對應的優先級就是115node

worker_rlimit_nofile number 65536;最大65536,但不必定打開這麼多
一個進程:一個文件打開一個鏈接就須要維持一個套接字;一個進程worker可以響應1024個併發請求,就要維持1024個套接字,若是須要可以響應1024個併發,就須要支持能打開這麼多套接字,那麼nginx的用戶就必需要調高他所能打開文件的套接字,至少要調到大於進程數*單個進程能打開的文件數linux

視頻中的課件,接上一節課
三、worker_priority number:
指定worker進程的nice值,設定worker進程優先級;[-20,20]
四、worker_rlimit_nofile number;
worker進程所可以打開的文件數量上限
調試、定位問題:
一、daemon on | off
是否以守護進程方式運行nginx;centos6須要打開,7就不須要了,由於是經過systemd方式來監控的
二、master_process on | off---若是是off就是一個進程,爲了調試
是否以master/worker模型運行nginx;默認爲on
三、error_log file [level];---不適用rsyslog,由於信息量比較大
事件驅動相關的配置
event {---仍然屬於主配置段
...
}
一、worker_connections number;
每一個worker進程所可以打開的最大併發鏈接數數量---默認1024
worker processes worker_connections
二、use_method:
指明併發鏈接請求的方法---兩種select() 和epoll
use epoll;---通常使用epoll
三、accept_mutex on | off---mutex:互斥鎖,意味着資源獨佔,釋放後才能另外一個用
處理新的鏈接請求的方法;on意味着由各worker輪流處理新請求,起點公平;off:誰先拿到誰處理,意味着每一個新請求的到達都會通知全部的worker進程;結果公平;
http協議的相關配置:
http {
......
server {
...
server_name
root
location [OPERATOR] /usr/ {
...
}
}
server {
......
}
}
與套接字相關的配置:---指經過哪一個端口來接收用戶請求
一、server {...}---只能用在http這個上下文中
配置一個虛擬主機;
server {
listen address[:PORT] | PORT;
server_name SERVER_NAME;
root /PATH/TO/DOCUMENT_ROOT;---是web服務器時定義本地文檔路徑映射
proxy_pass http://192.168.10.2 ---意味着對整個端口的請求包括不管什麼url的全部請求都反代給這個服務器,這樣root這一行就沒有用了
}
二、listen PORT | address[:PORT] | unix:/PATH/TO/SOCKET_FILE---第一種:能夠監聽在地址上(默認端口)、第二種:在端口上(本地的全部地址),不要加冒號、第三種:unix的路徑,只能經過127.0.0.1迴環接口訪問,不支持遠程訪問,這種幾乎沒有用
listen address[:PORT] [default_server] [ssl] [http2 | spdy] [backlog=number] [rcvbuf=size] [sndbuf=size]
default_server:設定爲默認虛擬主機
ssl:限制僅可以經過ssl鏈接提供服務,必須經過https協議訪問,強制安全通信時必須加,經過此端口訪問必須基於ssl的實現,就是443端口也要加上ssl後綴
backlog=number:後援隊列長度,超過1024個之後排隊能排多長
rcvbuf=size:接收緩衝區大小
sndbuf=size:發送緩衝區大小
三、server_name name...
指明虛擬主機的主機名稱,後可跟多個由空白字符分隔的字符串
支持
通配任意長度的任意字符;server_name .magedu.com www.magedu.
支持~起始的字符作正則表達式模式匹配;server_name ~^www\d+.magedu.com$---\d表示[0~9],+表示匹配至少一個字符.表示.這個字符,以www開頭,至少一個數字,以com結尾
匹配順序:
(1)首先是字符串精確匹配
(2)左側通配符
(3)右側
通配符
(4)正則表達式
練習:定義四個虛擬主機,混合使用三種類型的虛擬主機;---基於ip、端口、主機名
僅開放給來自本地網絡中的主機訪問
45選項要on
四、tcp_nodelay on | off---保持一個鏈接,可能會請求多個資源,若是請求一個很小的資源攢着再發送會很是影響用戶體驗(一個資源只有幾KB,過小了,用戶感受到達時間有延遲),一個數據包包含好幾個小文件。nodelay就是請求一個發一個,僅對長鏈接(保持鏈接)有效,非保持鏈接開了這項也沒有用
在keepalived模式下的鏈接是否啓用TCP_NODELAY選項---只對保持鏈接有效
五、sendfile on | off
是否啓用sendfile功能
tcp_nopush on | off---一、響應報文首部和整個文件的起始內容放在一個報文中發送二、在一個報文中發送一個文件而不是分開來發送
只有sendfile on時纔有效。內核能封裝傳輸層首部,不能封裝應用層,所以開啓這個選項先封裝傳輸層再等待應用層而後一塊打包發送,而且這個報文不用送往用戶空間去了
在sendfile模式下,是否啓用TCP_CORK選項;是否等待應用層首部合併起來一併發送
keepalive_timeout 65---保持鏈接的超時時間
保持鏈接應該有兩部分的限制,包括時間跟數量,默認是能夠打開100個資源,而且保持75s
types_hash max_size 2048;---基於hash碼比較有沒有這種類型的資源,而後把hash值裝入內存,速度特別快,這裏是請求多少內存空間
保存類型的hash值的最大值,單位是個
types:資源類型,內容類型,nginx內部爲了加速某個資源的訪問,manytypes文件是直接被裝入內存的,在內存中就能夠知道資源是什麼類型了(每個類型在hash之後比較)
定義路徑相關的配置
六、root path---至關於document root
設置web資源路徑映射:用於指明用戶請求的url所對應的本地文件系統上的文檔所在目錄路徑;可用的位置:http(全部server都使用同一個root設定),server(能夠覆蓋全局設定),location,if in location
七、location [ = | ~ | ~ | ^~ ] url {...}---用來指定url的各類訪問屬性的--------------59:51min不明白★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
location後邊跟url會設置一個新的上下文,可是隻對這一個location有效---location能夠定義root,覆蓋掉外邊的root,若是可以匹配,才生效
在一個server中location配置段可存在多個,用於實現從url到文件系統的路徑映射;nginx會根據用戶請求的uri來檢查定義的全部location,並找出一個最佳匹配,然後應用其配置
=:對URI作精確匹配,例如:http://www.magedu.com/ ,http://www.magedu.com/index.html
loction = / {---等於根和是根意義不一樣,等於根就是根,是根表示以根起始的內容
...
}
~:對URI作正則表達式模式匹配,區分字符大小寫
~
:對URI作正則表達式模式匹配,不區分字符大小寫
^~:對URI的左半部分作匹配檢查,不區分字符大小寫---能夠理解爲不是正則表達式模式的檢查機制
不帶符號:匹配起始於此url的全部的urlnginx

find /usr/share -iname "*.jpg" -exec cp {} ./ \---找目錄中全部的jpg文件並複製到當前目錄
                    curl http://www.ilinux.io/index.html----訪問網址

                    匹配優先級:=,^~,~或者~*,不帶符號
                    root ^/hosts/www/htdocs/
                        http://www.magedu.com/index.html-->/vhosts/www/htdocs/index.html

                    server {
                        root /vhosts/www/htdocs/
                    }
                    例子:jpg或png資源不但願172.16.0.68的訪問,容許其餘全部主機訪問
                    location  ~* \.(jpg | png) {
                        deny 172.16.0.68;
                        allow all;
                    }
                    例子:
                    location /images/ {---這裏定義的root是images前邊的/符號,
                        root /data/pictures/;
                    }
                    例子:
                    location /images/ {---這裏定義的alias是images後邊的/符號,
                        alias /data/pictures/;
                    }
                八、alias path:
                    定義路徑別名,文檔映射的另外一種機制,僅能用於location上下文
                    注意:location中使用root指令和alias指令的意義不一樣
                    (a)root,給定的路徑對應於location中的/url/左側的/
                    (b)alias,給定的路徑對應於location中的/url/右側的/
                九、index file ...---默認主頁,能夠定義多個,自左而右
                    默認資源;http,server,location
                十、error_page code ...[=[response]] url
                    Defines the URL that will be shown for the specified errors
                    例子:
                    error page 404 /404.html;
                        location = /40x.html {
                    }

                    error page 500 502 503 504 /50x.html;
                        location = /50x.html {
                    }

                    error page 404 /notfound.html;---若是訪問404錯誤頁面,定義location(從×××自定義的網頁)
                        location = /notfound.html {---自定義根的位置---1:20:21min
                            root /data/nginx/error_pages;---這個目錄下存放notfound.html文件
                    }

                    error page 404 =200 /notfound.html;---若是訪問404錯誤頁面,定義location(從×××自定義的網頁),修改狀態碼爲200(404變200)
                        location = /notfound.html {---自定義根的位置---1:20:21min
                            root /data/nginx/error_pages;---這個目錄下存放notfound.html文件
                    }
                十一、try_files file ... url
相關文章
相關標籤/搜索