nginx实现反向代理和负载均衡

Nginx是常被用于做负载均衡的工具,了解nginx应用之前,有必要先了解一下什么是负载均衡。

负载均衡,从广义上来讲是一种计算机技术,用来在多级计算机、网络连接、CPU、磁盘驱动器或其他资源中分配负载,通过冗余提高可靠性,以达到最大利用、最大吞吐量、最小化响应时间、同时避免过载的目的。从狭义上讲是集群技术的一种应用,通过将工作任务分摊到多个处理单元从而提高系统的并发能力。总结于维基百科nginx是一个异步框架的Web服务器,拥有占有内存少,稳定性高,并发能力强等优点,对于并发能力,官网给出的并发数为5W。

对nginx的应用主要表现在三个方面,分别为:反向代理、负载平衡器、http服务器

在nginx的安装目录conf中找到nginx.conf,可以通过修改http下的upstream配置服务器实现服务器资源的分配负载。此时nginx类似于一个代理,会根据配置信息将请求转发到相应的服务器上,实现对多请求的负载。nginx在负载均衡上提供了几种策略供我们选择:

  • RR轮询(默认),nginx会将每个请求按照时间间隔的顺序逐一分配到不同的后端服务器上
  • 权重,weight越大,则该台服务器越有机会被访问到
  • ip_hash,通过对ip进行hash计算并缓存,下一次相同的ip访问时候会分配到对应的服务器上,可解决多台服务器之间session共享的问题
  • fair,会记录服务器的相应时间,相应时间短的优先分配
  • url_hash,通过对url进行hash计算实现资源的分配负载
nginx是支持热部署的,具体配置可参考如下:
upstream project_nginx{
    ip_hash;
    #服务器配置,weight越大越有机会被访问到,15秒内出现3次错误  
    #接下来30s内不再去访问该服务器  
    server 127.0.0.1:8080 weight=1 max_fails=3 fail_timeout=30s;
    server 127.0.0.1:8081 weight=2 max_fails=3 fail_timeout=30s;
}

server {
    listen       80;
    server_name  localhost; #域名
    charset utf-8;
    #access_log  logs/host.access.log  main;

    location / {
        proxy_set_header  Host $host:80; #端口跟上面的一致  
        proxy_set_header  REMOTE-HOST $remote_addr;
        proxy_set_header  X-Real-IP $remote_addr; #记录转发的ip 
        proxy_set_header  X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_pass  http://project_nginx; #跟upstream后面的一样
    }
}

同时,nginx也可以作为http服务器,nginx在静态文件(js/css/img等)的处理上自动索引的效率高,因此可利用nginx对静态资源的缓存实现动静分离,可分担了大部分访问数据流量和 IO 负载。具体配置如下:

#静态资源配置
#
location ~ .*\.(gif|jpg|jpeg|png|ioc)$ {
     root  /home/tomcat8.0/webapps;
     expires 30d;
}
                                                                    
location ~ .*\.(js|css)?$ {
     root /home/tomcat8.0/webapps;
     expires 1h;
}

猜你喜欢

转载自blog.csdn.net/hsf15768615284/article/details/80726907
今日推荐