nginx(六)反向代理(proxy)与负载均衡(upstream)以及健康状态监测。

j**ngx_http_proxy_module模块配置(http或https协议)**



  • proxy_pass uri;应用上下文:location,if in location,limit_except
location  / {
       proxy_set_header Host $http_host;
       proxy_pass      #将所有请求都反向代理至本地的http协议的8080端口 
       index index.html index.htm;
}

注:如果location定义其uri时使用正则表达式进行模式匹配的话,proxy_pass后的路径不能使用uri;

location ~* \.(jsp|do)$ {          #将jsp和do结尾的请求都反代至后端
       proxy_set_header Host $http_host;
       proxy_pass       #此时proxy_pass后不能跟任何uri 
       index index.html index.htm; 
        }
  • proxy_set_header field value; 用于proxy server向backend server发请求报文时,将某些请求首部重新赋值,活在原有值后面添加一个新的值;也可以添加自定义首部;
nginx为了实现反向代理的需求而增加了一个ngx_http_proxy_module模块。其中proxy_set_header指令就是该模块需要读取的配置文件。在这里,所有设置的值的含义和http请求同中的含义完全相同,除了Host外还有X-Forward-For。Host的含义是表明请求的主机名,因为nginx作为反向代理使用,而如果后端真是的服务器设置有类似防盗链或者根据http请求头中的host字段来进行路由或判断功能的话,如果反向代理层的nginx不重写请求头中的host字段,将会导致请求失败【默认反向代理服务器会向后端真实服务器发送请求,并且请求头中的host字段应为proxy_pass指令设置的服务器】。  同理,X_Forward_For字段表示该条http请求是有谁发起的?如果反向代理服务器不重写该请求头的话,那么后端真实服务器在处理时会认为所有的请求都来在反向代理服务器,如果后端有防攻击策略的话,那么机器就被封掉了。因此,在配置用作反向代理的nginx中一般会增加两条配置,修改http的请求头:proxy_set_header   Host $host;proxy_set_header   X-Real-IP   $remote_addr;proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for
  • proxy_connect_timeout time;定义与后端服务器建立连接的超时时长,默认为60s;
  • proxy_send_timeout time;把请求发送给后端服务器的超时时长,默认为60s
  • proxy_read_timeout time;等待服务器发送响应报文的超时时长;

**缓存相关的选项(缓存要先定义,后调用)**



  • proxy_cache_path path[levels=levels][use_temp_path=on|off] keys_zone=name:size [inactive=time][max_size=size]; 定义缓存;应用上下文:http
  • proxy_cache zone|off;调用缓存,可用上下文:http,server,location;
  • proxy_cache_key string;定义缓存键;、
  • proxy_cache_valid [code] time;对不同响应码的响应报文设定其可缓存时长;
proxy_cache_path /var/cache/proxy levels=1:1 keys_zone=proxycache:10m inactive=2m max_size=2g;

location ~* \.(jsp|do)$ {
     proxy_set_header Host $http_host;
     proxy_pass http://localhost:8080;
     proxy_set_header X-Real-IP $remote_addr;
     proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
     proxy_cache proxycache;
     proxy_cache_valid 200 304 301 302 8h;
     proxy_cache_valid 404 1m;
      proxy_cache_valid any 2d;
     proxy_cache_key  $scheme$host$uri
     expires 30d;
        }

**ngx_http_headers_module模块配置**



  • add_header Name value; 向响应报文添加自定义首部,并为其赋值;
  • expires [modified] time; 允许或禁止响应报文的Cache-control或Expires首部添加新值或修改其值;

**ngx_http_upstream_module模块配置**




用于将多个服务器定义为服务器组,而由proxy_pass,fastcgi_pass等指令进行引用;

  • upstream name{...};定义一个后端服务器组,name为组名称;仅能用于http上下文;
  • server address [parameters];在uupstream中定义一哥服务器组极其相关参数,仅能

用于upstream上下文;

常用参数:

  1. weight=number:定义服务器权重,默认为1;
  2. max_fails=number;最大失败连接尝试次数,失败连接超时时长由fails_timeout参数指定;
  3. fails_timeout=time;等待目标服务器发送响应的总超时时长;
  4. backup:备用服务器,所有主服务器均故障时才启用此主机;
  5. down:手动标记其不再处理任何用户请求;
