学习Nginx反向代理实现简单负载均衡



Nginx proxy作为Nginx的重要功能,使用nginx proxy基本可以实现一个完整的7层负载均衡。其特色如下:1、功能强大,性能卓越,运行稳定。2、配置简单灵活。

Nginx proxy作为Nginx的重要功能,使用nginx
proxy基本可以实现一个完整的7层负载均衡。

其特色如下:

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

2、配置简单灵活。

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

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

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

配置环境:

三台centos6.2X86

一台做Nginx Proxy

二台Apache做页面测试服务器

配置步骤:

安装前要先解决包的依赖问题:pcre-devel openssl zlib-devel

一、安装nginx服务器

1、后台的web服务使用Apache,有关apache 配置的文章这里不多说,本文重点在配置nginx反向代理

2、安装Nginx服务

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

Nginx.conf代码  

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

server {
listen       80;               //监听的80端口
server_name  proxy.rsyslog.net;        //指定代理服务器的域名 

location / {
  root   html;                 //配置文件所在的目录,这里是相对路径
  index  index.html index.htm;    //页面文件的类型;
}
error_page  404              /404.html;         //相关错误提示页面
error_page   500 502 503 504  /50x.html;
location = /50x.html {
root   html;
 }
}
}
 

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

Nginx支持不间断运行:

Linux命令代码  

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

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

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

如下是HTTP负载均衡模块upstream 指定设置一群服务器,服务器可以指定不同的权重,默认为1。             Nginx支持5种方式的查询,

1、轮询 Nginx默认的查询方式

2、Weight 指定分配的轮询方式,根据后端服务器的性能来做权重,在此案例中我们使用这种方式来轮询的

3、Ip_hash 每个请求按照ip的hash结果分配,这样每个IP地址就可以固定的访问后端的一台服务器,解决了session的问题

4、Fair 第三方模块,这个原理是按照响应时间的优先来分配的,

5、url_hash    按照url的hash结果来分配请求,使每个url定向到同一个后端的服务器;

Nginx.conf代码  

  1. upstream cluster {
  2. server 192.168.100.238:80 weight=8 max_fails=2 fail_timeout=30s;
  3. server 192.168.100.248:80 weight=8 max_fails=2 fail_timeout=30s;
  4. }
  5. server {
  6. listen       80;
  7. server_name  localhost;
  8. location / {
  9. root   html;
  10. index  index.html index.htm;
  11. proxy_pass http://cluster/;  //指定需要代理的URL,
  12. proxy_redirect off;         //如果需要从后端打开location和Refresh字段,可以开启。
  13. proxy_set_header X-Real-IP $remote_addr;  //允许将发送到后端的服务器请求重新定义或者增加一个字段,这个可以是变量也是文本组合。
  14. 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地址了。
  15. proxy_set_header Host $host; //首先说明 proxy_set_header 指令在向反向代理的后端Web服务器发起请求时添加指定的 Header头信息,后端web服务器有多个基于域名的虚拟主机时,通过头信息Host,用于指定请求的域名,这样后端web才能识别反向代理请求哪个虚拟主机处理。
  16. proxy_next_upstream error timeout invalid_header http_500 http_502 http_503
  17. http_504 http_404; 服务器头部超时相应的各种状态
  18. }
  19. }
  20. }
upstream cluster {
  server 192.168.100.238:80 weight=8 max_fails=2 fail_timeout=30s;
  server 192.168.100.248:80 weight=8 max_fails=2 fail_timeout=30s;
}   

server {
 listen       80;
server_name  localhost; 

location / {
   root   html;
   index  index.html index.htm;
   proxy_pass http://cluster/;  //指定需要代理的URL,
   proxy_redirect off;         //如果需要从后端打开location和Refresh字段,可以开启。
   proxy_set_header X-Real-IP $remote_addr;  //允许将发送到后端的服务器请求重新定义或者增加一个字段,这个可以是变量也是文本组合。
   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地址了。
   proxy_set_header Host $host; //首先说明 proxy_set_header 指令在向反向代理的后端Web服务器发起请求时添加指定的 Header头信息,后端web服务器有多个基于域名的虚拟主机时,通过头信息Host,用于指定请求的域名,这样后端web才能识别反向代理请求哪个虚拟主机处理。
   proxy_next_upstream error timeout invalid_header http_500 http_502 http_503
   http_504 http_404; 服务器头部超时相应的各种状态
 }
}
} 

配置完成,平滑重启Nginx服务:kill -HUP `cat /usr/local/site/nginx/logs/nginx.pid`

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

Nginx反向代理的原理优点:

反向代理可以简单的理解为:代理服务器来接收internet上的服务器请求,然后将请求转发给内部的服务器上,然后将结果返回给internet上请求的客户端,所以代理服务器对外表现出来的只是一台服务器。反向代理服务器也称为Web服务器加速,针对web服务器提供加速功能。他作为代理服务器,并不针对浏览器用户,而是针对一台或者多台特定的web服务器。可以缓存web的页面,降低web服务器的访问量,从而来降低web服务器的负载,实施反向代理,只要将反向代理设备放置在一台或多台Web服务器前端即可。

