一:简介
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 {
...
}
}