一:簡(jiǎn)介
Nginx ("engine x") 是一個(gè)高性能的HTTP和 反向代理 服務(wù)器洪添,也是一個(gè) IMAP/POP3/SMTP 服務(wù)器茫虽。 Nginx 是由 Igor Sysoev 為俄羅斯訪問(wèn)量第二的 Rambler.ru 站點(diǎn)開(kāi)發(fā)的院塞,第一個(gè)公開(kāi)版本0.1.0發(fā)布于2004年10月4日。其將源代碼以類BSD許可證的形式發(fā)布剿吻,因它的穩(wěn)定性拾弃、豐富的功能集、示例配置文件和低系統(tǒng)資源的消耗而聞名邦泄。2011年6月1日删窒,nginx 1.0.4發(fā)布。
Nginx是一款輕量級(jí)的Web 服務(wù)器/反向代理服務(wù)器及電子郵件(IMAP/POP3)代理服務(wù)器顺囊,并在一個(gè)BSD-like 協(xié)議下發(fā)行肌索。由俄羅斯的程序設(shè)計(jì)師Igor Sysoev所開(kāi)發(fā),供俄國(guó)大型的入口網(wǎng)站及搜索引擎Rambler(俄文:Рамблер)使用特碳。其特點(diǎn)是占有內(nèi)存少诚亚,并發(fā)能力強(qiáng),事實(shí)上nginx的并發(fā)能力確實(shí)在同類型的網(wǎng)頁(yè)服務(wù)器中表現(xiàn)較好午乓,中國(guó)大陸使用nginx網(wǎng)站用戶有:百度站宗、新浪、網(wǎng)易益愈、騰訊梢灭、 淘寶等
- 特性
- 模塊化設(shè)計(jì)夷家,較好的擴(kuò)展性
- 高可靠性
- 低內(nèi)存消耗
- 基本功能:
- 靜態(tài)資源的web 服務(wù)器
- http 協(xié)議反向代理服務(wù)器
- pop3/imap4 協(xié)議反向代理服務(wù)器
- FastCGI(lnmp),uWSGI(python) 等協(xié)議
- 模塊化(非DSO ),如zip 敏释,SSL
二:Nginx的程序架構(gòu)
- nginx的程序架構(gòu):master/worker結(jié)構(gòu)
- 一個(gè)master進(jìn)程:
負(fù)責(zé)加載和分析配置文件库快、管理worker進(jìn)程、平滑升級(jí) - 一個(gè)或多個(gè)worker進(jìn)程
處理并相應(yīng)用戶請(qǐng)求 - 緩存相關(guān)的進(jìn)程:
- cache loader:載入緩存對(duì)象
- cache manager:管理緩存對(duì)象
- 一個(gè)master進(jìn)程:
- ngnx架構(gòu)
三:nginx模塊
- nginx高度模塊化钥顽,但其模塊早期不支持DSO機(jī)制义屏;近期版本支持動(dòng)態(tài)裝載和卸載
- 模塊分類:
- 核心模塊:core module
- 標(biāo)準(zhǔn)模塊:
- HTTP 模塊:ngx_http_* 、HTTP Core modules蜂大、HTTP Optional modules
- Mail 模塊:ngx_mail_*
- Stream 模塊:ngx_stream_*
- 第三方模塊
四: nginx的安裝
- 編譯安裝
yum install pcre-devel openssl-devel zlib-devel
useradd -r nginx
下載源碼包并解壓
tar xf nginx-1.12.1.tar.gz
cd nginx-1.12.1/
./configure --prefix=/usr/local/nginx --conf-path=/etc/nginx/nginx.conf --error-log-
path=/var/log/nginx/error.log --http-log-
path=/var/log/nginx/access.log --pid-path=/var/run/nginx.pid --lock-path=/var/run/nginx.lock --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 install
- 編譯安裝nginx選項(xiàng)
-
--prefix=/etc/nginx
:
安裝路徑 -
--sbin-path=/usr/sbin/nginx
:
指明nginx程序文件安裝路徑 -
--conf-path=/etc/nginx/nginx.conf
:
主配置文件安裝位置 -
--error-log-path=/var/log/nginx/error.log
:
錯(cuò)誤日志文件安裝位置 -
--http-log-path=/var/log/nginx/access.log
:
訪問(wèn)日志文件安裝位置 -
pid-path=/var/run/nginx.pid
:
指明pid文件安裝位置 -
lock-path=/var/run/nginx.lock
:
鎖文件安裝位置 -
--http-client-body-temp-path=/var/cache/nginx/client_temp
:
客戶端body部分的臨時(shí)文件存放路徑闽铐,如果服務(wù)器允許客戶端使用put方法提交給大數(shù)據(jù)時(shí),臨時(shí)存放的磁盤(pán)路徑 -
--http-proxy-temp-path=/var/cache/nginx/proxy_temp
:
作為代理服務(wù)器奶浦,服務(wù)器響應(yīng)報(bào)文的臨時(shí)文件存放路徑 -
--http-fastcgi-temp-path=/var/cache/nginx/fastcgi_temp
:
作為fastcgi代理服務(wù)器兄墅,服務(wù)器響應(yīng)報(bào)文的臨時(shí)文件存放路徑 -
--http-uuwsgi-temp-path=/var/cache/nginx/uwsgi_temp
:
作為uwsgi代理服務(wù)器,服務(wù)器響應(yīng)報(bào)文的臨時(shí)文件存放路徑 -
--http-scgi-temp-path=/var/cache/nginx/scgi_temp
:
作為scgi反代服務(wù)器财喳,服務(wù)器響應(yīng)報(bào)文的臨時(shí)文件存放路徑 -
--user=nginx
:
指明以哪個(gè)身份運(yùn)行worker進(jìn)程察迟,主控master進(jìn)程一般由root運(yùn)行 --group=nginx
-
--with-http_ssl_module
:
表示把指定模塊編譯出來(lái)
-
五: nginx目錄結(jié)構(gòu)和命令
-
ls /usr/local/nginx/html
html是測(cè)試頁(yè),sbin是主程序 -
ls /usr/local/nginx/sbin/nginx
nginx只有一個(gè)程序文件 -
ls /usr/local/nginx/html/50x.html
index.html測(cè)試網(wǎng)頁(yè) -
/usr/local/nginx/sbin/nginx -t
測(cè)試nginx語(yǔ)法錯(cuò)誤 -
/usr/local/nginx/sbin/nginx -h
查看幫助選項(xiàng)- -c filename :指定配置文件(default:/etc/nginx/nginx.conf)
- -s signal :發(fā)送信號(hào)給master進(jìn)程耳高,signal可為:stop,quit,reopen,reload
- -g directives :在命令行中指明全局指令
-
/usr/local/nginx/sbin/nginx -s stop
停止nginx -
/usr/local/nginx/sbin/nginx
啟動(dòng)nginx
六: nginx配置
- 配置文件的組成部分:
- 主配置文件:nginx.conf
- fastcgi、uwsgi所踊、scgi等協(xié)議相關(guān)的配置文件
- mime.type:支持的mime類型
- 主配置文件(/etc/nginx/nginx.conf)的配置指令:
- directive value [ value2 ... ]
- 注意:
- 指令必須以分號(hào)結(jié)尾
- 支持使用配置變量
- 內(nèi)建命令:由Nginx模塊引入泌枪,可直接引用
- 自定義變量:由用戶使用set命令定義
set variable_name value; - 引用變量:$variable_name
七: nginx配置文件
- 主配置文件結(jié)構(gòu)(
/etc/nginx/nginx.conf
)- main block:主配置段,對(duì)http , mail都有效
- event {
······
} :時(shí)間驅(qū)動(dòng)相關(guān)的配置 - http {
······
} : http/https協(xié)議相關(guān)配置段 - mail {
······
} :mail協(xié)議配置段 - stream {
······
} :stream服務(wù)器相關(guān)配置段
- http協(xié)議相關(guān)的配置結(jié)構(gòu)(
/etc/nginx/nginx.conf
)
http {
...
... 各server 的公共配置
server { 每個(gè)server 用于定義一個(gè)虛擬主機(jī)
...
}
server {
...
server_name 虛擬主機(jī)名
root 主目錄
alias 路徑別名
location [OPERATOR] URL { 指定URL 的特性
...
if CONDITION {
...
}
}
}
}
八秕岛、主配置文件中的全局配置段
(/etc/nginx/nginx.conf
)
正常運(yùn)行必備的配置:
幫助文檔:http://nginx.org/en/docs/ngx_core_module.html
- 1碌燕、user
Syntax: user user [group];
Default: user nobody nobody;
Context: main
指定worker進(jìn)程的運(yùn)行身份,如組不確定继薛,默認(rèn)和用戶名同名
2修壕、pid /PATH/TO/PID_FILE
指定存儲(chǔ)nginx主進(jìn)程PID的文件路徑3、include file | mask
指明包含進(jìn)來(lái)的其他配置文件片段4遏考、load_module file
/usr/share/nginx/modules/*.conf
指明要裝載的動(dòng)態(tài)模塊路徑:/usr/lib64/nginx/modules
性能優(yōu)化相關(guān)的配置
1慈鸠、
work_processes number | auto
worker進(jìn)程的數(shù)量;通常應(yīng)該為當(dāng)前主機(jī)的CPU的物理核心數(shù)2灌具、
worker_cpu_affinity cpumask ···
worker_cpu_affinity auto [cpumask] :提高緩存命中率
CPU MASK:
0000 0001:0號(hào)CPU
0000 0010 : 1號(hào)CPU
1000 0000 : 8號(hào)CPU3青团、
worker_priority number
指定worker進(jìn)程的nice指,設(shè)定worker進(jìn)程優(yōu)先級(jí):由高到低 :[ - 20 , 20 ]4咖楣、
worker_rlimit_nofile number
單個(gè)worker進(jìn)程所能夠打開(kāi)的文件數(shù)量上限督笆,如65535
調(diào)試和定位問(wèn)題:
1、
daemon on | off
是否以守護(hù)進(jìn)程方式運(yùn)行nginx诱贿,默認(rèn)是守護(hù)進(jìn)程方式2娃肿、
master_process on | off
是否以master/worker模型運(yùn)行nginx;默認(rèn)為on,off將不啟動(dòng)worker3料扰、
error_log file [level]
錯(cuò)誤日志文件及其級(jí)別锨阿;處于調(diào)試需要,可設(shè)定為debug记罚;但debug僅在編譯時(shí)使用了“--with-debug”選項(xiàng)時(shí)才有效
level:debug|info|notice|warn|error|crit|alter|emerg
事件驅(qū)動(dòng)相關(guān)的配置
events {
······
}
1墅诡、
worker_connections number
每個(gè)worker 進(jìn)程所能夠打開(kāi)的最大并發(fā)連接數(shù)數(shù)量,如10240
總最大并發(fā)數(shù):worker_processes * worker_connections2 桐智、use method
指明并發(fā)連接請(qǐng)求的處理方法, 默認(rèn)自動(dòng)選擇最優(yōu)方法
use epoll;3 末早、accept_mutex on | off 互斥
處理新的連接請(qǐng)求的方法;on指由各個(gè)worker 輪流處理新請(qǐng)求说庭,Off指每個(gè)新請(qǐng)求的到達(dá)都會(huì)通知( 喚醒) 所有的worker 進(jìn)程然磷,但只有一個(gè)進(jìn)程可獲得連接,造成“驚群”刊驴,影響性能姿搜,默認(rèn)on
http 協(xié)議的相關(guān)配置:
http {
... ...
server {
...
server_name
root
location [OPERATOR] /uri/ {
...
}
}
server {
...
}
}