`
2277259257
  • 浏览: 515392 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

Nginx(三):反向代理负载均衡集群配置详解

 
阅读更多
原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。http://xuding.blog.51cto.com/4890434/1743814

概述:

    本篇主要总结Nginx实现反向代理和负载均衡功能相关模块的配置说明。主要使用到的模块如下:

ngx_http_proxy_module

Nginx实现反向代理功能

ngx_http_upstream_module

Nginx反向代理时实现负载均衡、会话保持等功能

一、Nginxhttp/https协议反向代理(ngx_http_proxy_module)

  1.反向代理

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

        对反向代理服务器的攻击并不会使得后端内网Web服务器上网页信息遭到破坏,增强了Web服务器的安全性。

 

  2.ngx_http_proxy_module配置

    (1) proxy_pass URL;  定义反向代理到的路径

   适用范围:location, if in location, limit_except上下文中;URL为完整的路径

注意:

   匹配location后传递给后端请求路径情况解析( REMOTE-IP:后端主机IP地址)

    1) proxy_pass后面的路径不带uri时,其会将location的uri直接传递给后端的主机(直接补充关系)

location  /uri/{

proxy_pass http://REMOTE-IP;

}

  此时传递给后端的请求路径为:http://REMOTE-IP/uri/,直接补充在REMOTE-IP之后

   2) proxy_pass后面的路径是一个uri时,其会将location的uri替换为后端主机自己new_uri(映射关系)

location  /uri/{

proxy_pass http://REMOTE-IP/new_uri/;

}

  此时客户端请求被location/uri/匹配到,跳转到后端请求路径将由/new uri/替换/uri/http://REMOTE-IP/new_uri/

    3) 如果location定义其uri时使用的正则表达式模式匹配,则proxy_pass后的路径不能够使用uri;

location ~*  \.(jpg|gif|jpeg)$  {

proxy_pass http://REMOTE-IP;

}

    此处的http://REMOT-IP后面不能有任何uri,"/"也不(/相对路径,相当于后端的DocumentRoot/root路径)

    (2) proxy_set_header  field value;

              用于proxy server向后端服务主机发请求报文时,将某请求首部重新赋值,或在原有值后面添加一个新的值; 也可以添加自定义首部;

示例:

proxy_set_header X-Real-IP  $remote_addr;

proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

               原有请求报文中如果存在X-Forwared-For首部,则将remote_addr以逗号分隔补原有值后,否则则直接添加此首部;

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

proxy_cache_path …

 path [levels=levels]  [use_temp_path=on|off] keys_zone=name:size [inactive=time] [max_size=size]

定义缓存可用上下文为http; (fastcgi的缓存定义相似)

proxy_cache  zone | off;

调用缓存;可用上下文 为http,  server和location

proxy_cache_key  string; 

定义缓存键,默认值为proxy_cache_key  $scheme$proxy_host$request_uri

proxy_cache_valid  [code ...] time;

对不同响应码的响应设定其可缓存时长

proxy_cache_use_stale  ...

error | timeout |  invalid_header | updating | http_500 | http_502 | http_503 | http_504 |  http_403 | http_404 | off ...;

超出响应时长时候使用缓存条目来响应(且缓存本身已经超时)

 补充说明:

     Nginx:请求首部设置(ngx_http_headers_module)

add_header name  value [always];

向响应报文添加自定义首部,并为其赋值;

expires [modified]  time;

expires epoch |  max | off;

允许或禁止向响应报文的Cache-Control或Expires首部添加新值或修改其值;

   实例一:add_hader Via $server_addr;    记录反向代理服务器地址

   实例二:日志追踪代理记录IP

第一步:后端主机定义日志记录格式

Logformat 自定义日志格式,一般自定义变量均为X开头,i表示取其值:添加 Logformat   "%{X-Real-IP}I … …"

第二步:在方向代理主机:修改http首部,记录代理转发主机的IP地址(惯用自定义变量X-Real-IPX-Forwarded-For)

proxy_cacahe_path/var/cache/nginx_proxy/  levels=1:2key_zone=pcache:10m  max_size=1g;

server {

listen 80;

server_name www.a.com;

root /data/www;

add_hader  Via $server_addr; 

proxy_set_header  X-Real-IP $remote_addr;

location  / {

proxy_pass  http://172.16.200.1;

proxy_cache  pcache;

proxy_cache_key  $request_uri;

proxy_cache_vaild  200 302 10m;

proxy_cache_vaild  404 2m;

}

}

原有请求报文中如果存在X-Forwarded_For首部,则将remte_addr以逗号分割补在原有值之后,否则则直接添加此首部

 proxy_set_header   X-Real_IP $remote_addr;

 proxy_set_header  X-Forwarded-For  $proxy_add_x_forwarded_for;

    (4) 连接相关的选项

               当客户端请求,而后端服务器过于繁忙会返回给客户端502(BadGateway)服务器端错误,在例如此类情况下,肯能需要调整服务器端关于连接时长相关的选项。

 proxy_connect_timeout  #;

定义与后端服务器建立连接的超时时长;默认为60s,不建议超出75s;

 proxy_send_timeout #;

把请求发送给后端服务器的超时时长(定义两次请求报文之间时间间隔);默认为60s;

 proxy_read_timeout #;

等待后端服务器发送响应报文的超时时长;可以稍微长点

 

 

二、Nginx:负载均衡配置(ngx_http_upstream_module)

 1.Nginx实现七层负载均衡

         Nginx实现反向代理的时候可以在后端使用多台主机提供响应,且可以在多台主机之间实现负载均衡效果。软件形式的工作在应用层(七层)的负载均衡器。

        ngx_http_upstream_module用于将多个服务器定义成服务器组,而由proxy_passfastcgi_passuwsgi_passscgi_passmemcached_pass指令进行引用调度

 

  2.常用指令

    (1) upstream NAME  { ... }

                定义一个后端服务器组NAME为组名称;仅能用于http上下文 ;

    (2) server ADDRESS  [PARAMETERS];

在upstream中定义一个服务器及其相关参数;仅能用于upstream上下文

     常用参数(PARAMETERS):

weight=#

定义服务器权重,默认为1

max_fails=#

最大失败连接尝试次数,失败连接超时时长由fail_timeout参数指定

fail_timeout=#

等待目标服务器发送响应的时长

backup

备用服务器,所有主服务器均故障时才启用此主机

down

手动标记其不再处理任何用户请求

    实例:

第一步:在http上下文中定义upstream服务器组

upstream websrvs {

server 172.16.200.1 weight=2 max_fails=2 fail_timeout=6s;

server 172.16.200.2  weight=1 max_fails=2fail_timeout=6s;

}                                

第二步:在反向代理http中(proxy_pass,fastcgi_pass, ...)进行调用;

server {

listen 80;

server_name  www.a.com;

root /data/www;

location  / {

proxy_pass http://websrvs/;

}

}

    (3) ip_hash;

 源地址hash,把来自同一个ip地址的请求始终发往同一个backendserver,除非此backend server不可用;

    (4) least_conn;

最少连接;当各server权重不同时,即为加权最少连接;

    (5) match NAME  { ... }

对backendserver做健康状态检测时,定义其结果判断机制;只能用于http上下文

     常用的参数:

status  code[   code ...]:

期望的响应状态码;

header  HEADER[operator  value]

期望存在响应首部,也可对期望的响应首部的值基于比较操作符和值进行比较;

body

期望响应报文的主体部分应该有的内容;

    (6) health_check   [PARAMETERS];

健康状态检测机制;只能用于location上下文

      常用参数:

interval=#

检测的频率,默认为5秒;

fails=#

判定服务器不可用的失败检测次数;默认为1次;

passes=#

判定服务器可用的失败检测次数;默认为1次;

uri=uri

做健康状态检测测试的目标uri;默认为/;

match=NAME

健康状态检测的结果评估调用此处指定的match配置块;

    (7) hash key [consistent];

指明基于hash方式进行调度时,其hashkey;

hash  $remote_addr相当于ip_hash;

常用的hash key:

    1) $cookie_name:

                       将一个用户的请求始终发往同一个backendserver,能实现会话绑定的功能;此处的name为cookie某些参数的名称,此处常用的有cookie_username;

    2) $request_uri:

            将对同一个uri的请求始终发往同一个backend server,后端为cache server时特别有用;

补充说明:session会话保持方式

session sticky

基于ip,  ngix还可基于请求报文首部中的多种信息,例如cookie, uri;

session cluster

每个server均把创建和维护session同步集群中的其它主机;仅适用于较小规模的环境;

session server

使用一个共享的存储服务存储session信息;

本文出自 “许鼎的博客” 博客,请务必保留此出处http://xuding.blog.51cto.com/4890434/1743814

分享到:
评论

相关推荐

    Nginx入门到精通搭建高可用集群负载均衡

    Nginx 负载均衡策略** - **轮询**:每个请求按顺序分配,down 掉的服务器会被自动剔除。 - **权重分配**:根据服务器性能分配不同比例的请求。 - **IP Hash**:基于客户端 IP 的哈希结果分配,确保同一客户端...

    weblogic集群安装及nginx反向代理及负载均衡配置

    ### WebLogic 集群安装及 Nginx 反向代理与负载均衡配置详解 #### 一、WebLogic 集群安装 ##### 1.1 安装环境概述 在进行 WebLogic 集群的安装之前,需要对安装环境进行一定的规划与准备。这里主要包括硬件与软件...

    详解Nginx + Tomcat 反向代理 如何在高效的在一台服务器部署多个站点

    上一篇分享了 Nginx + Tomcat 反向代理 负载均衡 集群 部署指南,感觉还是相当实用型的,但是一般集群部署是基于大访问量的,可能有的企业用不到,类似一些企业官网,访问量并不是很大,基于这个新需求,今天专门为...

    Linux搭建Nginx集群步骤+详细配置

    以上就是在Linux Centos7中搭建Nginx负载均衡集群的详细步骤。请确保在实际操作中根据自己的网络环境和需求进行相应的调整。在提供的压缩包中,你可能找到更具体的配置示例和操作步骤,帮助你更好地理解和实践这个...

    Nginx搭建反向代理服务器过程详解

    在搭建Nginx反向代理服务器的过程中,通常需要配置Nginx的配置文件(通常是nginx.conf),在此配置文件中定义服务器、反向代理和负载均衡的相关设置。例如,可以设置监听某个端口、处理HTTP请求,并将请求转发到特定...

    nginx负载均衡配置文件实例

    **Nginx负载均衡配置详解** Nginx是一款高性能的HTTP和反向代理服务器,它以其轻量级、高并发的特性在Web服务领域广泛应用。其中,Nginx的负载均衡功能是其重要特性之一,它能有效地分散网络流量,提高系统可用性和...

    nginx软件负载均衡

    **Nginx软件负载均衡详解** Nginx是一款高性能、轻量级的Web服务器和反向代理服务器,因其高效稳定、配置简单、内存占用少等特点,在互联网行业中被广泛应用。其中,Nginx的负载均衡功能是其核心特性之一,它能够...

    张宴 使用Nginx轻松实现开源负载均衡

    Nginx是一款高性能、轻量级的Web服务器和反向代理服务器,同时也是一款强大的HTTP和TCP负载均衡器。它以其高效的性能、低内存占用以及丰富的模块支持,在IT行业中广泛应用于网站部署、静态内容服务和负载分发等领域...

    Nginx配置负载均衡和缓存详解

    ### Nginx配置负载均衡和缓存详解 #### 负载均衡概念解析 随着互联网技术的迅猛发展,网络服务的访问量与日俱增,单一服务器已经难以满足大规模访问需求。为此,**负载均衡**作为一种高效且经济的解决方案应运而生...

    Linux下安装与配置基于nginx的tomcat负载均衡和集群(通过cookie分发请求)

    Nginx是一个高性能的HTTP和反向代理服务器,常被用作负载均衡器。它的配置灵活,可以基于多种策略分配请求,包括轮询、权重、IP哈希等。在本例中,我们关注的是通过cookie来分发请求,这种方式可以实现会话粘滞,...

    nginx 反向代理.docx

    在Nginx中配置反向代理可以帮助实现服务器集群的负载均衡和提高安全性。 **示例配置:** 下面是一个简单的Nginx反向代理配置示例,假设我们需要让`www.123.com`这个域名通过Nginx代理指向本地运行的Tomcat服务器: ...

    Nginx-配置负载均衡的几种方式

    ### Nginx 配置负载均衡的几种方式详解 #### 一、引言 随着互联网技术的飞速发展,单一服务器已经无法满足日益增长的服务需求。为了提高系统的稳定性和扩展性,采用负载均衡技术成为了常见解决方案之一。Nginx作为...

    www.cn-ki.net_基于Nginx服务器集群负载均衡技术的研究与改进1

    在后续章节中,深入研究了相关技术,包括服务器集群负载均衡的基本概念,Nginx服务器的模块化结构、服务器架构、反向代理功能以及负载均衡技术。此外,还介绍了一个基于Nginx的动态自适应负载均衡算法的设计与实现。...

    详解Nginx反向代理和负载均衡部署指南

    Nginx反向代理和负载均衡部署指南,具体如下: 1. 安装 1) 从Nginx官网下载页面(http://nginx.org/en/download.html)下载Nginx最新版本(目前是1.5.13版本)安装包; 2) 解压后复制到部署目录。  2. 启动和...

    4 lvs+keepalived+nginx+tomcat实现高性能负载均衡集群.docx

    在构建高性能负载均衡集群时,通常会结合多种技术来确保系统的高可用性和可扩展性。这里提到的“4 lvs+keepalived+nginx+tomcat”架构,就是一种常用的解决方案,用于处理高流量的Web服务。下面将详细解释每个组件的...

    Nginx 代理与负载均衡详解

    Nginx 代理与负载均衡详解  nginx除了可以做网站的虚拟主机之外,还可以做代理器,并且, nginx在代理器的基础上可以做到负载均衡。   一、代理器:  所谓代理器,即接受请求,将请求进行转发,得到结果然后...

    Nginx轻松实现开源负载均衡

    【Nginx负载均衡详解】 Nginx是一款由俄罗斯开发者Igor Sysoev编写的高性能HTTP和反向代理服务器,以其高效稳定、低内存消耗、简单配置和低成本等特点,在全球范围内广泛应用于各种规模的企业,特别是在中、小型...

Global site tag (gtag.js) - Google Analytics