1. 程式人生 > >2-3-運維必備核心技能-nginx配置文件全面講解

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

××× 文件系統 多個 off 限制 .html 按順序 目錄 長度

aio這種邏輯一般只能在磁盤io上實現
綁定8顆cpu中的後4顆,從0開始
掩碼為
4、0001 0000
5、0010 0000
6、0100 0000
7、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命令,可以看到綁定順序3210

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

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

視頻中的課件,接上一節課
3、worker_priority number:
指定worker進程的nice值,設定worker進程優先級;[-20,20]
4、worker_rlimit_nofile number;
worker進程所能夠打開的文件數量上限
調試、定位問題:
1、daemon on | off
是否以守護進程方式運行nginx;centos6需要打開,7就不需要了,因為是通過systemd方式來監控的
2、master_process on | off---如果是off就是一個進程,為了調試
是否以master/worker模型運行nginx;默認為on
3、error_log file [level];---不適用rsyslog,因為信息量比較大

事件驅動相關的配置
event {---仍然屬於主配置段
...
}
1、worker_connections number;
每個worker進程所能夠打開的最大並發連接數數量---默認1024
worker processes worker_connections
2、use_method:
指明並發連接請求的方法---兩種select() 和epoll
use epoll;---一般使用epoll
3、accept_mutex on | off---mutex:互斥鎖,意味著資源獨占,釋放後才能另一個用
處理新的連接請求的方法;on意味著由各worker輪流處理新請求,起點公平;off:誰先拿到誰處理,意味著每個新請求的到達都會通知所有的worker進程;結果公平;
http協議的相關配置:
http {
......
server {
...
server_name
root
location [OPERATOR] /usr/ {
...
}
}
server {
......
}
}
與套接字相關的配置:---指通過哪個端口來接收用戶請求
1、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這一行就沒有用了
}
2、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:發送緩沖區大小
3、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
4、tcp_nodelay on | off---保持一個連接,可能會請求多個資源,如果請求一個很小的資源攢著再發送會非常影響用戶體驗(一個資源只有幾KB,太小了,用戶感覺到達時間有延遲),一個數據包包含好幾個小文件。nodelay就是請求一個發一個,僅對長連接(保持連接)有效,非保持連接開了這項也沒有用
在keepalived模式下的連接是否啟用TCP_NODELAY選項---只對保持連接有效
5、sendfile on | off
是否啟用sendfile功能
tcp_nopush on | off---1、響應報文首部和整個文件的起始內容放在一個報文中發送2、在一個報文中發送一個文件而不是分開來發送
只有sendfile on時才有效。內核能封裝傳輸層首部,不能封裝應用層,因此開啟這個選項先封裝傳輸層再等待應用層然後一塊打包發送,並且這個報文不用送往用戶空間去了
在sendfile模式下,是否啟用TCP_CORK選項;是否等待應用層首部合並起來一並發送
keepalive_timeout 65---保持連接的超時時間
保持連接應該有兩部分的限制,包括時間跟數量,默認是可以打開100個資源,並且保持75s
types_hash max_size 2048;---基於hash碼比較有沒有這種類型的資源,然後把hash值裝入內存,速度特別快,這裏是請求多少內存空間
保存類型的hash值的最大值,單位是個
types:資源類型,內容類型,nginx內部為了加速某個資源的訪問,manytypes文件是直接被裝入內存的,在內存中就可以知道資源是什麽類型了(每一個類型在hash以後比較)
定義路徑相關的配置
6、root path---相當於document root
設置web資源路徑映射:用於指明用戶請求的url所對應的本地文件系統上的文檔所在目錄路徑;可用的位置:http(所有server都使用同一個root設定),server(可以覆蓋全局設定),location,if in location
7、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的所有的url

                    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/;
                    }
                8、alias path:
                    定義路徑別名,文檔映射的另一種機制,僅能用於location上下文
                    註意:location中使用root指令和alias指令的意義不同
                    (a)root,給定的路徑對應於location中的/url/左側的/
                    (b)alias,給定的路徑對應於location中的/url/右側的/
                9、index file ...---默認主頁,可以定義多個,自左而右
                    默認資源;http,server,location
                10、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文件
                    }
                11、try_files file ... url

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