深入理解nginx

nginx

Nginx (engine x) 是一个高性能的HTTP和反向代理服务器

nginx作用

  • 反向代理
    客户端是无感知代理的存在的,反向代理对外都是透明的,访问者者并不知道自己访问的是一个代理。因为客户端不需要任何配置就可以访问。
    反向代理(Reverse Proxy)实际运行方式是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客户端,此时代理服务器对外就表现为一个服务器。nginx就是一个反向代理服务器,用于做请求分发

补充正向代理:
代理服务器在客户端这边并且用户端知道正向代理服务器的存在,并且还要知道代理服务器程序的ip地址和端口。比如服务器用于
正向代理 是一个位于客户端和原始服务器(origin server)之间的服务器,为了从原始服务器取得内容,客户端向代理发送一个请求并指定目标(原始服务器),然后代理向原始服务器转交请求并将获得的内容返回给客户端。客户端必须要进行一些特别的设置才能使用正向代理。

  • 负载均衡

所谓负载均衡是指请求数量按照一定的规则进行分发到不同的服务器处理的规则,就是一种均衡规则。所以~将服务器接收到的请求按照规则分发的过程,称为负载均衡。

负载均衡在实际项目操作过程中,有硬件负载均衡和软件负载均衡两种,硬件负载均衡也称为硬负载,如F5负载均衡,相对造价昂贵成本较高,但是数据的稳定性安全性等等有非常好的保障,如中国移动中国联通这样的公司才会选择硬负载进行操作;更多的公司考虑到成本原因,会选择使用软件负载均衡,软件负载均衡是利用现有的技术结合主机硬件实现的一种消息队列分发机制

nginx支持的负载均衡调度算法方式如下(默认支持轮询和ip_hash):

  1. weight轮询(默认):接收到的请求按照顺序逐一分配到不同的后端服务器,可以给不同的后端服务器设置一个权重值(weight),用于调整不同的服务器上请求的分配率;权重数据越大,被分配到请求的几率越大;该权重值,主要是针对实际工作环境中不同的后端服务器硬件配置进行调整的。

  2. ip_hash:每个请求按照发起客户端的ip的hash结果进行匹配,这样的算法下一个固定ip地址的客户端总会访问到同一个后端服务器,这也在一定程度上解决了集群部署环境下session共享的问题。

  3. fair:智能调整调度算法,动态的根据后端服务器的请求处理到响应的时间进行均衡分配,响应时间短处理效率高的服务器分配到请求的概率高,响应时间长处理效率低的服务器分配到的请求少;但是需要注意的是nginx默认不支持fair算法,如果要使用这种调度算法,请安装upstream_fair模块

  4. url_hash:按照访问的url的hash结果分配请求,每个请求的url会指向后端固定的某个服务器,可以在nginx作为静态服务器的情况下提高缓存效率。同样要注意nginx默认不支持这种调度算法,要使用的话需要安装nginx的hash软件包

nginx中location配置

    = 开头表示精确匹配
    ^~ 开头表示uri以某个常规字符串开头,理解为匹配 url路径即可。
    ~ 开头表示区分大小写的正则匹配
    ~*  开头表示不区分大小写的正则匹配
    !~和!~*分别为区分大小写不匹配及不区分大小写不匹配 的正则
    / 通用匹配,任何请求都会匹配到。
    首先匹配 =,其次匹配^~, 其次是按文件中顺序的正则匹配,最后是交给 / 通用匹配。当有匹配成功时候,停止匹配,按当前匹配规则处理请求。
  • rewrite和return规则
  1. return:符合某种条件直接返回什么信息
if  ($remote_addr = 192.168.122.1)  {
	return 401;
}	
  1. rewrite:重写,将符合资源路径的请求重定向到一个新的url
 rewrite "goods-(\d{1,5})\.html" /goods.html;

nginx做反向代理

    server {
        listen  8090;
        server_name  localhost;
        location / {
                proxy_pass http://192.168.136.161:8080/test.jsp;
        }

    }

nginx做负载均衡

    #upstream myproject {
		#weigth参数表示权值,权值越高被分配到的几率越大
		#max_fails 当有#max_fails个请求失败,就表示后端的服务器不可用,默认为1,将其设置为0可以关闭检查
		#fail_timeout 在以后的#fail_timeout时间内nginx不会再把请求发往已检查出标记为不可用的服务器
	#}

    upstream myapp {   
  	 server 192.168.122.133:8080 weight=1 max_fails=2 fail_timeout=30s;   
	 server 192.168.122.134:8080 weight=1 max_fails=2 fail_timeout=30s;   
    } 

nginx高可用

  • 我们是通过Nginx进行反向代理,如果Nginx关了的话就没有其他服务支撑.所以我们需要来实现Nginx的高可用,高可用就是我们一台机器挂了可以切换到另外一台机器.
    我们使用Nginx+keepalived搭建高可用环境

  • Keepalived,它是一个高性能的服务器高可用或热备解决方案,Keepalived主要防止服务器单点故障的问题,可以通过其与Nginx的配合实现web服务器端的高可用.

你可能感兴趣的:(深入理解nginx)