nginx是一款强大的服务器,经常用来转发或者代理,它与另一款强大的服务器Apache有一点区别。
nginx是基于事件驱动的,Apache是基于进程的。nginx处理请求的时候都是在一个进程(或者几个,要看你启动的方式),而Apache每接受一个请求则需要重新开辟一个进程负责该请求连接。nginx对静态文件(使用sendfile避免了用户态和内核态切换)和短连接(epoll多路复用)的处理有强大的优势。
nginx也可以查看当前并发连接数,一般会有两种方式去查看当前连接的并发数。一种是通过web的方式,当想要通过web的方式查看的时候,你必须配置了status的模块,然后再在配置文件中进行相应的配置。一种是通过命令的方式,通过如下命令:
netstat -n | awk ‘/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}’
nginx的所有配置都在nginx.conf文件中,修改配置以后可以平滑重启,不用停止服务。
nginx -s reload(具体nginx其他命令请查看相关文档),在平滑启动之前最好测试一下配置文件格式是否正确,可以使用命令nginx -t -c nginx.conf。
介绍常见的配置:
location匹配命令
~ #波浪线表示执行一个正则匹配,区分大小写
~* #表示执行一个正则匹配,不区分大小写
^~ #^~表示普通字符匹配,如果该选项匹配,只匹配该选项,不匹配别的选项,一般用来匹配目录
= #进行普通字符精确匹配
@ #“@” 定义一个命名的 location,使用在内部定向时,例如 error_page, try_files
负载均衡的配置
nginx强大功能的之一就是负载均衡,对请求按照比例进行转发到后台处理逻辑。对于负载均衡,nginx提供了几种算法:
1、轮询(默认)
很容易理解,该算法对后台就挨个请求。发现某个失败,就自动剔除。
2、weight(轮询权值)
在轮训的基础上增加了每个节点的权重。一般应用在后台节点性能不均衡的场景,针对当前容器微服务的模式下,这种配置场景一般不再适用。
upstream the_up{
server 10.0.0.1 weight=5;
server 10.0.0.2 weight=10;
}
3、ip_hash
按照访问IP的哈希结果分配,这样可以保证来自同一ip的请求访问到固定后台节点。当然后台节点发生了迁移或者故障,那就hash到其他节点。
upstream the_up{
ip_hash;
server 10.0.0.1;
server 10.0.0.2;
}
4、fair
比前面几种更加智能的负载均衡算法,前面几种可以认为是提前配置好的转发策略,但是它没考虑具体的业务表现和处理结果。fair算法可以根据后端服务器的响应时间来分配请求,响应时间短的优先分配。如果需要使用该算法,则必须安装upstream_fair模块。安装也是比较简单,下载了依赖包,按照安装nginx其他模块的方式安装就好,就不细说了。
upstream the_up{
fair;
server 10.0.0.1;
server 10.0.0.2;
}
5、url_hash
类似ip hash,这里是按访问的URL的哈希。这样会对一些后台处理场景更加友好,比如缓存使用啥的如果需要这种调度算法,则必须安装Nginx的hash软件包。