目录html
nginx(发音同engine x)是一款轻量级的Web服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,并在一个BSD-like协议下发行。前端
nginx由俄罗斯的程序设计师Igor Sysoev所开发,最初供俄国大型的入口网站及搜寻引擎Rambler使用。python
第一个公开版本0.1.0发布于2004年10月4日。其将源代码以类BSD许可证的形式发布,因它的稳定性、丰富的功能集、示例配置文件和低系统资源的消耗而闻名。2011年6月1日,nginx 1.0.4发布。mysql
nginx的特色是占有内存少,并发能力强,事实上nginx的并发能力确实在同类型的网页服务器中表现较好,中国大陆使用nginx网站用户有:百度、京东、新浪、网易、腾讯、淘宝等。nginx
nginx的官网:c++
nginx的特性:web
nginx的基本功能:sql
nginx的优势:后端
nginx由内核和模块组成。其中,内核的设计很是微小和简洁,完成的工做也很是简单,仅仅经过查找配置文件将客户端请求映射到一个location block(location是nginx配置中的一个指令,用于URL匹配),而在这个location中所配置的每一个指令将会启动不一样的模块去完成相应的工做。浏览器
nginx的程序结构: master/worker结构
一个master进程:负责加载和分析配置文件、管理worker进程、平滑升级
一个或多个worker进程:处理并响应用户请求
缓存相关的进程:
cache loader:载入缓存对象
cache manager:管理缓存对象
nginx由内核和模块组成。其中,内核的设计很是微小和简洁,完成的工做也很是简单,仅仅经过查找配置文件将客户端请求映射到一个location block(location是nginx配置中的一个指令,用于URL匹配),而在这个location中所配置的每一个指令将会启动不一样的模块去完成相应的工做。
nginx模块分类: 模块分类:
nginx工做原理
nginx模块一次常规的HTTP请求和响应的过程
web服务请求过程
Nginx的配置文件nginx.conf位于其安装目录的conf目录下。
nginx.conf由多个块组成,main(全局设置)、event(事件驱动设置)、server(主机设置)、upstream(负载均衡服务器设置)和 location(URL匹配特定位置的设置)。这五者之间的关系式:server继承main,location继承server,upstream既不会继承其余设置也不会被继承。
Main 全局配置段常见的配置指令分类:
正常运行必备的配置:
帮助文档:http://nginx.org/en/docs/ngx_core_module.html
一、user
Syntax: user user [group];
Default: user nobody nobody;
Context: main
指定worker进程的运行身份,如组不指定,默认和用户名同名
二、pid /PATH/TO/PID_FILE
指定存储nginx主进程PID的文件路径
三、include file | mask
指明包含进来的其它配置文件片段
四、load_module file
模块加载配置文件:/usr/share/nginx/modules/*.conf
指明要装载的动态模块路径: /usr/lib64/nginx/modules
性能优化相关的配置:
一、worker_processes number | auto
worker进程的数量;一般应该为当前主机的cpu的物理核心数
二、worker_cpu_affinity cpumask ...
worker_cpu_affinity auto [cpumask] 提升缓存命中率
CPU MASK: 00000001:0号CPU
00000010:1号CPU
10000000:8号CPU
worker_cpu_affinity 0001 0010 0100 1000;
worker_cpu_affinity 0101 1010;
三、worker_priority number
指定worker进程的nice值,设定worker进程优先级:[-20,20]
四、worker_rlimit_nofile number
worker进程所可以打开的文件数量上限,如65535
events { ... }
一、worker_connections number
每一个worker进程所可以打开的最大并发链接数数量,如10240
总最大并发数:worker_processes * worker_connections
二、use method
指明并发链接请求的处理方法 ,默认自动选择最优方法
use epoll;
三、accept_mutex on | off 互斥
处理新的链接请求的方法;on指由各个worker轮流处理新请求,Off指每一个新请求的到达都会通知(唤醒)全部的worker进程,但只有一个进程可得到链接,形成“惊群”,影响性能
http协议的相关配置:
http { ... ... server { ... server_name root location [OPERATOR] /uri/ { ... } } server { ... }
此配置请看随笔----nginx-http协议具体配置
nginx的其它的二次发行版:
Tengine:由淘宝网发起的Web服务器项目。它在Nginx的基础上,针对大访问量网站的需求,添加了不少高级功能和特性。Tengine的性能和稳定性已经在大型的网站如淘宝网,天猫商城等获得了很好的检验。它的最终目标是打造一个高效、稳定、安全、易用的Web平台。从2011年12月开始,Tengine成为一个开源项目,官网 http://tengine.taobao.org/
OpenResty:基于 Nginx 与 Lua 语言的高性能 Web平台
nginx_stream_core_module模块
模拟反代基于tcp或udp的服务链接,即工做于传输层的反代或调度器
stream { upstream mysqlsrvs { server 192.168.22.2:3306; server 192.168.22.3:3306; least_conn; } server { listen 10.1.0.6:3306; proxy_pass mysqlsrvs; } }
二、listen
listen address:port [ssl] [udp] [proxy_protocol][backlog=number] [bind] [ipv6only=on|off] [reuseport] [so_keepalive=on|off|[keepidle]:[keepintvl]:[keepcnt]];
可实现代理基于TCP,UDP (1.9.13), UNIX-domain sockets的数据流
1 proxy_pass address; 指定后端服务器地址
2 proxy_timeout timeout; 无数据传输时,保持链接状态的超时时长,默认为10m
3 proxy_connect_timeout time; 设置nginx与被代理的服务器尝试创建链接的超时时长,默认为60s
stream { upstream mysqlsrvs { server 192.168.0.10:3306; server 192.168.0.11:3306; hash $remote_addr consistent; } server { listen 172.16.100.100:3306; proxy_pass mysqlsrvs; proxy_timeout 60s; proxy_connect_timeout 10s; } }
//建立系统用户nginx [root@localhost ~]# useradd -r -M -s /sbin/nologin nginx //安装依赖环境 [root@localhost ~]# yum -y install pcre-devel openssl openssl-devel gd-devel gcc gcc-c++ [root@localhost ~]# yum -y groups mark install 'Development Tools' //建立日志存放目录 [root@localhost ~]# mkdir -p /var/log/nginx [root@localhost ~]# chown -R nginx.nginx /var/log/nginx //下载nginx [root@localhost ~]# cd /usr/src/ [root@localhost src]# wget http://nginx.org/download/nginx-1.12.0.tar.gz //编译安装 [root@localhost src]# ls debug kernels nginx-1.12.0.tar.gz [root@localhost src]# tar xf nginx-1.12.0.tar.gz [root@localhost src]# cd nginx-1.12.0 [root@localhost nginx-1.12.0]# ./configure \ --prefix=/usr/local/nginx \ --user=nginx \ --group=nginx \ --with-debug \ --with-http_ssl_module \ --with-http_realip_module \ --with-http_image_filter_module \ --with-http_gunzip_module \ --with-http_gzip_static_module \ --with-http_stub_status_module \ --http-log-path=/var/log/nginx/access.log \ --error-log-path=/var/log/nginx/error.log [root@localhost nginx-1.12.0]# make -j 2 && make install //设置环境变量 [root@localhost ~]# echo 'export PATH=/usr/local/nginx/sbin:$PATH' > /etc/profile.d/nginx.sh [root@localhost ~]# . /etc/profile.d/nginx.sh //启动nginx [root@localhost ~]# nginx -t //j检查配置文件是否有问题 [root@localhost ~]# nginx //启动nginx [root@localhost ~]# nginx -s stop //中止nginx