一:簡介
Nginx ("engine x") 是一個高性能的HTTP和 反向代理 服務器,也是一個 IMAP/POP3/SMTP 服務器。 Nginx 是由 Igor Sysoev 為俄羅斯訪問量第二的 Rambler.ru 站點開發的,第一個公開版本0.1.0發布于2004年10月4日。其將源代碼以類BSD許可證的形式發布,因它的穩定性、豐富的功能集、示例配置文件和低系統資源的消耗而聞名。2011年6月1日,nginx 1.0.4發布。
Nginx是一款輕量級的Web 服務器/反向代理服務器及電子郵件(IMAP/POP3)代理服務器,并在一個BSD-like 協議下發行。由俄羅斯的程序設計師Igor Sysoev所開發,供俄國大型的入口網站及搜索引擎Rambler(俄文:Рамблер)使用。其特點是占有內存少,并發能力強,事實上nginx的并發能力確實在同類型的網頁服務器中表現較好,中國大陸使用nginx網站用戶有:百度、新浪、網易、騰訊、 淘寶等
- 特性
- 模塊化設計,較好的擴展性
- 高可靠性
- 低內存消耗
- 基本功能:
- 靜態資源的web 服務器
- http 協議反向代理服務器
- pop3/imap4 協議反向代理服務器
- FastCGI(lnmp),uWSGI(python) 等協議
- 模塊化(非DSO ),如zip ,SSL
二:Nginx的程序架構
- nginx的程序架構:master/worker結構
- 一個master進程:
負責加載和分析配置文件、管理worker進程、平滑升級 - 一個或多個worker進程
處理并相應用戶請求 - 緩存相關的進程:
- cache loader:載入緩存對象
- cache manager:管理緩存對象
- 一個master進程:
- ngnx架構
三:nginx模塊
- nginx高度模塊化,但其模塊早期不支持DSO機制;近期版本支持動態裝載和卸載
- 模塊分類:
- 核心模塊:core module
- 標準模塊:
- 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選項
-
--prefix=/etc/nginx
:
安裝路徑 -
--sbin-path=/usr/sbin/nginx
:
指明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
:
指明pid文件安裝位置 -
lock-path=/var/run/nginx.lock
:
鎖文件安裝位置 -
--http-client-body-temp-path=/var/cache/nginx/client_temp
:
客戶端body部分的臨時文件存放路徑,如果服務器允許客戶端使用put方法提交給大數據時,臨時存放的磁盤路徑 -
--http-proxy-temp-path=/var/cache/nginx/proxy_temp
:
作為代理服務器,服務器響應報文的臨時文件存放路徑 -
--http-fastcgi-temp-path=/var/cache/nginx/fastcgi_temp
:
作為fastcgi代理服務器,服務器響應報文的臨時文件存放路徑 -
--http-uuwsgi-temp-path=/var/cache/nginx/uwsgi_temp
:
作為uwsgi代理服務器,服務器響應報文的臨時文件存放路徑 -
--http-scgi-temp-path=/var/cache/nginx/scgi_temp
:
作為scgi反代服務器,服務器響應報文的臨時文件存放路徑 -
--user=nginx
:
指明以哪個身份運行worker進程,主控master進程一般由root運行 --group=nginx
-
--with-http_ssl_module
:
表示把指定模塊編譯出來
-
五: nginx目錄結構和命令
-
ls /usr/local/nginx/html
html是測試頁,sbin是主程序 -
ls /usr/local/nginx/sbin/nginx
nginx只有一個程序文件 -
ls /usr/local/nginx/html/50x.html
index.html測試網頁 -
/usr/local/nginx/sbin/nginx -t
測試nginx語法錯誤 -
/usr/local/nginx/sbin/nginx -h
查看幫助選項- -c filename :指定配置文件(default:/etc/nginx/nginx.conf)
- -s signal :發送信號給master進程,signal可為:stop,quit,reopen,reload
- -g directives :在命令行中指明全局指令
-
/usr/local/nginx/sbin/nginx -s stop
停止nginx -
/usr/local/nginx/sbin/nginx
啟動nginx
六: nginx配置
- 配置文件的組成部分:
- 主配置文件:nginx.conf
- fastcgi、uwsgi、scgi等協議相關的配置文件
- mime.type:支持的mime類型
- 主配置文件(/etc/nginx/nginx.conf)的配置指令:
- directive value [ value2 ... ]
- 注意:
- 指令必須以分號結尾
- 支持使用配置變量
- 內建命令:由Nginx模塊引入,可直接引用
- 自定義變量:由用戶使用set命令定義
set variable_name value; - 引用變量:$variable_name
七: nginx配置文件
- 主配置文件結構(
/etc/nginx/nginx.conf
)- main block:主配置段,對http , mail都有效
- event {
······
} :時間驅動相關的配置 - http {
······
} : http/https協議相關配置段 - mail {
······
} :mail協議配置段 - stream {
······
} :stream服務器相關配置段
- http協議相關的配置結構(
/etc/nginx/nginx.conf
)
http {
...
... 各server 的公共配置
server { 每個server 用于定義一個虛擬主機
...
}
server {
...
server_name 虛擬主機名
root 主目錄
alias 路徑別名
location [OPERATOR] URL { 指定URL 的特性
...
if CONDITION {
...
}
}
}
}
八、主配置文件中的全局配置段
(/etc/nginx/nginx.conf
)
正常運行必備的配置:
幫助文檔:http://nginx.org/en/docs/ngx_core_module.html
- 1、user
Syntax: user user [group];
Default: user nobody nobody;
Context: main
指定worker進程的運行身份,如組不確定,默認和用戶名同名
2、pid /PATH/TO/PID_FILE
指定存儲nginx主進程PID的文件路徑3、include file | mask
指明包含進來的其他配置文件片段4、load_module file
/usr/share/nginx/modules/*.conf
指明要裝載的動態模塊路徑:/usr/lib64/nginx/modules
性能優化相關的配置
1、
work_processes number | auto
worker進程的數量;通常應該為當前主機的CPU的物理核心數2、
worker_cpu_affinity cpumask ···
worker_cpu_affinity auto [cpumask] :提高緩存命中率
CPU MASK:
0000 0001:0號CPU
0000 0010 : 1號CPU
1000 0000 : 8號CPU3、
worker_priority number
指定worker進程的nice指,設定worker進程優先級:由高到低 :[ - 20 , 20 ]4、
worker_rlimit_nofile number
單個worker進程所能夠打開的文件數量上限,如65535
調試和定位問題:
1、
daemon on | off
是否以守護進程方式運行nginx,默認是守護進程方式2、
master_process on | off
是否以master/worker模型運行nginx;默認為on,off將不啟動worker3、
error_log file [level]
錯誤日志文件及其級別;處于調試需要,可設定為debug;但debug僅在編譯時使用了“--with-debug”選項時才有效
level:debug|info|notice|warn|error|crit|alter|emerg
事件驅動相關的配置
events {
······
}
1、
worker_connections number
每個worker 進程所能夠打開的最大并發連接數數量,如10240
總最大并發數:worker_processes * worker_connections2 、use method
指明并發連接請求的處理方法, 默認自動選擇最優方法
use epoll;3 、accept_mutex on | off 互斥
處理新的連接請求的方法;on指由各個worker 輪流處理新請求,Off指每個新請求的到達都會通知( 喚醒) 所有的worker 進程,但只有一個進程可獲得連接,造成“驚群”,影響性能,默認on
http 協議的相關配置:
http {
... ...
server {
...
server_name
root
location [OPERATOR] /uri/ {
...
}
}
server {
...
}
}