使用Nginx反向代理来实现简单的负载均衡

简介:

Nginx反向代理的原理优点:

反向代理可以简单的理解为:代理服务器来接收internet上的服务器请求,然后将请求转发给内部的服务器上,然后将结果返回给internet上请求的客户端,所以代理服务器对外表现出来的只是一台服务器。反向代理服务器也称为Web服务器加速,针对web服务器提供加速功能。他作为代理服务器,并不针对浏览器用户,而是针对一台或者多台特定的web服务器。可以缓存web的页面,降低web服务器的访问量,从而来降低web服务器的负载,实施反向代理,只要将反向代理设备放置在一台或多台Web服务器前端即可。当互联网用户访问某个WEB服务器时,通过DNS服务器解析后的IP地址是代理服务器的IP地址,而非原始Web服务器的IP地址,这时代理服务器设备充当Web服务器,浏览器可以与它连接,无需再直接与Web服务器相连。因此,大量Web服务工作量被转载到反向代理服务上。不但能够很大程度上减轻web服务器的负担,提高访问速度,而且能够防止外部网主机直接和web服务器直接通信带来的安全隐患。

Nginx proxyNginx的王牌功能,利用proxy基本可以实现一个完整的7层负载均

衡,它有这 些特色:

1. 功能强大,性能卓越,运行稳定。

2. 配置简单灵活。

3. 能够自动剔除工作不正常的后端服务器。

4. 上传文件使用异步模式。

5. 支持多种分配策略,可以分配权重,分配方式灵活

 

项目拓扑:

配置环境:

三台CentOS6.2X86  1台做Nginx Proxy  2Apache做页面测试服务器

配置步骤:

在安装之前首先解决依赖包的问题,pcre-devel openssl zlib-devel 

一、安装nginx服务器

1.       后台的web服务我们使用的是Apache服务,关于Apache的安装部署我们在这里就不做详细说明了,我们的重点在nginx方向代理怎么配置。

2.       安装Nginx服务

 
  1. yum -y install make 
  2.  
  3.    yum -y install pcre pcre-devel openssl-devel zlib-devel gcc gcc-c++ 
  4.  
  5.    mkdir /usr/local/site/nginx -p 
  6.  
  7.    useradd -s /sbin/nologin www 
  8.  
  9.    rpm -qa | grep httpd 
  10.  
  11.    ./configure --prefix=/usr/local/site/nginx/ --user=www --group=www  \ 指定Nginx用户组 
  12.  
  13. --with-http_stub_status_module  \  非核心模块,获取从上次开启之后Nginx的状态 
  14.  
  15. --with-http_ssl_module    开启SSL模块 
  16.  
  17.   make && make install 