upstream  tcsrvs {      #定义一个服务组
        server 172.16.61.7:80 weight=2 max_fails=2 fail_timeout=6s;
        server 172.16.61.4:80 weight=1 max_fails=2 fail_timeout=6s;
    }
 
location ~* \.(jsp|do)$ {
                proxy_set_header Host $http_host;
                proxy_pass          #此处调用服务器组即可 
                proxy_set_header X-Real-IP $remote_addr;
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                proxy_cache proxycache;
                proxy_cache_valid 200 304 301 302 8h;
                proxy_cache_valid 404 1m;
                proxy_cache_valid any 2d;
                proxy_cache_key  $scheme$host$uri;
                expires 30d;
        }

调度算法:(默认为轮询)定义在upstream模块中(较老版本不支持)


  • ip_hash:源地址hash,把来自同一ip地址的请求始终发往同一个backend server,除非此backend server不可用;
  • least_conn;最少连接;当各server权重不同时,即为加权最少连接;

hash key;指明基于hash方式进行调度时,其hash key,hash $remote_addr相当于ip_hash;

常用的hash_key:

  1. cookie_name:讲一个用户的请求始终发往同一个backend server,能实现会话绑定的功能;此处的name为cookie某些参数名称,此处常用的有cookie_username;
  2. $request_uri:将对同一个uri的请求始终发往同一个backend server,应用于后端为缓存服务器时。
 upstream  tcsrvs {
        server 172.16.61.7:80 weight=2 max_fails=2 fail_timeout=6s;
        server 172.16.61.4:80 weight=1 max_fails=2 fail_timeout=6s;
        ip_hash;
    }

**nginx的健康状态监测机制**(较老版本默认不支持)



  • health_check [parameters];只能用于location上下文中;

常用参数:

  1. interval=time:监测的频率,默认为5s;
  2. fails=number:判断后端server不可用的监测次数,默认为1次;
  3. passes=number:判断服务器可用的失败监测次数,默认为1此;
  4. uri=uri;做健康状态监测时的目标uri,默认为/;
  5. match=NAME:健康状态监测的结果评估调用此处指定的match配置块;
  • match name {...}:对backend server做健康状态监测时,定义其结果判断机制,只能用于http上下文;

常用参数:

  1. status code..:期望响应的状态码;
  2. header HEADER[operator value]:期望存在响应首部,也可以对期望的响应首部的值基于比较操作符和值进行比较;
  3. body:期望响应报文的主体部分应该有的内容;
match welcome {                         #定义match
                status 200;
                header Content-Type = text/html;
                body ~ "Welcome to nginx!";
        }

location ~* \.(jsp|do)$ {
                proxy_set_header Host $http_host;
                proxy_pass http://tcsrvs;
                proxy_set_header X-Real-IP $remote_addr;
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                proxy_cache proxycache;
                proxy_cache_valid 200 304 301 302 8h;
                proxy_cache_valid 404 1m;
                proxy_cache_valid any 2d;
                proxy_cache_key  $scheme$host$uri;
                expires 30d;
                health_check match=welcome;    #进行健康状态监测,并引用定义的match
        }
时间: 2024-10-21 04:04:45

nginx(六)反向代理(proxy)与负载均衡(upstream)以及健康状态监测。的相关文章

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

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 ~

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

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

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反向代理及tomcat负载均衡

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

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

 Nginx proxy作为Nginx的重要功能,使用nginx proxy基本可以实现一个完整的7层负载均衡.其特色如下:1.功能强大,性能卓越,运行稳定.2.配置简单灵活. Nginx proxy作为Nginx的重要功能,使用nginx proxy基本可以实现一个完整的7层负载均衡. 其特色如下: 1.功能强大,性能卓越,运行稳定. 2.配置简单灵活. 3.能够自动剔除工作不正常的后端服务器. 4.上传文件使用异步模式. 5.支持多种分配策略,可以分配权重,分配方式灵活 配置环境: 三台

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

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

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

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在linux服务器中配置负载均衡upstream详解

这篇文章的前提是已经配置好了NGINX,而且tomcat已经配置好了,而且能能够访问了. 这里介绍一台服务器(192.168.83.130),代理两个本机的tomcat(端口分别为:8080.8081),下面是安装后情况: nginx目录: tomcat目录: 首先在两个tomcat的/conf/server.xml里面分别配置端口如下: 分别重启待用. 然后在nginx的/conf/nginx.conf下设置如下: 设置完成后重启nginx. 浏览器输入主机ip:http://192.168.