Nginx
相关概念
nginx
Nginx 是高性能的 HTTP
和反向代理的web服务器,特点是占用内存少,处理高并发能力是十分强大的,,专为性能优化而开发,能经受高负载的考验,有报告表明能支持高达
50,000 个并发连接数
反向代理
首先要知道什么是正向代理
反向代理,其实客户端对代理是无感知的,因为客户端不需要任何配置就可以访问。 我们只需要将请求发送到反向代理服务器,由反向代理服务器去选择目标服务器获取数据后,在返 回给客户端,此时反向代理服务器和目标服务器对外就是一个服务器,暴露的是代理服务器 地址,隐藏了真实服务器 IP 地址。
负载均衡
可以把请求按照不同的规则,转发到多台服务器上,从而减少了只有一台服务器的压力。
动静分离
可以将动态请求和静态请求区分处理,从而可以提高执行的效率。
nginx的安装与常用命令
nginx启动和关闭命令
在/usr/local/nginx/sbin目录之下找到nginx,进行启动,命令为
[root@root nginx-1.12.2]# cd /usr
[root@root usr]# ls
bin etc games include lib lib64 libexec local sbin share src tmp
[root@root usr]# cd local
[root@root local]# ls
bin erlang etc games include lib lib64 libexec nginx sbin share src
[root@root local]# cd nginx
[root@root nginx]# ls
conf html logs sbin
[root@root nginx]# cd sbin
[root@root sbin]# ls
nginx
#启动命令
[root@root sbin]# ./nginx
#关闭命令
[root@root sbin]# ./nginx -s stop
[root@root sbin]# ps -ef|grep nginx
root 121737 4114 0 09:47 pts/0 00:00:00 grep --color=auto nginx
查看已经启动的进程
[root@root sbin]# ps -ef| grep nginx
root 120925 1 0 09:33 ? 00:00:00 nginx: master process ./nginx
nobody 120926 120925 0 09:33 ? 00:00:00 nginx: worker process
root 120940 4114 0 09:34 pts/0 00:00:00 grep --color=auto nginx
重新加载nginx命令
在修改完nginx的配置文件之后,一般需要重启nginx使配置文件生效,所以重启命令为‘
[root@root sbin]# ./nginx -s reload
查看nginx的版本号
在/usr/local/nginx/sbin下输入以下,就可查看版本号
[root@root sbin]# ./nginx -v
nginx version: nginx/1.12.2
查看和编辑nginx配置文件
[root@root sbin]# cd ..
[root@root nginx]# ls
client_body_temp conf fastcgi_temp html logs proxy_temp sbin scgi_temp uwsgi_temp
[root@root nginx]# cd conf
[root@root conf]# ls
fastcgi.conf fastcgi_params.default mime.types nginx.conf.default uwsgi_params
fastcgi.conf.default koi-utf mime.types.default scgi_params uwsgi_params.default
fastcgi_params koi-win nginx.conf scgi_params.default win-utf
[root@root conf]# vim nginx.conf
配置文件解析
打开配置文件后,发现有三个部分组成,分别问全局块,events块和http块
全局块
主要会设置一些影响nginx服务器整体运行的配置指令
work_processes值越大,可以支持的并发处理数越多
events块
配置服务器和用户网络连接
worker_connection:设置最大连接数为1024
http块
是nginx配置最频繁的部分,此块又包括http全局块和server块
nginx实现反向代理
1简单的直接访问
根据反向代理的概念,假设希望在浏览器输入www.hai.com,会自动跳转到linux系统封的tomcat主页面
准备工作要先打开linux系统上的tomcat服务器
启动后在windows系统上可以访问linux系统上的tomcat
现在希望在浏览器只输入www.hai.com,就可以实现打开tomcat服务器。具体实现流程如下:
1.更改网址的映射,在host文件中添加映射
打开hosts文件,添加如下
#添加ip和域名
192.168.154.128 www.hai.com
第二步,在nginx服务器下更改配置文件,使访问的端口可以映射到指定的服务
第三步,保存退出并重新其启动nginx
第四步,重启之后,在window浏览器访问,的确可以访问到
带有参数的访问
当访问同一个地址但是带有不同的参数时,会访问到linux上不同的服务
如www.hai.com/tomcat-------->就会开启linux上的tomcat服务器
当访问www.hai.com/rabbitmq-------------->就会开启linux上的rabbitmq服务
找到nginx的配置文件,进行配置
根据不同的参数,可以访问不同的服务器端口号
负载均衡
分配策略
1.轮询分发任务
默认配置就是轮询分发任务,如果有一个服务器坏掉会自动的将故障的服务器剔除掉
2权重策略,权值默认为1,并且权值越大,则被分配的任务也就越多
3 iphash的策略,只需要在上面声明就好
每一个请求按访问ip的hash结果分配,这样每一个访客固定访问一个后端服务器,可以解决session的问题
4.fair,不采用轮询的分配,按照后端处理的速度进行分配
响应时间短的先分配。
动静分离
Nginx的动静分离实际上是指把动态请求和静态请求进行分离,而不能理解为把动态页面和静态页面物理分离。严格意义上说应该是动态请求和静态请求分离开,动静分离从目前实现的角度来讲大致分为两种:一种纯粹是把静态文件独立成单独的域名,放在独立的服务器上,是目前主流的推崇方案,第二种是把动态和静态的资源文件混合发布,通过nginx分开。
通过location指定不同的后缀名实现不同的请求转发,通过expires参数设置,可以使浏览器缓存过期时间,减少与服务器之间的请求和流量。
expire具体参数的含义是给一个资源设定过期时间,也就是说无需去服务端验证,直接通过浏览器自身确认是否过期即可,所以不会产生额外的流量,此方法不适合经常变动的资源。
高可用集群
前面介绍了在一个nginx上对两台多台服务器进行负载均衡,但是如果nginx本身出现故障了也是一个问题,就不能进行后续的访问,因此要对nginx进行高可用,对nginx服务器进行备用服务器
Nginx原理
采用这种机构的好处:
1
2有利于做热部署,即当执行
./nginx -s reload
时,可以不用关闭niginx服务器而重新读取更改的配置文件,原理就是由于nginx采用的是masterWorker机制,当一个worker在执行时,可以暂时先不执行更改的配置,其他worker还没有请求任务时,可以进行配置文件的更新,而当有执行任务的worker执行完任务之后,就可以重新的更新配置文件,从而实现了热点部署。
3Nginx和redis类似,采用了io多路复用机制,每一个worker都是一个独立的进程,但是每一个进程里只有一个主线程,通过异步非阻塞的方式处理请求,每一个新城可以把一个cpu的性能发挥到机制,所以worker的数量和cpu的数量相等是最为适宜的。
每发一次请求,worker的连接数是几个?
可以为2个或者4个,
2个是因为worker接收请求时一个,返回请求时,是一个
4个是因为,有时候可能会有如连接数据库的操作,因此有4个
如果Nginx有一个master,四个worker,每一个worker支持的最大连接数为1024,那么支持的最大并发数是多少?
如果是普通的静态资源访问最大并发数是:worker_numswork_connections/2
41024/2=2048
如果是http作为反向代理来说,最大的并发数为worker_numswork_connections/4
41024/4=1024