摘要:本博客首發(fā)在,后因各種原因遷移至先來一波官方站點關(guān)于介紹。同時擁有一套緩存機制,可以進一步降低網(wǎng)絡(luò)壓力,加速用戶響應(yīng)。主配置文件中,使用命令引用分支配置文件。接收到一個請求后,先與所有標準進行匹配,并記錄匹配度最高的一個。
本博客首發(fā)在cnblogs,后因各種原因遷移至segmentfault
先來一波官方站點關(guān)于nginx介紹。nginx相關(guān)歷史這里不再贅述啦。
1、 了解nginx架構(gòu)nginx 是免費,開源,高性能 HTTP 服務(wù)器和反向代理服務(wù)器,也可作為IMAP/POP3代理服務(wù)器。nginx以它的高性能,穩(wěn)定性,豐富的特征設(shè)定,配置簡單和資源消耗低而著稱。
nginx是為數(shù)不多可以解決C10K問題的服務(wù)器。不像傳統(tǒng)服務(wù)器,nginx不依賴線程處理請求。它使用的是更為高明事件驅(qū)動(異步)架構(gòu)。在高負荷下,也能保持低消耗,更重要的是可預(yù)估的內(nèi)存占用量。如果你不期望去解決上千的并發(fā)請求難題,你也可以從nginx的高性能,低消耗而嘗到好處。nginx應(yīng)用規(guī)??纱罂尚。盒≈?VPS,大至組建服務(wù)器集群。
nginx為什么是高性能,低消耗的,可解決高并發(fā)問題
首先是master/worker二層架構(gòu),master負責加載配置文件、管理worker進程、平滑升級;worker負責 處理請求。而且是基于事件驅(qū)動模型設(shè)計的處理模型,這使得
worker數(shù)量和cpu核心數(shù)相當即可,但是一個worker進程可以同時處理多個請求,在高并發(fā)訪問的情況下使用較少的資源從容應(yīng)對。
簡單來講,異步非阻塞,事件驅(qū)動機制是其核心特征。
同時nginx擁有一套緩存機制,可以進一步降低網(wǎng)絡(luò)壓力,加速用戶響應(yīng)。
模塊化設(shè)計
nginx總體設(shè)計理念秉承模塊化設(shè)計思想,把各功能細分模塊進行開發(fā),實現(xiàn)靈活地裝卸載所需模塊,方便后續(xù)功能拓展。
nginx模塊 分為五類
1)核心模塊
2)標準http模塊
3)可選http模塊
4)mail模塊
5)第三方模塊
2、安裝nginxrpm包,官方預(yù)制,下載地址: http://nginx.org/packages
編譯安裝:編譯安裝根據(jù)需要選擇編譯的模塊,因人而異,下例僅供參考
yum install pcre-devel openssl-devel zlib-devel useradd -r nginx ./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_ssl_module --with-http_v2_module --with-http_dav_module --with-http_stub_status_module --with-threads --with-file-aio make && make install3、了解nginx配置
主配置文件:nginx.conf從此處為入口,開始你的nginx配置吧。主配置文件中,使用include命令引用分支配置文件。
nginx配置風格為劃地而治,要嚴格按照模塊為區(qū)域進行配置
配置結(jié)構(gòu)如下:
main block:主配置段,也即全局配置段;
event {
...
事件驅(qū)動相關(guān)的配置;
}
http {
...
http/https 協(xié)議相關(guān)的配置段;
}
mail {
...
mail相關(guān)模塊
}
stream {
...
tcp/udp 傳輸層負載均衡配置段;
}
再來講講配置語法
directive value...; #語法格式
(1) 指令必須以分號結(jié)尾;
(2) 支持使用配置變量;
內(nèi)建變量:由Nginx模塊引入,可直接引用;
自定義變量:由用戶使用set命令定義;
set variable_name value;
引用變量:$variable_name
內(nèi)建變量傳送門:http://nginx.org/en/docs/vari... 數(shù)量繁多,用起來也是非常方便滴,想用什么變量,來這里查查。
主配置段
1、定義進程用戶,用戶組
user username usergroup;
默認為nobody。 指定一個系統(tǒng)用戶。
2、定義主程序pid文件路徑
pid /PATH/TO/PID_FILE;
3、 引入分支配置文件
include file;
~ include conf.d/*.conf
“~”在本文中表示配置實例語句
4、裝載動態(tài)模塊
load_modulefile;
~ load_module modules/ngx_mail_module.so;
5、error 日志
error_logfile[level]
~ error_log logs/error.log info
5、主配置段中,性能調(diào)優(yōu)的指令1、指定worker數(shù)量
worker_processes number | auto;
數(shù)量最宜和cpu核心數(shù)相同。
2、綁定worker與cpu核心對應(yīng)關(guān)系
worker_cpu_affinity auto | cpumask;
如果不設(shè)置此項,worker會在不同的工作內(nèi)核上切換,這會造成不必要的開銷,將它們固定起來就好,一般設(shè)置為auto即可。
worker_cpu_affinity0001 0010 0100 1000 #指定cpumask例子
3、指定worker進程的nice值 范圍[-20,20]
worker_priority number;
4、設(shè)置worker打開文件數(shù)量限制
worker_rlimit_nofile number;
~ worker_rlimit_nofile 2390251
當然系統(tǒng)內(nèi)核參數(shù)要改大,sysctl -w fs.file-max=2390251;sysctl -p
6、Event 區(qū)域設(shè)置1、每個worker進程所能夠打開的最大并發(fā)連接數(shù)數(shù)量;
worker_connections number;
~ worker_connections 65535; #一般設(shè)置為65535,最大端口數(shù)量
2、指明并發(fā)連接請求的處理方法;
use method;
~ use epoll; #linux平臺
3、網(wǎng)絡(luò)連接序列化
accept_mutex on | off;
處理新的連接請求的方法;on表示開啟網(wǎng)絡(luò)連接序列化,避免“驚群”效應(yīng)——即一個新連接請求,所有worker進程都被激活。建議開啟
4、多路接收
multi_accept on|off;
on表示一個worker同時接受盡可能多的請求。建議開啟
7、Http區(qū)域設(shè)置---進階開始1、配置虛擬主機:server
使用server指令配置虛擬主機,一般格式如下:
server {
listen address[:PORT]|PORT;
server_name SERVER_NAME;
root /PATH/TO/DOCUMENT_ROOT;
}
1.1 listen 指令
配置監(jiān)聽地址,端口指令
有三種形式:
1) listen address[:port] [args..];
監(jiān)聽在指定IP,指定端口;當端口省略時,監(jiān)聽所有端口
2) listen port [args...];
監(jiān)聽主機所有IP的80端口
3) listen unix:path [args...];
監(jiān)聽unix socket,一種本機內(nèi)部通信IPC機制,非重點。
-----介紹上面[args] 內(nèi)容:
listen address[:port] [default_server] [ssl] [http2 | spdy] [backlog=number] [rcvbuf=size] [sndbuf=size]
default_server: 標識符,表示此虛擬主機為address:port 的默認主機
ssl:標識符,虛擬主機使用https協(xié)議通信時,標識此項
backlog=number:設(shè)置允許同時最大網(wǎng)絡(luò)監(jiān)聽連接處于掛起狀態(tài)的個數(shù),默認為511
rcvbuf=size:設(shè)置監(jiān)聽socket接收緩沖區(qū)大小
sndbuf=size:設(shè)置監(jiān)聽socket發(fā)送緩沖區(qū)大小
-----小結(jié):
一般listen 指令無需太過復(fù)雜
~ listen 10.1.0.1:8080 default_server backlog=1024
~ listen 8080;
1.2 server_name 指令
使用server_name 指令配置基于名稱或基于IP的虛擬主機
1)基于名稱的虛擬主機
格式: server_name name... 允許跟多個名稱,空格符分隔
------name支持glob通配符*
*可以出現(xiàn)在三段式名稱中的首段或尾段;以及兩段式名稱中的尾段
server_name *.cutemsyu.com www.cutemsyu.* cutemsyu.*;
------name支持正則表達式~
以~起始表示正則表達式標記
server_name ~^wwwd+.cutemsyu.com$
其中d代表數(shù)字0-9,像這樣的表達式可匹配www1.cutemsyu.com,www2.cutemsyu.com 等等
拓展:nginx 支持name 正則表達式字符捕捉功能
server_name ~^(1+).cutemsyu.com$
如此定義,當該表示式匹配www.cutemsyu.com 名稱時,在server塊中可使用$1 表示 www 字符串
-----關(guān)于一個名稱被多個表達式匹配的問題
如果一個主機配置多個虛擬主機,則有可能發(fā)生此種情況
nginx有如下server_name 匹配規(guī)定:
對于一個名稱匹配多個表達式情況,按以下規(guī)則處理,排在前面優(yōu)先級高
1.準確匹配
2.左側(cè)*通配符
3.右側(cè)*通配符
4.正則表達式
如果被同一級別的多個表達式匹配,則按第一個匹配的表達式處理
2)基于IP的虛擬主機
用法: server_name IP;
1.3 配置請求根目錄指令:root
root指令定義根路徑目錄,可定義在http,server,location塊;
語法:root path;
web服務(wù)器接收到請求后,首先在根目錄下尋找資源。后面會介紹location塊,root在location用到的情況比較多。
2、配置location塊
用法:
location [ = | ~ | ~* | ^~ ] uri { ... }
location @name { ... }
應(yīng)用在server塊中,或在location塊中嵌套使用。
在一個server中l(wèi)ocation配置段可存在多個,用于實現(xiàn)從uri到文件系統(tǒng)的路徑映射;ngnix會根據(jù)用戶請求的URI來檢查定義的所有l(wèi)ocation,并找出一個最佳匹配,而后應(yīng)用其配置;
uri部分方便下面敘述,稱不含正則表達式的uri為標準uri;反之,含有正則的uri稱為正則uri,而且正則uri 前必須使用~或~*。同時支持正則字符串捕捉,使用$1等應(yīng)用。
[ = | ~ | ~* | ^~ ] 這部分符號是具有特殊定義的符號,表示特定含義,可省略。
server接收到一個請求uri后,先與所有標準uri進行匹配,并記錄匹配度最高的一個。然后按序與正則uri進行匹配,匹配到第一個正則uri后,立即按相應(yīng)location塊處理。如果所有正則匹配失敗,則應(yīng)用之前記錄的標準uri對應(yīng)的location塊進行處理。
1) = 使用在標準uri前,表示精準匹配,如果請求uri與此對應(yīng),則該請求立即由該location塊進行處理,不再與正則uri匹配。
2) ~ 使用在正則uri前,并且區(qū)分大小寫字母
3) ~* 使用在正則uri前,不區(qū)分大小寫字母
4) ^~ 使用在標準uri前,要求與標準uri匹配,找到匹配度最高的一個后不進行與正則uri匹配
如,對于"/" 的請求較多的話,使用以下定義
location = / {
....
}
則能實現(xiàn)快速匹配。
看一看nginx官方文檔給出的例子:
location = / { [ configuration A ] } location / { [ configuration B ] } location /documents/ { [ configuration C ] } location ^~ /images/ { [ configuration D ] } location ~* .(gif|jpg|jpeg)$ { [ configuration E ] }
請求URI 應(yīng)用的location配置
/ configuration A
/index.html configuration B
/documents/document.html configuration C
/images/1.gif configuration D
/documents/1.jpg configuration E
至于@name 形式的location,是用來處理重定向類型的請求。在try_files 指令中會提到。
3、路徑重定向類的指令
3.1 路徑別名 alias
用法: alias path;
定義路徑別名,文檔映射的另一種機制;僅能用于location上下文。
與root 指令容易混淆。參考下面示例
location /data {
alias /documents/www;
?。?/p>
請求uri為/data/index.html,則nginx服務(wù)器將在路徑 /documents/www 下尋找index.html 文件。
3.2 設(shè)置網(wǎng)站默認首頁
作用是用戶不需輸入完整的uri來訪問默認主頁
用法: index filename... ;
可設(shè)置多個默認網(wǎng)頁,如果前一個頁面文件不存在則顯示下一頁面文件,以此類推。
3.3 錯誤頁面重定向
用法:error_page code ... [=[response]] uri|path;
當客戶端訪問遇到問題時,nginx支持自定義錯誤頁面顯示,并返回一個指定狀態(tài)碼,如果指定的話。
作用域為 http,server,location 。具有在子域有效的特征。
Example:
error_page 404 /404.html;
error_page 500 502 503 504 /50x.html;
此示例跳轉(zhuǎn)的資源使用相對路徑方式,意味著從定義的根路徑下查找文件。
Example:
error_page 404 =200 /empty.gif;
此示例指定轉(zhuǎn)換的狀態(tài)碼。
Example:
error_page 404 = /404.php;
如果響應(yīng)的錯誤狀態(tài)碼來自代理服務(wù)器,或者FastCGI/uwsgi/SCGI 服務(wù)器,應(yīng)使用該示例方式返回代理服務(wù)器返回的狀態(tài)碼。
Example:
error_page 403 http://example.com/forbidden....
error_page 404 =301 http://example.com/notfound.h...
該示例重定向為一個指定uri。此種情況重定向的狀態(tài)碼為302??尚薷臑?301,302,303,307。
3.4 嘗試查找文件
用法: try_files file ... uri;
try_files file ... =code;
按順序檢查文件,如果都不存在,則定向最后一個參數(shù)。最后一個參數(shù)如果是文件則必須存在;可以是狀態(tài)碼;內(nèi)部重定向。
example:
location /images/ { try_files $uri /images/default.gif; } location / { try_files $uri $uri/index.html $uri.html =404; }
example:重定向型
location / { try_files $uri $uri/ @wordpress; } location ~ .php$ { try_files $uri @wordpress; #這里使用重定向,如果請求的資源頁不在會自動跳轉(zhuǎn)@wordpress塊中的index.php。如果使用uri的話,不會顯示動態(tài)資源頁面。 fastcgi_pass ...; fastcgi_param SCRIPT_FILENAME /path/to$fastcgi_script_name; ... other fastcgi_param"s } location @wordpress { fastcgi_pass ...; fastcgi_param SCRIPT_FILENAME /path/to/index.php; ... other fastcgi_param"s }
4、套接字相關(guān)配置
作用域:http, server, location
4.1 tcp_nodelay on | off;
在keepalived模式下的連接是否啟用TCP_NODELAY選項;默認開啟;建議開啟
4.2 sendfile on|off;
是否開啟sendfile 特性,減少數(shù)據(jù)在內(nèi)核與用戶空間之間的copy次數(shù)。建議開啟。詳見標題6內(nèi)容
4.3 sendfile_max_chunk size;
worker process 每次調(diào)用sendfile() 傳輸數(shù)據(jù)的最大值,減少一次調(diào)用sendfile()最大阻塞時長,0為不限制,建議設(shè)置128K
5、定義客戶端請求的相關(guān)配置
作用域:http, server, location
5.1 keepalive_timeout timeout [header_timeout];
設(shè)定保持連接的超時時長,0表示禁止長連接;默認為75s;header_timeout 可選項,在應(yīng)答報文首部中表示keepalive超時時間
5.2 keepalive_requests number;
在一次長連接上所允許請求的資源的最大數(shù)量,默認為100;
5.3 keepalive_disable none | browser ...;
對哪種瀏覽器禁用長連接;
5.4 send_timeout time;
向客戶端發(fā)送響應(yīng)報文的超時時長,此處,是指兩次寫操作之間的間隔時長;如果客戶端在規(guī)定時長內(nèi)無任何活動則關(guān)閉連接
~ send_timeout 10s;
5.5 client_header_buffer_size size;
設(shè)置客戶端請求報文首部緩沖區(qū)大小,默認值為1K。有時客戶端請求首部帶有cookie很大的信息,會造成400錯誤,強烈建議增大大小
大小設(shè)置為系統(tǒng)分頁大小,命令 getconf PAGESIZE 可查看
一般設(shè)置為 client_header_buffer_size 4K;
5.6 client_body_buffer_size size;
用于接收客戶端請求報文的body部分的緩沖區(qū)大??;默認為16k;超出此大小時,其將被暫存到磁盤上的由client_body_temp_path指令所定義的位置;
5.7 client_body_temp_path path [level1 [level2 [level3]]];
設(shè)定用于存儲客戶端請求報文的body部分的臨時存儲路徑及子目錄結(jié)構(gòu)和數(shù)量;16進制的數(shù)字;
client_body_temp_path path /var/tmp/client_body 1 2 2 #可定義在高性能磁盤分區(qū)上
6、文件操作優(yōu)化的配置
作用域:http, server, location
6.1 aio on | off | threads[=pool];
是否啟用aio功能;
6.2 directio size | off;
在Linux主機啟用O_DIRECT標記,此處意味文件大于等于給定的大小時使用,例如directio 4m;
6.3 directio_alignment size;
為directio設(shè)置 alignment 大小,默認512字節(jié),一般不用調(diào)整。但是xfs 文件系統(tǒng)需要增大至4k。
--------這里花一定篇幅講講aio,directio,和sendfile之間的關(guān)系-------
首先aio和sendfile是互相排斥的。啟用aio,必須也啟用directio,不然的話read()將成為阻塞。
sendfile適合小文件,占用的是系統(tǒng)緩存。當傳輸大文件時,而且系統(tǒng)內(nèi)存不夠大的情況,使用sendfile()將較不適宜。此時應(yīng)使用aio機制。
推薦的一個配置示例:文件小于8M,使用sendfile,大于或等于8M使用aio
location /video/ {
sendfile on;
sendfiel_max_chunk 256K;
aio on; directio 8m;
output_buffers 1 128k;
}
特別地,在大文件傳輸較多的情況下,適宜啟用aio threads 。nginx編譯需要--with-threads 選項
location /video/ {
sendfile on;
sendfiel_max_chunk 256K;
aio threads; #這里使用默認的線程池,可自行創(chuàng)建。 directio 8m;
output_buffers 1 128k;
}
6.4 open_file_cache off;
open_file_cache max=N [inactive=time];
nginx可以緩存以下三種信息:
(1) 文件的描述符、文件大小和最近一次的修改時間;
(2) 打開的目錄結(jié)構(gòu);
(3) 沒有找到的或者沒有權(quán)限訪問的文件的相關(guān)信息;
max=N:可緩存的緩存項上限;達到上限后會使用LRU算法實現(xiàn)緩存管理;
inactive=time:緩存項的非活動時長,在此處指定的時長內(nèi)未被命中的或命中的次數(shù)少于open_file_cache_min_users指令所指定的次數(shù)的緩存項即為非活動項;
6.5 open_file_cache_valid time;
緩存項有效性的檢查頻率;默認為60s;
6.6 open_file_cache_min_uses number;
在open_file_cache指令的inactive參數(shù)指定的時長內(nèi),至少應(yīng)該被命中多少次方可被歸類為活動項;
6.7 open_file_cache_errors on | off;
是否緩存查找時發(fā)生錯誤的文件一類的信息;
Example:
open_file_cache max=1000 inactive=20s;
open_file_cache_valid 30s;
open_file_cache_min_uses 2;
open_file_cache_errors on;
本篇就介紹到這里,nginx余下內(nèi)容請關(guān)注后續(xù)博客。
. ?
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/39422.html
摘要:由于我是項目,所以需要先下載,這里你可以用源下載,也可以直接下載解壓包進行解壓,具體的實現(xiàn)可參考傳送門。這里要補充的是由于我的項目框架是有內(nèi)嵌,所以無需配置。 這兩天剛好工作比較多,包括將項目部署到阿里云中,外面公司需要我們將多數(shù)據(jù)源數(shù)據(jù)進行處理(這里涉及到kettle)等,所以做了挺多事,也踩了挺多的坑,之前一直在用CSDN,但是發(fā)現(xiàn)CSDN更多的是技術(shù)博文,而我想用記敘形式的方式...
摘要:介紹和使用一介紹是一個十分輕量級并且高性能和反向代理服務(wù)器,同樣也是一個代理服務(wù)器。如果沒有匹配的正則,則使用前面記錄的最長匹配前綴字符。使用精確匹配可以提高查找的速度。例如經(jīng)常請求的話,可以使用來定義。 Nginx介紹和使用 一、介紹 Nginx是一個十分輕量級并且高性能HTTP和反向代理服務(wù)器,同樣也是一個IMAP/POP3/SMTP代理服務(wù)器。 二、特性 HTTP服務(wù)器 反向代...
摘要:無論是將其用作的服務(wù)器反向代理服務(wù)器負載均衡器,還是同時使用以上三種功能,和都能帶來很大好處。再就是下篇文章會介紹如何把和當作反向代理服務(wù)器和多個應(yīng)用程序服務(wù)器的負載均衡器。而使用將會有助于解決這一問題。 【編者按】本文主要介紹 nginx 的主要功能以及如何通過 NGINX 優(yōu)化 Python 應(yīng)用性能。本文系國內(nèi) ITOM 管理平臺 OneAPM 編譯呈現(xiàn)。 Python 的著名之...
摘要:無論是將其用作的服務(wù)器反向代理服務(wù)器負載均衡器,還是同時使用以上三種功能,和都能帶來很大好處。再就是下篇文章會介紹如何把和當作反向代理服務(wù)器和多個應(yīng)用程序服務(wù)器的負載均衡器。而使用將會有助于解決這一問題。 【編者按】本文主要介紹 nginx 的主要功能以及如何通過 NGINX 優(yōu)化 Python 應(yīng)用性能。本文系國內(nèi) ITOM 管理平臺 OneAPM 編譯呈現(xiàn)。 Python 的著名之...
閱讀 1627·2021-11-11 10:59
閱讀 2634·2021-09-04 16:40
閱讀 3671·2021-09-04 16:40
閱讀 2990·2021-07-30 15:30
閱讀 1667·2021-07-26 22:03
閱讀 3172·2019-08-30 13:20
閱讀 2236·2019-08-29 18:31
閱讀 446·2019-08-29 12:21