Nginx-1.9.9 实现 负载均衡、反向代理




《 Nginx-1.9.9 实现 负载均衡、反向代理 》







了解 Nginx 虚拟主机

《Centos-7.2下使用 Nginx-1.9.9 实现虚拟主机的几种解决方案》




安装 Nginx 
《 Centos-7.2 下 Nginx-1.9.9 安装图文详解 》




一、关于 Nginx 的反向代理;
通常的代理服务器,只用于代理内部网络对 Internet 的连接请求,客户机必须指定代理服务器,并将本来要直接发送到Web服务器上的http请求发送到代理服务器中由代理服务器向Internet
上的web服务器发起请求,最终达到客户机上网的目的。


而反向代理(Reverse Proxy)方式是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客户端,
此时代理服务器对外就表现为一个反向代理服务器。
如下图:




Nginx 作反向代理服务器只做请求的转发,后台有多个http服务器提供服务,nginx的功能就是把请求转发给后面的服务器,决定把请求转发给谁。
二、Nginx + Tomcat 实现反向代理
在通常情况下,实现反向代理,至少需要两个 tomcat 服务器和一个 nginx 反向代理服务器,
nginx 服务器:192.168.69.101
tomcat1 服务器:192.168.69.102
tomcat2 服务器:192.168.69.103
如下图:




由于硬件设施的限制,那么在这儿一个虚拟机上创建三个tomcat实例,模拟多个服务器,和实际生产环境大致相同。
通过访问不同的域名访问运行在不同端口的tomcat,配置内容如下图:
www.8080.com访问运行 8080 端口的 tomcat 服务器;
www.8081.com访问运行 8081 端口的 tomcat 服务器;
www.8082.com访问运行 8082 端口的 tomcat 服务器;


这儿给个工具比较使用的工具,SwitchHosts ! 是一个管理、切换多个 hosts 方案的工具。它是一个免费开源软件。

下载地址:http://download.csdn.net/download/hello_world_qwp/10268575

谢谢支持!!!

下载完成后,以管理员身份安装和运行,如果安装 360 杀毒软件的可能标识为病毒,手动授权即可正常使用!


在本地 Host 文件中进行配置,如下图:




配置 Nginx 的反向代理,输入命令 “ vi vi conf/nginx.conf ” ,键入内容如下:


    upstream tomcat_001 {
		server 192.168.78.141:8080;
    }
	
    upstream tomcat_002 {
		server 192.168.78.141:8081;
    }
	
	upstream tomcat_003 {
		server 192.168.78.141:8082;
    }
	
    server {
        listen       80;
        server_name  www.8080.com;
        location / {
            proxy_pass   http://tomcat_001;
            index  index.html index.htm;
        }  
    }
	
    server {
        listen       80;
        server_name  www.8081.com;
        location / {
            proxy_pass   http://tomcat_002;
            index  index.html index.htm;
        }
    }
	
    server {
        listen       80;
        server_name  www.8082.com;
        location / {
            proxy_pass   http://tomcat_003;
            index  index.html index.htm;
        }
    }





如下图:




测试反向代理,请求访问 www.8080.com 域名通过 nginx 代理访问 tomcat_001,如下图:




测试反向代理,请求访问 www.8081.com 域名通过 nginx 代理访问 tomcat_002,如下图:




测试反向代理,请求访问 www.8082.com 域名通过 nginx 代理访问 tomcat_003,如下图:




三、关于 Nginx 负载均衡


负载均衡是建立在现有网络结构之上的,它提供了一种廉价的有效透明的方法扩展网络设备和服务器的带宽、增加吞吐量、加强网络数据处理能力、提高网络的灵活性和可用性。

负载均衡,英文名称为Load Balance,其意思就是分摊到多个操作单元上进行执行,例如Web服务器、FTP服务器、企业关键应用服务器和其它关键任务服务器等,从而共同完成工作任务。