当互联网用户访问某个WEB服务器时,通过DNS服务器解析后的IP地址是代理服务器的IP地址,而非原始Web服务器的IP地址,这时代理服务器设备充当Web服务器,浏览器可以与它连接,无需再直接与Web服务器相连。因此,大量Web服务工作量被转载到反向代理服务上。不但能够很大程度上减轻web服务器的负担,提高访问速度,而且能够防止外部网主机直接和web服务器直接通信带来的安全隐患。

时间: 2024-10-18 04:38:38

学习Nginx反向代理实现简单负载均衡的相关文章

Nginx反向代理及简单负载均衡配置

nginx配置文件主要分为六个区域:main section.events section.http section.sever section.location section.upstream section. 以下为Nginx的主要配置 #main module配置 use nobody;  #设置运行用户 worker_processes 1;    #设置启动进程,通常设置成cpu数量相当 error_log  logs/error.log;  #全局错误日志定义类型,[ debug

nginx反向代理及tomcat负载均衡

 tomcat服务器及负载均衡 1:tomcat主要用于web网页应用,它的静态处理能力低于nginx服务器, 但是可以当做容器主要用于JAVA程序编写的页面.jsp.用于测试. 2:可以实现负载均衡,反向代理,tomcat和其他的服务相比较,性价比高 另外tomcat是有apache基金会维护和支持 3:根据案例搭建tomcat服务器,以及实现负载均衡   一..实施准备 1.启动后关闭iptables防火墙 #service iptables stop 2.安装jdk.配置java环境 (1

Centos6.5系统下nginx反向代理实现tomcat负载均衡

查看当前系统的内核和系统参数以及版本. [[email protected] ~]# uname -a Linux node1 2.6.32-431.el6.x86_64 #1 SMP Fri Nov 22 03:15:09 UTC 2013 x86_64 x86_64 x86_64 GNU/Linux [[email protected] ~]# cat /etc/issue CentOS release 6.5 (Final) Kernel \r on an \m 2.安装nginx. 1)

nginx反向代理及简单负载均衡

修改nginx配置文件: user    www www; worker_processes 1; error_log    /usr/local/nginx/logs/nginx_error.log    crit; pid                /usr/local/nginx/logs/nginx.pid; //nginx进程id worker_rlimit_nofile 51200;//文件最大连接数,系统限定文件ulimit对服务也会有影响,使用ulimit -n可以查看,修改

nginx配置、反向代理缓存、负载均衡

一.nginx基本配置nginx开启文件目录浏览功能(web上显示目录) 1location / { 2 root /data/www/file //指定实际目录绝对路径: 3 autoindex on; //开启目录浏览功能: 4 autoindex_exact_size off; //关闭详细文件大小统计,让文件大小显示MB,GB单位,默认为b: 5 autoindex_localtime on; //开启以服务器本地时区显示文件修改日期! 6}php-fpm配置 1 location ~

nginx作反向代理,实现负载均衡

nginx作反向代理,实现负载均衡按正常的方法安装好 ngixn,方法可参考http://www.cnblogs.com/lin3615/p/4376224.html其中作了反向代理的服务器的配置如下(不能让其去解析php,这里只作代理用)基本配置:(nginx.conf) #user nobody; worker_processes 1; events { worker_connections 1024; } http { include mime.types; default_type ap

ASP.NET基于IIS反向代理实现Web负载均衡实战演练

一.课程介绍 随着公司业务的发展,后台.NET Web应用程序业务就变的越来越多,然而服务器的故障,时不时的汹涌而至,单点故障让我们防不胜防.由于客户访问量逐渐增多,单一个WEB站点(MVC.WebApi)响应越来越慢,由于我们的业务都是采用.NET Web应用程序部署托管在IIS上,那么如何实现我们流量的削峰谷平,应用程序的横向扩展,从而来提高单台WEB站点的吞吐量,降低了单台Web站点的压力. 这我们里决定采用微软的负载均衡解决方案,用两台WEB服务器供客户访问,这两台服务器提供相同的站点内

keepalived实现高可用nginx反向代理的简单案例

写在前面:如果此文有幸被某位朋友看见并发现有错的地方,希望批评指正.如有不明白的地方,愿可一起探讨. 案例拓扑图 安装keepalived和nginx 安装keepalived # yum -y install keepalived 创建nginx用户组及nginx用户 # groupadd -r nginx # useradd -g nginx -r nginx 编译安装nginx-1.4.7 # tar xf nginx-1.4.7.tar.gz  # cd nginx-1.4.7 # ./

图解正向代理、反向代理、透明代理(反向代理可以实现负载均衡)

原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://z00w00.blog.51cto.com/515114/1031287 套用古龙武侠小说套路来说,代理服务技术是一门很古老的技术,是在互联网早期出现就使用的技术.一般实现代理技术的方式就是在服务器上安装代理服务软件,让其成为一个代理服务器,从而实现代理技术.常用的代理技术分为正向代理.反向代理和透明代理.本文就是针对这三种代理来讲解一些基本原理和具体的适用范围,便于大家更深入理