nginx是一个高性能的http和反向代理服务器。其特点是:占用内存小,并发能力强。
占用内存小,并发能力强。在连接高并发的情况下,nginx是apache服务器不错的替代品。能够支持高达50000个并发连接数的响应。它采用的是epoll and kqueue模型
nginx完全由C语言从头写成,不论是系统资源开销还是cpu使用效率都很优秀。
nginx安装非常简单,配置文件非常简洁,bug少。nginx的启动特别容易,并且几乎可以做到7*24不间断运行,即使运行数个月也不需要重新启动。
1.反向代理
2.负载均衡
nginx提供的负载均衡主要是 内置策略和扩展策略。内置策略为轮询,加权轮询,Ip Hash。扩展策略就是用户自己定义的策略。
Ip Hash算法,对客户端请求的Ip进行hash操作,然后根据hash结果将同一个客户端ip的请求分发给同一台服务器进行处理,可以在一定程度上解决session不共享的问题。
3.web缓存
nginx可以对不同的文件做不同的缓存,配置比较灵活,主要用于对FastCGI的动态程序进行缓存。
nginx是由配置文件中指定的指令控制模块组成。指令可分为简单指定和块指定。
简单指令是有空格分隔的名称和参数组成,并以(;)结尾
块指令具有与简单指令相同的结构,但不是以分号结尾,而是以大括号包围的一组附加指定结尾。如果块指令的大括号内部可以有其他指令,则称这个块指令为上下文(比如:events、http、server、location)
配置文件中,被放置在任何上下文之外的指令都被认为是主上下文,events和http指令在主上下文中,server在http中,location又在server中。
... #全局块
events { #events块
worker_connections 1024;
}
http { #http块
... #http全局块
server { #server块
... #server全局块
location / { #location块
try_files $uri $uri/ /index.html;
root html;
index index.html index.htm;
}
}
server {
listen 443 ;
server_name oss.damaiiot.com;
ssl on;
root /;
location / {
root /;
proxy_pass http://damai-oss.oss-cn-hangzhou.aliyuncs.com/;
}
}
... #http全局块
}
详解:
1.全局块:配置影响nginx全局的指令。一般有运行nginx服务器的用户组,nginx进程pid存放路径,日志存放路径,配置文件引入,允许生成的worker process进程数。
2.events块:配置一些nginx服务器 或 与用户的网络连接。有每个进程的最大连接数,选取哪种时间驱动模型处理连接请求,是否允许同时接受多个网络连接,开启多个网络连接序列化等。
3.http块:可以嵌套多个server,配置代理,缓存,日志定义等绝大多数功能和第三方模块的配置。如文件引入,mime-type定义,连接超时,单连接请求数等。
4.server块:配置虚拟主机的相关参数
5.location块:配置请求的路由,以及各种页面的处理情况。
说明:
$remote_addr 和 $http_x_forward_for 用以记录客户端的ip地址
$remote_user 用来记录客户端用户名称
$time_local 用来记录访问的时间和时区
$request 用来记录请求的url与http协议
$status 用来记录请求状态,成功是200
$body_bytes_sent 记录发送给客户端文件主体内容大小
$http_referer 用来记录从那个页面链接访问过来
$http_user_agent 记录客户端浏览器的相关信息
demo
demo
demo
nginx有一个主进程(Master)和几个工作进程(Worker).主进程的主要目的是读取和评估配置,并维护工作进程。工作进程对请求进行处理。nginx采用了基于事件模型和依赖于操作系统的机制来有效的在工作进程之间分配请求。
工作进程的数量可在配置文件中定义,并且可以针对给定的配置进行修改,或者自动调整到可用cpu内核的数量。
如果有几个匹配上location的块指定,nginx将选择具有最长前缀的location块。
惊群现象:一个网络连接到来,多个睡眠进程同时被唤醒,但只有一个进程能获得连接,这样会影响系统的性能。
部分摘自:Nginx 使用手册