当一台服务器的单位时间内的访问量越大时,服务器压力就越大,大到超过自身承受能力时,服务器就会崩溃。为了避免服务器崩溃,让用户有更好的体验,我们通过负载均衡的方式来分担服务器压力。
我们可以建立很多很多服务器,组成一个服务器负载均衡系统,当用户访问网站时,先访问一个中间服务器,在让这个中间服务器在服务器负载均衡系统中选择一个压力较小的服务器,然后将该访问请求引入该服务器。如此以来,用户的每次访问,都会保证服务器负载均衡系统中的每个服务器压力趋于平衡,分担了服务器压力,避免了服务器崩溃的情况。
负载均衡是用反向代理的原理实现的。


结论:

正向代理 -> 代理的是用户。
反向代理 -> 代理的是服务器。


四、Nginx + Tomcat 实现负载均衡


Nginx 实现反向代理的结构图,如下:




根据上图所示的需求在 nginx.conf 文件中配置负载均衡,内容如下:
    

   upstream tomcat_pool {
                server 192.168.78.141:8080;
                server 192.168.78.141:8081;
                server 192.168.78.141:8082;
    }


    server {
        listen       80;
        server_name  www.baity.com;
        location / {
            proxy_pass   http://tomcat_pool;
            index  index.html index.htm;
        }
    }




配置详解:
1、down
表示当前的 server 暂时不参与负载,并且该服务器不提供任何服务;
2、weight
默认为 1,权重值越大,在整个负载均衡系统中提供请求处理的几率就越大;
3、max_fails
允许请求失败的次数,默认为 1,当超过最大失败次数时,将返回 proxy_next_upstream 模块定义的错误解决方案;
4、fail_timeout
当 max_fails 超过最大失败次数后,设置 Tomcat服务器 暂停的时间; 
5、backup
在一个 Tomcat 负载均衡系统中,当所有的 Tomcat 服务器处于处理用户请求的状态中时,此时进来的请求将交由定义为 backup 的 Tomcat 服务器提供请求处理的服务。

如下图:






在本地 Host 文件中进行配置,如下图:




测试 Nginx + Tomcat 的负载均衡,注意观察端口变化情况,如下图:




在这儿就只测试轮询(默认不跟参数)了,在实际的生产环境中,可以根据使用情况进行参数的配置和调整。


关于负载均衡的各种实用方式


1、轮询(默认)
每个请求顺序分配到不同的 Tomcat 服务器,如果其中某台服务器宕机,则该服务器不再参与轮询。


upstream tomcat_pool {
	server 192.168.78.141:8080;
	server 192.168.78.141:8081;
	server 192.168.78.141:8082;
}




2、weight (权重)
配置权重后,将决定 Tomcat 服务器提供服的几率,权重的值越大,提供处理请求的几率就越大,主要解决了硬件设施导致服务器性能的不均匀,这个就可以根据实际情况进行均衡分配。


upstream tomcat_pool {
	server 192.168.78.141:8080 weight=3;
	server 192.168.78.141:8081 weight=2;
	server 192.168.78.141:8082 weight=1;
}




3、fair
按负载均衡系统中请求处理响应的时间来进行分配,响应时间短的优先分配。


upstream tomcat_pool {
	server 192.168.78.141:8080;
	server 192.168.78.141:8081;
	server 192.168.78.141:8082;
	fair;
}




4、ip_hash
配置了 ip_hash 指令后,当用户请求服务器时,nginx 会将该请求通过哈希算法,自动按访问 ip 的 hash 结果分配到该服务器,这样就固定某个 Tomcat 服务器为某个用户提供固定的请求处理。
主要解决了当用户服务器后,再次访问时被分配到其它服务器处理请求时,再次需要登陆的问题, ip_hash 主要作用是根据 ip 来维持 session 的 (当然,这个可以使用 Tomcat 自带的 session 共享实现,但是当负载均衡系统较大时,session 共享就不太适合了  或者 也可以使用 memcached 来实现 session 共享,这样就无需担心 session 掉线了,这个需要架构师对系统的一个权衡了 )。


upstream tomcat_pool {
	ip_hash;
	server 192.168.78.141:8080;
	server 192.168.78.141:8081;
	server 192.168.78.141:8082;
}






