Nginx是什么?
Nginx是一个高性能的HTTP和反向代理web服务器,特点是内存少,并发能力强
Nginx能做什么
Nginx主要命令:
./nginx 启动nginx
./nginx -s stop 终止nginx
./nginx -s reload 重新启动nginx
安装nginx
http://nginx.org/en/download.html
yum -y install gcc yum -y install gcc-c++ yum install -y zlib-devel yum -y install openssl openssl-devel ./configure --prefix=/usr/local/nginx make make install
然后可以发现/usr/local/nginx目录。
Nginx的核⼼配置⽂件conf/nginx.conf包含三块内容:全局块、events块、http块
从配置⽂件开始到events块之间的内容,此处的配置影响nginx服务器整体的运⾏,⽐如worker进程的数量、错误⽇志的位置等
events块主要影响nginx服务器与⽤户的⽹络连接,⽐如worker_connections 1024,表示每个workderprocess⽀持的最⼤连接数为1024
http块是配置最频繁的部分,虚拟主机的配置,监听端⼝的配置,请求转发、反向代理、负载均衡等
反向代理的概念:
反向代理服务器位于用户与目标服务器之间,但是对于用户而言,反向代理服务器就相当于目标服务器,即用户直接访问反向代理服务器就可以获得目标服务器的资源。同时,用户不需要知道目标服务器的地址,也无须在用户端作任何设定。反向代理服务器通常可用来作为Web加速,即使用反向代理作为Web服务器的前置机来降低网络和服务器的负载,提高访问效率。
效果:
这里主要是多location的使用。location语法如下:
location [=||*|^~] /uri/ { … }
在nginx配置文件中,location主要有这几种形式
优先级:精确匹配> 匹配路径前缀>不区分大小写的正则匹配>正则匹配 >普通路径前缀匹配
当客户端浏览器访问到nginx时,使用nginx作为负载均衡器,将请求分配到两个tomcat:127.0.0.1:8080、和127.0.0.1:8082
默认策略,每个请求按时间顺序逐一分配到不同的服务器,如果某一个服务器下线,能自动剔除
weight代表权重,默认每一个负载的服务器都为1,权重越高分配的请求就越多
每个请求按照ip的hash结果分配,每一个客户端的请求会固定分配到同一个目标服务器处理,可以解决session问题
动静分离就是讲动态资源和静态资源的请求处理分配到不同的服务器上,⽐较经典的组合就是Nginx+Tomcat架构(Nginx处理静态资源请求,Tomcat处理动态资源请求),那么其实之前的讲解中,Nginx反向代理⽬标服务器Tomcat,我们能看到⽬标服务器ROOT项⽬的index.jsp,这本身就是Tomcat在处理动态资源请求了。
location /static { root staticData; }
在nginx目录下创建/staticData/static目录,将静态文件放进去
http://192.168.56.115:9003/static/index.html
http://192.168.56.115:9003/static/1.jpg
Nginx启动后,以daemon多进程方式在后台运行,包括一个Master进程和多个Worker进程。
主要是管理worker进程,比如
woker进程具体处理网络请求。多个worker进程之间是对等的,各个进程之间是独立的。一个进程只能在一个worker进程中处理,worker进程的个数是可以设置的,一般设置与机器的cpu核数一致。
例如:我们监听9003端口,一个请求到来时,如果有多个worker进程,那么每个worker进程都有可能处理这个链接
流程说明:
以 ./nginx -s reload 来说明nginx信号处理这部分的流程
1)master进程对配置⽂件进⾏语法检查
2)尝试配置(⽐如修改了监听端⼝,那就尝试分配新的监听端⼝)
3)尝试成功则使⽤新的配置,新建worker进程
4)新建成功,给旧的worker进程发送关闭消息
5)旧的worker进程收到信号会继续服务,直到把当前进程接收到的请求处理完毕后关闭
所以reload之后worker进程pid是发⽣了变化的
Nginx多进程模型的好处: