摘要:常用配置項在工作中,我們與打交道更多的是通過其配置文件來進行。設(shè)置毎個進程的最大文件打開數(shù)。設(shè)置事件驅(qū)動模型使用。是支持的高性能事件驅(qū)動庫之一。必須和搭配使用。其他配置里有這一項,它是用來根據(jù)請求中的來為其匹配相應(yīng)的處理規(guī)則。
常用配置項
在工作中,我們與 Nginx 打交道更多的是通過其配置文件來進行。那么掌握這些配置項各自的作用就很有必要了。
首先,nginx.conf 的內(nèi)容通常是這樣的:
... ... #核心摸塊 events { #事件模塊 ... } http { # http 模塊 server { # server塊 location [PATTERN] { # location塊 ... } location [PATTERN] { ... } } server { ... } } mail { # mail 模塊 server { # server塊 ... } }
我們依次看一下每個模塊一般有哪些配置項:
核心模塊user admin; #配置用戶或者組。 worker_processes 4; #允許生成的進程數(shù),默認為1 pid /nginx/pid/nginx.pid; #指定 nginx 進程運行文件存放地址 error_log log/error.log debug; #錯誤日志路徑,級別。事件模塊
events { accept_mutex on; #設(shè)置網(wǎng)路連接序列化,防止驚群現(xiàn)象發(fā)生,默認為on multi_accept on; #設(shè)置一個進程是否同時接受多個網(wǎng)絡(luò)連接,默認為off use epoll; #事件驅(qū)動模型select|poll|kqueue|epoll|resig worker_connections 1024; #最大連接數(shù),默認為512 }http 模塊
http { include mime.types; #文件擴展名與文件類型映射表 default_type application/octet-stream; #默認文件類型,默認為text/plain access_log off; #取消服務(wù)日志 sendfile on; #允許 sendfile 方式傳輸文件,默認為off,可以在http塊,server塊,location塊。 sendfile_max_chunk 100k; #每個進程每次調(diào)用傳輸數(shù)量不能大于設(shè)定的值,默認為0,即不設(shè)上限。 keepalive_timeout 65; #連接超時時間,默認為75s,可以在http,server,location塊。 server { keepalive_requests 120; #單連接請求上限次數(shù)。 listen 80; #監(jiān)聽端口 server_name 127.0.0.1; #監(jiān)聽地址 index index.html index.htm index.php; root your_path; #根目錄 location ~ .php$ { fastcgi_pass unix:/var/run/php/php7.1-fpm.sock; #fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; include fastcgi_params; } } }配置項解析
worker_processes
worker_processes 用來設(shè)置 Nginx 服務(wù)的進程數(shù)。該值推薦使用 CPU 內(nèi)核數(shù)。
worker_cpu_affinity
worker_cpu_affinity 用來為每個進程分配CPU的工作內(nèi)核,參數(shù)有多個二進制值表示,每一組代表一個進程,每組中的每一位代表該進程使用CPU的情況,1代表使用,0代表不使用。所以我們使用 worker_cpu_affinity 0001 0010 0100 1000;來讓進程分別綁定不同的核上。默認情況下worker進程不綁定在任何一個CPU上。
worker_rlimit_nofile
設(shè)置毎個進程的最大文件打開數(shù)。如果不設(shè)的話上限就是系統(tǒng)的 ulimit –n的數(shù)字,一般為65535。
worker_connections
設(shè)置一個進程理論允許的最大連接數(shù),理論上越大越好,但不可以超過 worker_rlimit_nofile 的值。
use epoll
設(shè)置事件驅(qū)動模型使用 epoll。epoll 是 Nginx 支持的高性能事件驅(qū)動庫之一。是公認的非 常優(yōu)秀的事件驅(qū)動模型。
accept_mutex off
關(guān)閉網(wǎng)絡(luò)連接序列化,當其設(shè)置為開啟的時候,將會對多個 Nginx 進程接受連接進行序列化,防止多個進程對連接的爭搶。當服務(wù)器連接數(shù)不多時,開啟這個參數(shù)會讓負載有一定程度的降低。但是當服務(wù)器的吞吐量很大時,為了效率,請關(guān)閉這個參數(shù);并且關(guān)閉這個參數(shù)的時候也可以讓請求在多個 worker 間的分配更均衡。所以我們設(shè)置 accept_mutex off;
multi_accept on
設(shè)置一個進程可同時接受多個網(wǎng)絡(luò)連接
Sendfile on
Sendfile是 Linux2.0 以后的推出的一個系統(tǒng)調(diào)用,它能簡化網(wǎng)絡(luò)傳輸過程中的步驟,提高服務(wù)器性能。
不用 sendfile的傳統(tǒng)網(wǎng)絡(luò)傳輸過程:
硬盤 >> kernel buffer >> user buffer >> kernel socket buffer >> 協(xié)議棧
用 sendfile()來進行網(wǎng)絡(luò)傳輸?shù)倪^程:
硬盤 >> kernel buffer (快速拷貝到 kernelsocket buffer) >>協(xié)議棧
tcp_nopush on;
設(shè)置數(shù)據(jù)包會累積一下再一起傳輸,可以提高一些傳輸效率。 tcp_nopush 必須和 sendfile 搭配使用。
tcp_nodelay on;
小的數(shù)據(jù)包不等待直接傳輸。默認為on。?看上去是和 tcp_nopush 相反的功能,但是兩邊都為 on 時 nginx 也可以平衡這兩個功能的使用。
keepalive_timeout
HTTP 連接的持續(xù)時間。設(shè)的太長會使無用的線程變的太多。這個根據(jù)服務(wù)器訪問數(shù)量、處理速度以及網(wǎng)絡(luò)狀況方面考慮。
send_timeout
設(shè)置 Nginx 服務(wù)器響應(yīng)客戶端的超時時間,這個超時時間只針對兩個客戶端和服務(wù)器建立連接后,某次活動之間的時間,如果這個時間后,客戶端沒有任何活動,Nginx服務(wù)器將關(guān)閉連接
gzip on
啟用 gzip,對響應(yīng)數(shù)據(jù)進行在線實時壓縮,減少數(shù)據(jù)傳輸量。
gzip_disable "msie6"
Nginx服務(wù)器在響應(yīng)這些種類的客戶端請求時,不使用 Gzip 功能緩存應(yīng)用數(shù)據(jù),gzip_disable “msie6”對IE6瀏覽器的數(shù)據(jù)不進行 GZIP 壓縮。
常用的配置項大致這些,對于不同的業(yè)務(wù)場景,有的需要額外的其他配置項,這里不做展開。
其他http 配置里有 location 這一項,它是用來根據(jù)請求中的 uri 來為其匹配相應(yīng)的處理規(guī)則。
location 查找規(guī)則location = / { # 精確匹配 / ,主機名后面不能帶任何字符串 [ config A ] } location / { # 因為所有的地址都以 / 開頭,所以這條規(guī)則將匹配到所有請求 # 但是正則和最長字符串會優(yōu)先匹配 [ config B ] } location /documents/ { # 匹配任何以 /documents/ 開頭的地址,匹配符合以后,還要繼續(xù)往下搜索 # 只有后面的正則表達式?jīng)]有匹配到時,這一條才會采用這一條 [ config C ] } location ~ /documents/Abc { # 匹配任何以 /documents/Abc 開頭的地址,匹配符合以后,還要繼續(xù)往下搜索 # 只有后面的正則表達式?jīng)]有匹配到時,這一條才會采用這一條 [ config CC ] } location ^~ /images/ { # 匹配任何以 /images/ 開頭的地址,匹配符合以后,停止往下搜索正則,采用這一條。 [ config D ] } location ~* .(gif|jpg|jpeg)$ { # 匹配所有以 gif,jpg或jpeg 結(jié)尾的請求 # 然而,所有請求 /images/ 下的圖片會被 config D 處理,因為 ^~ 到達不了這一條正則 [ config E ] } location /images/ { # 字符匹配到 /images/,繼續(xù)往下,會發(fā)現(xiàn) ^~ 存在 [ config F ] } location /images/abc { # 最長字符匹配到 /images/abc,繼續(xù)往下,會發(fā)現(xiàn) ^~ 存在 # F與G的放置順序是沒有關(guān)系的 [ config G ] } location ~ /images/abc/ { # 只有去掉 config D 才有效:先最長匹配 config G 開頭的地址,繼續(xù)往下搜索,匹配到這一條正則,采用 [ config H ] }
正則查找優(yōu)先級從高到低依次如下:
“ = ” 開頭表示精確匹配,如 A 中只匹配根目錄結(jié)尾的請求,后面不能帶任何字符串。
“ ^~ ” 開頭表示uri以某個常規(guī)字符串開頭,不是正則匹配
“ ~ ” 開頭表示區(qū)分大小寫的正則匹配;
“ ~* ”開頭表示不區(qū)分大小寫的正則匹配
“ / ” 通用匹配, 如果沒有其它匹配,任何請求都會匹配到
負載均衡配置Nginx 的負載均衡需要用到 upstream 模塊,可通過以下配置來實現(xiàn):
upstream test-upstream { ip_hash; # 使用 ip_hash 算法分配 server 192.168.1.1; # 要分配的 ip server 192.168.1.2; } server { location / { proxy_pass http://test-upstream; } }
上面的例子定義了一個 test-upstream 的負載均衡配置,通過 proxy_pass 反向代理指令將請求轉(zhuǎn)發(fā)給該模塊進行分配處理。
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://www.ezyhdfw.cn/yun/40361.html
摘要:常用配置項在工作中,我們與打交道更多的是通過其配置文件來進行。設(shè)置毎個進程的最大文件打開數(shù)。設(shè)置事件驅(qū)動模型使用。是支持的高性能事件驅(qū)動庫之一。必須和搭配使用。其他配置里有這一項,它是用來根據(jù)請求中的來為其匹配相應(yīng)的處理規(guī)則。 常用配置項 在工作中,我們與 Nginx 打交道更多的是通過其配置文件來進行。那么掌握這些配置項各自的作用就很有必要了。 首先,nginx.conf 的內(nèi)容通常...
摘要:常用配置項在工作中,我們與打交道更多的是通過其配置文件來進行。設(shè)置毎個進程的最大文件打開數(shù)。設(shè)置事件驅(qū)動模型使用。是支持的高性能事件驅(qū)動庫之一。必須和搭配使用。其他配置里有這一項,它是用來根據(jù)請求中的來為其匹配相應(yīng)的處理規(guī)則。 常用配置項 在工作中,我們與 Nginx 打交道更多的是通過其配置文件來進行。那么掌握這些配置項各自的作用就很有必要了。 首先,nginx.conf 的內(nèi)容通常...
摘要:請求的多階段異步處理多階段異步處理請求與事件驅(qū)動架構(gòu)是密切相關(guān)的,也就是說,請求的多階段異步處理只能基于事件驅(qū)動架構(gòu)實現(xiàn)。 前言 最近在讀 Nginx 相關(guān)的書籍,做一下讀書筆記。 Nginx 作為業(yè)界知名的高性能服務(wù)器,被廣泛的應(yīng)用。它的高性能正是由于其優(yōu)秀的架構(gòu)設(shè)計,其架構(gòu)主要包括這幾點:模塊化設(shè)計、事件驅(qū)動架構(gòu)、請求的多階段異步處理、管理進程與多工作進程設(shè)計、內(nèi)存池的設(shè)計,以下內(nèi)...
摘要:請求的多階段異步處理多階段異步處理請求與事件驅(qū)動架構(gòu)是密切相關(guān)的,也就是說,請求的多階段異步處理只能基于事件驅(qū)動架構(gòu)實現(xiàn)。 前言 最近在讀 Nginx 相關(guān)的書籍,做一下讀書筆記。 Nginx 作為業(yè)界知名的高性能服務(wù)器,被廣泛的應(yīng)用。它的高性能正是由于其優(yōu)秀的架構(gòu)設(shè)計,其架構(gòu)主要包括這幾點:模塊化設(shè)計、事件驅(qū)動架構(gòu)、請求的多階段異步處理、管理進程與多工作進程設(shè)計、內(nèi)存池的設(shè)計,以下內(nèi)...
摘要:常規(guī)的網(wǎng)絡(luò)應(yīng)用設(shè)計都是為每個連接分配一個線程或進程。深入理解進程每個進程都是用配置進行初始化的,并且由主進程提供了一組監(jiān)聽套接字。套接字上發(fā)生事件后,進程開始進行處理監(jiān)聽套接字上的事件意味著有個客戶端發(fā)起了一盤新的象棋游戲。 NGINX在web性能上的表現(xiàn)尤為出眾,這完全得益于其設(shè)計方式,許多web和應(yīng)用服務(wù)器都是基于線程或進程這種簡單的架構(gòu),NGINX用了一種精妙的事件驅(qū)動架構(gòu),在現(xiàn)...
閱讀 1126·2021-11-22 15:35
閱讀 1756·2021-10-26 09:49
閱讀 3301·2021-09-02 15:11
閱讀 2138·2019-08-30 15:53
閱讀 2696·2019-08-30 15:53
閱讀 2989·2019-08-30 14:11
閱讀 3583·2019-08-30 12:59
閱讀 3299·2019-08-30 12:53