5、url_hash
配置 url_hash 指令后,当用户请求服务器时,nginx 会将该请求通过哈希算法,自动按访问 url 的 hash 结果固定到该服务器,url_hash 的优点是能够提高负载均衡系统的服务效率,比如提高 squid(高性能的代理缓存服务器) 的效率,
但是缺点是当负载均衡系统中某台服务器宕机的时候,url_hash 不会自动跳转的其他缓存服务器,而是返回给用户一个503错误,这是最尴尬的地方,不知道现在有没有改进这点,持续关注中。。。


upstream tomcat_pool {
	server 192.168.78.141:8080;
	server 192.168.78.141:8081;
	server 192.168.78.141:8082;
	hash $request_uri;
	hash_method crc32;
}














好了,关于 Nginx-1.9.9 实现 负载均衡、反向代理 就写到这儿了,如果还有什么疑问或遇到什么问题,可以给我留言。
歇后语:“共同学习,共同进步”,也希望大家多多关注CSND的IT社区。
  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
window 版本 nginx 最新版本 一般结合Tomcat 使用 配置信息如下: #运行用户 user www-data; #启动进程,通常设置成和cpu的数量相等 worker_processes 1; #全局错误日志及PID文件 error_log /var/log/nginx/error.log; pid /var/run/nginx.pid; #工作模式及连接数上限 events { use epoll; #epoll是多路复用IO(I/O Multiplexing)中的一种方式,但是仅用于linux2.6以上内核,可以大大提高nginx的性能 worker_connections 1024;#单个后台worker process进程的最大并发链接数 # multi_accept on; } #设定http服务器,利用它的反向代理功能提供负载均衡支持 http { #设定mime类型,类型由mime.type文件定义 include /etc/nginx/mime.types; default_type application/octet-stream; #设定日志格式 access_log /var/log/nginx/access.log; #sendfile 指令指定 nginx 是否调用 sendfile 函数(zero copy 方式)来输出文件,对于普通应用, #必须设为 on,如果用来进行下载等应用磁盘IO重负载应用,可设置为 off,以平衡磁盘与网络I/O处理速度,降低系统的uptime. sendfile on; #tcp_nopush on; #连接超时时间 #keepalive_timeout 0; keepalive_timeout 65; tcp_nodelay on; #开启gzip压缩 gzip on; gzip_disable "MSIE [1-6]\.(?!.*SV1)"; #设定请求缓冲 client_header_buffer_size 1k; large_client_header_buffers 4 4k; include /etc/nginx/conf.d/*.conf; include /etc/nginx/sites-enabled/*; #设定负载均衡的服务器列表 upstream mysvr { #weigth参数表示权值,权值越高被分配到的几率越大 #本机上的Squid开启3128端口 server 192.168.8.1:3128 weight=5; server 192.168.8.2:80 weight=1; server 192.168.8.3:80 weight=6; } server { #侦听80端口 listen 80; #定义使用www.xx.com访问 server_name www.xx.com; #设定本虚拟主机的访问日志 access_log logs/www.xx.com.access.log main; #默认请求 location / { root /root; #定义服务器的默认网站根目录位置 index index.php index.html index.htm; #定义首页索引文件的名称 fastcgi_pass www.xx.com; fastcgi_param SCRIPT_FILENAME $document_root/$fastcgi_script_name; include /etc/nginx/fastcgi_params; } # 定义错误提示页面 error_page 500 502 503 504 /50x.html; location = /50x.html { root /root; } #静态文件,nginx自己处理 location ~ ^/(images|javascript|js|css|flash|media|static)/ { root /var/www/virtual/htdocs; #过期30天,静态文件不怎么更新,过期可以设大一点,如果频繁更新,则可以设置得小一点。 expires 30d; } #PHP 脚本请求全部转发到 FastCGI处理. 使用FastCGI默认配置. location ~ \.php$ { root /root; fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME /home/www/www$fastcgi_script_name; include fastcgi_params; } #设定查看Nginx状态的地址 location /NginxStatus { stub_status on; access_log on; auth_basic "NginxStatus"; auth_basic_user_file conf/htpasswd; } #禁止访问 .htxxx 文件 location ~ /\.ht { deny all; } } }

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值