nginx反向代理模块配置详解_Nginx(三):反向代理负载均衡集群配置详解
概述:
本篇主要总结Nginx实现反向代理和负载均衡功能相关模块的配置说明。主要使用到的模块如下:ngx_http_proxy_moduleNginx实现反向代理功能
ngx_http_upstream_moduleNginx反向代理时实现负载均衡、会话保持等功能
一、Nginx:http/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/{
}
此时传递给后端的请求路径为:http://REMOTE-IP/uri/,直接补充在REMOTE-IP之后
2)proxy_pass后面的路径是一个uri时,其会将location的uri替换为后端主机自己的new_uri(映射关系);
location /uri/{
}
此时客户端请求被location的/uri/匹配到,跳转到后端请求路径将由/new uri/替换/uri/:http://REMOTE-IP/new_uri/
3) 如果location定义其uri时使用的正则表达式模式匹配,则proxy_pass后的路径不能够使用uri;
location ~* \.(jpg|gif|jpeg)$ {
}
此处的http://REMOT-IP后面不能有任何uri,仅有"/"也不行(/相对路径,相当于后端的DocumentRoot/root路径);
(2) proxy_set_headerfieldvalue;
用于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-IP、X-Forwarded-For)
proxy_cacahe_path/var/cache/nginx_proxy/ levels=1:2key_zone=pcache:10m max_size=1g;
server {
listen 80;
server_namewww.a.com;
root /data/www;
add_hader Via $server_addr;
proxy_set_header X-Real-IP $remote_addr;
location / {
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_pass、fastcgi_pass、uwsgi_pass、scgi_pass和memcached_pass指令进行引用调度;
2.常用指令
(1) upstreamNAME{ ... }
定义一个后端服务器组,NAME为组名称;仅能用于http上下文;
(2) serverADDRESS[PARAMETERS];
在upstream中定义一个服务器及其相关参数;仅能用于upstream上下文;
常用参数(PARAMETERS):weight=#定义服务器权重,默认为1
max_fails=#最大失败连接尝试次数,失败连接超时时长由fail_timeout参数指定
fail_timeout=#等待目标服务器发送响应的时长
backup备用服务器,所有主服务器均故障时才启用此主机
down手动标记其不再处理任何用户请求
实例:
第一步:在http上下文中定义upstream服务器组
upstream websrvs {
server 172.16.200.1weight=2 max_fails=2 fail_timeout=6s;
server 172.16.200.2weight=1 max_fails=2fail_timeout=6s;
}
第二步:在反向代理http段中(proxy_pass,fastcgi_pass, ...)进行调用;
server {
listen 80;
server_namewww.a.com;
root /data/www;
location/ {
}
}
(3) ip_hash;
源地址hash,把来自同一个ip地址的请求始终发往同一个backendserver,除非此backend server不可用;
(4) least_conn;
最少连接;当各server权重不同时,即为加权最少连接;
(5) matchNAME{ ... }
对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信息;
nginx反向代理模块配置详解_Nginx(三):反向代理负载均衡集群配置详解相关推荐
- Apache+tomcat+mod_jk+centos6.2负载均衡集群配置--转载
转载地址:http://blog.163.com/chenhui_java/blog/static/17267249420128101191860/ 注: 由于长期受转载毒害,所以本人日志均是原创:其 ...
- Nginx + Tomcat 负载均衡集群配置
摘要 Nginx ("engine x") 是一个高性能的 HTTP 和 反向代理 服务器,也是一个 IMAP/POP3/SMTP 代理服务器. Nginx 已经因为它的稳定性.丰 ...
- haproxy + keepalived + mycat 高可用与负载均衡集群配置 centos7
架构如上,但是其实keepalived.haproxy.Mycat都可以多台(比如keepalived.haproxy.Mycat各3台,3台keepalived抢占vip,然后抢到vip的hapro ...
- 运维工程师必备之负载 均衡集群及LVS详解
原文地址:运维工程师必备之负载 均衡集群及LVS详解作者:蚁巡运维平台 来源: chrinux 的BLOG 时间: 2013-07-01 14:00 此博文主要介绍集群和负载均衡的基本理论和类别,内容 ...
- 运维工程师必备之负载均衡集群及LVS详解
此博文主要介绍集群和负载均衡的基本理论和类别,内容看着比较枯燥.无味的,但是要想成为一个好的linux运维工程师,这些基本理论是必须理解透彻,才会在后来的系统调优和集群架构中得心应手,所以想成为lin ...
- windows配置nginx实现负载均衡集群
windows配置nginx实现负载均衡集群 2014-08-20 09:44:40 来源:www.abcde.cn 评论:0 点击:617 网上大部分关于nginx负载均衡集群的教程都是li ...
- ①lvs负载均衡集群 详解
文章目录 负载均衡集群 1.集群是什么? 7.七层的负载均衡(基于虚拟的URL或主机IP的负载均衡) 8.四层负载与七层负载的区别 LVS 实现四层负载均衡项目实战 1.LVS 介绍 2.LVS 优势 ...
- 负载均衡原理与实践详解 第三篇 服务器负载均衡的基本概念-网络基础
负载均衡原理与实践详解 第三篇 服务器负载均衡的基本概念-网络基础 系列文章: 负载均衡详解第一篇:负载均衡的需求 负载均衡详解第二篇:服务器负载均衡的基本概念-网络基础 负载均衡详解第三篇:服务器负 ...
- LVS负载均衡集群服务搭建详解
一.LVS概述 1.LVS:Linux Virtual Server 四层交换(路由):根据请求报文的目标IP和目标PORT将其转发至后端主机集群中的某台服务器(根据调度算法): 不能够实现应用层的 ...
最新文章
- jQuery遍历函数总结
- matlab 多文件编程,是否有可能在MATLAB中为每个文件定义多个函数,并从该文件外部访问它们?...
- MSN Messenger协议
- 怎么在HTML图片中加文字,html+css怎么在图片上添加文字
- 盘点那些Wifi破解姿势(1)
- Referrer Policy:strict-origin-when-cross-origin 404
- 最小二乘法的几何意义
- 云服务器上行带宽/下行带宽/出网带宽/入网带宽详解(一看就懂)
- 转载CSDN博客时的错误
- html定义微调器,bootstrap4 input数值微调插件
- 化痰止咳平喘药题库【1】
- TCP/IP协议十二:关于MAC地址和IP地址在传输过程中变与不变的问题
- ORACLE APEX-下载-利用插件
- 九龙证券|近50亿资金抢筹券商龙头,知名游资杀入热门互联网股
- 上海交大考研823网络空间安全经验分享
- 比较两组数据的差异用什么图更直观_你真的懂如何展示数据吗?
- 中国百句经典名言浅译
- Revit API 开发 (10): ExtensibleStorage 外部存储
- 基于无人机和背负式激光雷达点云的黄河三角洲刺槐林地上生物量估算
- MySql单张表中,“多个唯一字段”的插入和更新操作----添加联合唯一索引,Navicat上操作
热门文章
- 疫苗:Java HashMap的死循环(转)
- qt纯c++编程增加多线程支持库
- 随想录(代码优化中的两个问题)
- 多线程的那点儿事(之嵌套锁)
- 卵巢鸿蒙不全怎么检查,卵巢黄体功能不足怎么办 这三个处理方法要了解
- python安装详细步骤mac_mac如何安装python3
- html 脚本 gdi,基于gdi的简单画图
- 北京语言大学计算机科学与技术研究生好考吗,北京语言大学计算机科学与技术专业研究生培养方案...
- python信用卡客户_Python开发之基于模板匹配的信用卡数字识别功能
- 成品开卡和测试架的区别_浅析花盆与花箱阳台,廊架和花架的区别