3.       修改nginx主配置文件,主配置文件路径:/usr/local/site/nginx/conf/nginx.conf,最好配置文件作下备份;

 
  1. user  www;                                 指定nginx的运行用户, 
  2.  
  3. worker_processes  1;              指定线程,默认情况下Nginx是单线程运行, 
  4.   
  5.  
  6. #error_log  logs/error.log;    日志模块 
  7.  
  8. #error_log  logs/error.log  notice; 
  9.  
  10. #error_log  logs/error.log  info; 
  11.  
  12. #pid        logs/nginx.pid;            //inx主进程ID 
  13.  
  14. events { 
  15.  
  16.     user epoll;        //inx的高效模式; 
  17.  
  18. worker_connections  65535;                   //文件最大的连接数; 
  19.  
  20.    
  21.  
  22. http { 
  23.  
  24.        include       mime.types;                     //置文件模块; 
  25.  
  26.     default_type  application/octet-stream;             //核心配置文件模块; 
  27.  
  28.     sendfile        on;                      //开启高效传输模式; 
  29.  
  30.     tcp_nopush     on;                       //防止网络端口阻塞;   
  31.  
  32.     #keepalive_timeout  0; 
  33.  
  34.     keepalive_timeout  65;  
  35.  
  36.     #gzip  on;                  //开启压缩模块,需要注意的是在配置文件中开启之后是不生效的,还需要加载gzip模块 
  37.   
  38.  
  39.     server { 
  40.  
  41.         listen       80;               //监听的80端口 
  42.  
  43.         server_name  proxy.rsyslog.net;        //指定代理服务器的域名 
  44.  
  45.         location / { 
  46.  
  47.             root   html;                 //配置文件所在的目录,这里是相对路径 
  48.  
  49.             index  index.html index.htm;    //页面文件的类型; 
  50.  
  51.         } 
  52.  
  53.         error_page  404              /404.html;         //相关错误提示页面 
  54.  
  55.         error_page   500 502 503 504  /50x.html; 
  56.  
  57.         location = /50x.html { 
  58.  
  59.             root   html; 
  60.  
  61.         } 
  62.  
  63.     } 
  64.  

然后重启服务测试服务是否正常,links proxy.rsyslog.net 域名需要在dns服务器上配置正确

Nginx支持不间断运行,启动的命令

kill -HUP `cat /usr/local/site/nginx/logs/nginx.pid`

查看Nginx服务状态,确定正常之后我们来配置Nginx Proxy,查看Nginx端口

 
  1. [root@localhost conf]# ps -ef | grep nginx 
  2.  
  3. root     27276     1  0 15:53 ?        00:00:00 nginx: master process ./nginx 
  4.  
  5. www      27315 27276  0 16:03 ?        00:00:00 nginx: worker process 
  6.  
  7. root     27317 25195  0 16:05 pts/0    00:00:00 grep nginx 
 

二、配置Nginx 反向代理服务器,反向代理服务器的配置如下;需要修改两个两个地方,在HTTP字段里面修改和Server字段中修改,在下图中只把需要添加的文件列出来即可。

 
  1. http { 
  2.  
  3.     include       mime.types; 
  4.  
  5. default_type  application/octet-stream; 
  6.  
  7.     client_max_body_size 300m;             //允许客户端请求的最大的单个文件字节数 
  8.  
  9.     client_body_buffer_size 128k;        //缓存区代理用户端文件字节数 
  10.  
  11.     client_body_temp_path /dev/shm/client_body_temp;     //请求试图写入到缓存文件的目录路径 
  12.  
  13.     proxy_connect_timeout600;              //和后端服务器连接的超时时间, 
  14.  
  15.     proxy_read_timeout 600;                  //连接成功等待后端相应的时间,默认是60S 
  16.  
  17.     proxy_send_timeout 600;             //后端服务器的回传时间,规定服务器在一定的时间内传送完。 
  18.  
  19.     proxy_buffer_size 16k;                  //代理服务器的缓存文件头部文件大小,默认是4K 
  20.  
  21.     proxy_buffers 4 32k;                    //后端真是服务器的数量和大小 
  22.  
  23.     proxy_busy_buffers_size 64k;            //当系统忙事,申请更大proxy_buffer 
  24.  
  25.     proxy_temp_file_write_size 64k;         //写入临时目录的文件大小 
  26.  
  27.     proxy_temp_path /dev/shm/proxy_temp;    //指定一个目录来缓存比较大的代理请求 
  28.  
  29.  
  30. 如下是HTTP负载均衡模块upstream 指定设置一群服务器,服务器可以指定不同的权重,默认为1。Nginx支持5种方式的查询, 
  31.  
  32. 1、  轮询 Nginx默认的查询方式 
  33.  
  34. 2、  Weight 指定分配的轮询方式,根据后端服务器的性能来做权重,在此案例中我们使用这种方式来轮询的 
  35.  
  36. 3、  Ip_hash 每个请求按照ip的hash结果分配,这样每个IP地址就可以固定的访问后端的一台服务器,解决了session的问题 
  37.  
  38. 4、  Fair 第三方模块,这个原理是按照响应时间的优先来分配的, 
  39.  
  40. 5、  url_hash    按照url的hash结果来分配请求,使每个url定向到同一个后端的服务器; 
  41.  
  42.          upstream cluster { 
  43.  
  44.              server 192.168.100.238:80 weight=8 max_fails=2 fail_timeout=30s
  45.  
  46.              server 192.168.100.248:80 weight=8 max_fails=2 fail_timeout=30s
  47.  
  48.          }   
  49.  
  50.     server { 
  51.  
  52.         listen       80; 
  53.  
  54.         server_name  localhost; 
  55.    
  56.  
  57.         location / { 
  58.  
  59.             root   html; 
  60.  
  61.             index  index.html index.htm; 
  62.  
  63.             proxy_pass http://cluster/;       //指定需要代理的URL, 
  64.  
  65.             proxy_redirect off;         //如果需要从后端打开location和Refresh字段,可以开启。 
  66.  
  67.             proxy_set_header X-Real-IP $remote_addr;           //允许将发送到后端的服务器请求重新定义或者增加一个字段,这个可以是变量也是文本组合。 
  68.  
  69.             proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;      //联系下面PS中所写,在后端web中就算加上$http_x_Forwarded_for这条,也得不到用户的IP,所以在nginx反向代理添加Header头信息 X-Forwarded-For在配合后端服务器日志文件的$http_x_Forwarded_for这条就可以获得用户的IP地址了。 
  70.  
  71.             proxy_set_header Host $host;               //首先说明 proxy_set_header 指令在向反向代理的后端Web服务器发起请求时添加指定的 Header头信息,后端web服务器有多个基于域名的虚拟主机时,通过头信息Host,用于指定请求的域名,这样后端web才能识别反向代理请求哪个虚拟主机处理。 
  72.  
  73.             proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 
  74.  
  75.             http_504 http_404; 服务器头部超时相应的各种状态 
  76.  
  77.         } 
  78.  
  79.  

配置完成之后平滑重启Nginx服务

 
  1. kill -HUP `cat /usr/local/site/nginx/logs/nginx.pid` 

三、测试,刷新测试能正常进行负载,可以根据自己的环境来对nginx proxy的设置轮询模式;



本文转自devilangel 51CTO博客,原文链接:http://blog.51cto.com/devliangel/1142008,如需转载请自行联系原作者


相关实践学习
部署高可用架构
本场景主要介绍如何使用云服务器ECS、负载均衡SLB、云数据库RDS和数据传输服务产品来部署多可用区高可用架构。
负载均衡入门与产品使用指南
负载均衡(Server Load Balancer)是对多台云服务器进行流量分发的负载均衡服务,可以通过流量分发扩展应用系统对外的服务能力,通过消除单点故障提升应用系统的可用性。 本课程主要介绍负载均衡的相关技术以及阿里云负载均衡产品的使用方法。
相关文章
|
10天前
|
负载均衡 算法 应用服务中间件
面试题:Nginx有哪些负载均衡算法?Nginx位于七层网络结构中的哪一层?
字节跳动面试题:Nginx有哪些负载均衡算法?Nginx位于七层网络结构中的哪一层?
28 0
|
1月前
|
负载均衡 应用服务中间件 Linux
|
2月前
|
tengine Rust 负载均衡
反向代理学习笔记(一) Nginx与反向代理绪论
反向代理学习笔记(一) Nginx与反向代理绪论
|
2月前
|
负载均衡 Java 应用服务中间件
|
2月前
|
负载均衡 监控 应用服务中间件
Nginx负载均衡:你的网站流量翻倍利器
Nginx负载均衡:你的网站流量翻倍利器
42 0
|
2月前
|
消息中间件 关系型数据库 MySQL
使用Nginx的stream模块实现MySQL反向代理与RabbitMQ负载均衡
使用Nginx的stream模块实现MySQL反向代理与RabbitMQ负载均衡
60 0
|
3月前
|
负载均衡 算法 前端开发
Ngnix之反向代理、负载均衡、动静分离
Nginx是一个高性能的开源Web服务器,它还可以用作反向代理、负载均衡器以及动静分离的工具。
|
3月前
|
负载均衡 应用服务中间件 nginx
百度搜索:蓝易云【Nginx和tomcat实现负载均衡教程】
至此,你已经成功地使用Nginx和Tomcat实现了负载均衡。Nginx将根据配置的负载均衡策略将客户端请求分发到多个Tomcat服务器上,以提高系统的性能和可用性。请注意,在实际生产环境中,还需要进行其他配置和优化,如健康检查、会话保持等,以满足具体的需求。
34 0
|
3月前
|
负载均衡 安全 前端开发
百度搜索:蓝易云【Nginx与Tomcat负载均衡-动静分离教程】
这些是将Nginx与Tomcat结合使用实现负载均衡和动静分离的基本步骤。根据您的需求和具体环境,可能还需要进行其他配置和调整。请确保在进行任何与网络连接和安全相关的操作之前,详细了解您的网络环境和安全需求,并采取适当的安全措施。
48 1
|
3月前
|
缓存 负载均衡 算法
【Nginx】Nginx 负载均衡
【1月更文挑战第25天】【Nginx】Nginx 负载均衡