Nginx反向代理实现均衡负载
2016-09-14 09:17
573 查看
Nginx反向代理实现均衡负载
nginx-reverse-proxy-conf
为jue.so架设一个服务器集群。
架设服务器均衡负载方式有多种,Nginx、LVS、HAProxy+Keepalived是目前使用最广泛的三种方案
0x01. 关于均衡负载
架设服务器均衡负载方式有多种,Nginx、LVS、HAProxy+Keepalived是目前使用最广泛的三种方案。其中Keepalived+HAProxy是一个高可用性方案。
关于3者比较,可以看这篇博客http://www.rootop.org/pages/2773.html
工作在网络的7层之上,可以针对http应用做一些分流的策略。
0x02.关于Nginx
nginx在启动后,在unix系统中会以daemon的方式在后台运行,后台进程包含一个master进程和多个worker进程。master进程主要用来管理worker进程,包含:接收来自外界的信号,向各worker进程发送信号,监控worker进程的运行状态,当worker进程退出后(异常情况下),会自动重新启动新的worker进程。
而基本的网络事件,则是放在worker进程中来处理了。
多个worker进程之间是对等的,他们同等竞争来自客户端的请求,各进程互相之间是独立的。
关于nginx,主要由3大模块,内核模块,事件模块,http核心模块。
nginx模块一般被分成三大类:handler、filter和upstream。
nginx工作模型
0x03.服务器集群环境
接下来讲下想要搭的均衡负载环境。Nginx服务器集群
系统环境 : Linux Centos 7 aws 2.6.32-504.1.3.el6.x86_64 Nginx Version:1.6.0 均衡负载服务器: 172.31.19.122:80(lnmp一键安装) WEB1: 172.31.15.59:80 WEB2: 172.31.15.94:80 WEB3: 172.31.15.24:80
0x04.负载Nginx配置
服务器用lnmp一键安装,自带的conf配置已经配置好一切了。下面是完整的配置文件。
/usr/local/nginx/conf/nginx.conf
user www www; worker_processes auto; error_log /home/wwwlogs/nginx_error.log crit; pid /usr/local/nginx/logs/nginx.pid; worker_rlimit_nofile 51200; events { use epoll; worker_connections 51200; multi_accept on; } http { include mime.types; default_type application/octet-stream;#处理接收的数据类型 server_names_hash_bucket_size 128; client_header_buffer_size 32k; large_client_header_buffers 4 32k; client_max_body_size 50m; sendfile on; tcp_nopush on; keepalive_timeout 60; tcp_nodelay on; fastcgi_connect_timeout 300; fastcgi_send_timeout 300; fastcgi_read_timeout 300; fastcgi_buffer_size 64k; fastcgi_buffers 4 64k; fastcgi_busy_buffers_size 128k; fastcgi_temp_file_write_size 256k; # 添加gzip压缩 gzip on; gzip_min_length 1k; gzip_buffers 4 16k; gzip_http_version 1.0; gzip_comp_level 2; gzip_types text/plain application/x-javascript text/css application/xml; gzip_vary on; gzip_proxied expired no-cache no-store private auth; gzip_disable "MSIE [1-6]\."; server_tokens off; # 通过upstream处理均衡负载 upstream static.homeway { server 172.31.15.24:80; } upstream homeway { # ip hash主要是对ip处理下,让下次访问时候,还是访问当前服务器,这样就不会导致session丢失 ip_hash; # weight权重,配置访问概率 server 172.31.15.59:80 weight=10; server 172.31.15.94:80 weight=5; } server { listen 80 default; server_name 172.31.19.122; index index.html index.htm index.php; #error_page 404 /404.html; location ~ .*\.(js|css)?$ { expires 12h; } # 静态文件可以用CDN处理,本例子指向WEB3 location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$ { proxy_pass http://static.homeway; } # 通过均衡负载服务器指向WEB1、WEB2 location / { proxy_pass http://homeway; #使用后端的web服务器 proxy_redirect off; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; client_max_body_size 10m; client_body_buffer_size 128k; proxy_connect_timeout 90; proxy_send_timeout 90; proxy_read_timeout 90; proxy_buffer_size 4k; proxy_buffers 4 32k; proxy_busy_buffers_size 64k; proxy_temp_file_write_size 64k; } access_log /home/wwwlogs/access.log access; } include vhost/*.conf; }
核心指令”ip_hash”只能在upstream {}中使用。这条指令用于通知nginx使用ip hash负载均衡算法。如果没加这条指令,nginx会使用默认的round robin负载均衡模块,那么,你每次访问的服务器可能会不同,导致session丢失,一直要重新登录。
关于upstream的源码分析,可以去看 tengine的介绍 http://tengine.taobao.org/book/chapter_05.html
重启服务器下。
/root/lnmp restart
搞定了,确定WEB1,WEB2,WEB3可以正常访问就行了。
这样,假设,我在WEB1的web目录下放一个 fuck.php, WEB2不放,那么。当我访问http://172.31.19.122时候,就会有时候404,有时候返回正常页面,这就表示成功了。
0x05.关于服务性能
这个在目前不能做,因为无法做多用户并发访问,就算模拟器模拟效果也不能达到多用户并发的强度。Nginx的几个优点:
Nginx工作在网络的7层,所以它可以针对http应用本身来做分流策略,比如针对域名、目录结构等,相比之下LVS并不具备这样的功能,所以Nginx单凭这点可利用的场合就远多于LVS了;但Nginx有用的这些功能使其可调整度要高于LVS,所以经常要去触碰触碰,触碰多了,人为出问题的几率也就会大。
Nginx现在作为Web反向加速缓存越来越成熟了,速度比传统的Squid服务器更快,可以考虑用其作为反向代理加速器。
Nginx对网络稳定性的依赖非常小,理论上能ping通就就能进行负载功能,这个也是它的优势之一。
接下来会写关于KeepAlive+HAProxy实践教程。
本文出自 夏日小草,转载请注明出处:http://homeway.me/2014/12/05/nginx-reverse-proxy-to-load-balance/
相关文章推荐
- nginx 作为反向代理实现负载均衡的例子
- nginx 做为反向代理实现负载均衡的例子
- nginx 作为反向代理实现负载均衡的例子
- nginx做为反向代理实现负载均衡的例子 .
- Nginx反向代理实现负载均衡配置图解
- nginx做为反向代理实现负载均衡的例子
- nginx做反向代理,实现负载均衡基本配置。无法加载css,js或图片
- nginx 作为反向代理实现负载均衡的例子
- Nginx反向代理实现均衡负载
- nginx做为反向代理实现负载均衡的例子
- nginx 作为反向代理实现负载均衡的例子
- nginx做为反向代理实现负载均衡的例子
- nginx做为反向代理实现负载均衡的例子
- Nginx反向代理实现负载均衡配置图解
- nginx 作为反向代理实现负载均衡的例子
- nginx 作为反向代理实现负载均衡的例子 详细出处参考:http://www.jb51.net/article/25643.htm
- nginx 作为反向代理实现负载均衡的例子_nginx_脚本之家
- Nginx反向代理实现负载均衡配置图解
- Nginx反向代理实现Tomcat集群服务器的负载均衡
- nginx 作为反向代理实现负载均衡的例子