本文系统:Centos6.5_x64
三台主机:nginx主机,hostname: master.lansgg.com IP: 192.168.10.128
apache主机,hostname: client1.lansgg.com IP: 192.168.10.129
apache主机,hostname:client2.lansgg.com IP:192.168.10.130
-缓存页面信息-读写分离-健康检
一、nginx负载
二、nginx缓存页面信息
1、nginx负载
1.1、nginx麻雀虽小,五脏俱全..
nginx不单可以作为强大的web服务器,也可以作为一个反向代理服务器,而且nginx还可以按照调度规则实现动态、静态页面的分离,可以按照轮询、ip哈希、URL哈希、权重等多种方式对后端服务器做负载均衡,同时还支持后端服务器的健康检查。
如果只有一台服务器时,这个服务器挂了,那么对于网站来说是个灾难.因此,这时候的负载均衡就会大显身手了,它会自动剔除挂掉的服务器.
nginx 的 upstream目前支持 4 种方式的分配
1)、轮询(默认)
每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除。 weight和访问比率成正比,用于后端服务器性能不均的情况。
2)、ip_hash
每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题。
3)、fair(第三方)
按后端服务器的响应时间来分配请求,响应时间短的优先分配。 Nginx本身是不支持fair的,如果需要使用这种调度算法,必须下载Nginx的upstream_fair模块。
4)、url_hash(第三方)此方法按访问url的hash结果来分配请求,使每个url定向到同一个后端服务器,可以进一步提高后端缓存服务器的效率。Nginx本身是不支持url_hash的,如果需要使用这种调度算法,必须安装Nginx 的hash软件包。
upstream 每个设备的状态:
down 表示单前的server暂时不参与负载 ;weight 默认为1.weight越大,负载的权重就越大。
max_fails :允许请求失败的次数默认为1.当超过最大次数时,返回proxy_next_upstream 模块定义的错误
fail_timeout:max_fails 次失败后,暂停的时间。
backup: 其它所有的非backup机器down或者忙的时候,请求backup机器。所以这台机器压力会最轻。
Tips:当负载调度算法为ip_hash时,后端服务器在负载均衡调度中的状态不能是weight和backup
1.2、配置nginx示例图:
1.2.1、配置nginx proxy主机;nginx配置文件
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
upstream webGroup { #默认轮询
server 192.168.10.129:80 weight=1; #权重
server 192.168.10.202:80 weight=1;
}
server {
listen 1080 default_server; #1080端口进行转发
server_name www.lansgg.com lansgg.com;
access_log logs /lansgg .access.log main;
error_log logs /lansgg .error.log;
root /opt/nginx/nginx/html ;
index index.html;
location / {
proxy_pass #前面的upstream名字
proxy_set_header X-Real-IP $remote_addr;
}
}
|
测试:
1.2.2、配置nginx针对后台服务器进行健康检测;当后端服务器宕掉的话,就会自动踢掉;
1
2
3
4
|
upstream webGroup {
server 192.168.10.129:80 weight=1 max_fails=2 fail_timeout=2;
server 192.168.10.202:80 weight=1 max_fails=2 fail_timeout=2;
}
|
可以进行后端服务器关闭服务的方法进行测试;
1.2.3、如果不幸的是所有服务器都不能提供服务了怎么办,用户打开页面就会出现出错页面,那么会带来用户体验的降低,所以我们能不能像配置LVS是配置sorry_server呢,答案是可以的,但这里不是配置sorry_server而是配置backup。
配置nginx.conf
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
|
upstream webGroup {
server 192.168.10.129:80 weight=1 max_fails=2 fail_timeout=2;
server 192.168.10.202:80 weight=1 max_fails=2 fail_timeout=2;
server 192.168.10.128:1020 backup;
}
server {
listen 1080 default_server;
server_name www.lansgg.com lansgg.com;
access_log logs /lansgg .access.log main;
error_log logs /lansgg .error.log;
root /opt/nginx/nginx/html ;
index index.html;
location / {
proxy_pass http: //webGroup ;
proxy_set_header X-Real-IP $remote_addr;
}
}
server {
listen 1020;
server_name wwww.lansgg.com lansgg.com;
access_log logs /localhost .access.log main;
error_log logs /localhost .error.log;
root /opt/nginx/nginx/html/error ;
index index.html;
}
|
1
2
|
mkdir /opt/nginx/nginx/html/error
echo "Test error index" > /opt/nginx/nginx/html/error/index .html
|
关闭后端两台服务器httpd服务,进行测试;他会自动转到本地的1020端口;
1.3、配置ip_hash负载均衡
ip_hash,每个请求按访问IP的hash结果分配,这样来自同一个IP的访客固定访问一个后端服务器,可以解决网页session共享问题。
1
2
3
4
5
|
upstream webGroup {
ip_hash;
server 192.168.10.129:80 weight=1 max_fails=2 fail_timeout=2;
server 192.168.10.202:80 weight=1 max_fails=2 fail_timeout=2;
}
|
重启进行测试,你会发现页面一直显示一台主机,我这边是web02;
2、nginx缓存页面信息
proxy_cache_path 指令 可以使用 http 区域
语法:proxy_cache_path path [levels=number] keys_zone=zone_name:zone_size [inactive=time] [max_size=size];
指令指定缓存的路径和一些其他参数,缓存的数据存储在文件中,并且使用代理url的哈希值作为关键字与文件名。levels参数指定缓存的子目录数,例如:
1
|
proxy_cache_path /data/nginx/cache levels=1:2 keys_zone=one:10m;
|
文件名类似于:
1
|
/data/nginx/cache/c/29/b7f54b2df7773722d382f4809d65029c |
levels指定目录结构,可以使用任意的1位或2位数字作为目录结构,如 X, X:X,或X:X:X 例如: “2”, “2:2”, “1:1:2“,但是最多只能是三级目录。
所有活动的key和元数据存储在共享的内存池中,这个区域用keys_zone参数指定。one指的是共享池的名称,10m指的是共享池的大小。
注意每一个定义的内存池必须是不重复的路径,例如:
1
2
3
|
proxy_cache_path /data/nginx/cache/one levels=1 keys_zone=one:10m;
proxy_cache_path /data/nginx/cache/two levels=2:2 keys_zone=two:100m;
proxy_cache_path /data/nginx/cache/three levels=1:1:2 keys_zone=three:1000m;
|
如 果在inactive参数指定的时间内缓存的数据没有被请求则被删除,默认inactive为10分钟。一个名为cache manager的进程控制磁盘的缓存大小,它被用来删除不活动的缓存和控制缓存大小,这些都在max_size参数中定义,当目前缓存的值超出 max_size指定的值之后,超过其大小后最少使用数据(LRU替换算法)将被删除。内存池的大小按照缓存页面数的比例进行设置,一个页面(文件)的元 数据大小按照操作系统来定,如FreeBSD/i386下为64字节,FreeBSD/amd64下为128字节。
proxy_cache 指令 可以使用 http, server, location 区域
语法:proxy_cache zone_name;
设置一个缓存区域的名称,一个相同的区域可以在不同的地方使用。
在 0.7.48后,缓存遵循后端的”Expires”, “Cache-Control: no-cache”, “Cache-Control: max-age=XXX”头部字段,0.7.66版本以后,”Cache-Control:“private”和”no-store”头同样被遵循。 nginx在缓存过程中不会处理”Vary”头,为了确保一些私有数据不被所有的用户看到,后端必须设置 “no-cache”或者”max-age=0”头,或者proxy_cache_key包含用户指定的数据如$cookie_xxx,使用cookie 的值作为proxy_cache_key的一部分可以防止缓存私有数据,所以可以在不同的location中分别指定proxy_cache_key的值 以便分开私有数据和公有数据。
缓存指令依赖代理缓冲区(buffers),如果proxy_buffers设置为off,缓存不会生效。
proxy_cache_valid 指令 可以使用 http, server, location 区域
语法:proxy_cache_valid reply_code [reply_code …] time;
为不同的应答设置不同的缓存时间,例如:
1
2
|
proxy_cache_valid 200 302 10m; proxy_cache_valid 404 1m; |
为应答代码为200和302的设置缓存时间为10分钟,404代码缓存1分钟。
如果只定义时间:
1
|
proxy_cache_valid 5m; |
那么只对代码为200, 301和302的应答进行缓存。
同样可以使用any参数任何应答。
1
2
3
|
proxy_cache_valid 200 302 10m; proxy_cache_valid 301 1h; proxy_cache_valid any 1m; |
配置nginx缓存;
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
[root@master conf] # mkdir -p /opt/nginx/nginx/proxy_cache/webGroup
[root@master conf] # vim nginx.conf
proxy_cache_path /opt/nginx/nginx/proxy_cache/webGroup levels=1:2 keys_zone=webGroup:20m max_size=128m;
upstream webGroup {
ip_hash;
server 192.168.10.129:80 weight=1 max_fails=2 fail_timeout=2;
server 192.168.10.202:80 weight=1 max_fails=2 fail_timeout=2;
}
server {
listen 1080 default_server;
server_name www.lansgg.com lansgg.com;
access_log logs /lansgg .access.log main;
error_log logs /lansgg .error.log;
root /opt/nginx/nginx/html ;
index index.html;
location / {
proxy_pass http: //webGroup ;
proxy_set_header X-Real-IP $remote_addr;
proxy_cache webGroup;
proxy_cache_valid 200 10m;
}
|
缓存变量说明
$server_addr
服务器地址,在完成一次系统调用后可以确定这个值,如果要绕开系统调用,则必须在listen中指定地址并且使用bind参数。
$upstream_cache_status
0.8.3版本中其值可能为:
-
MISS 未命中
-
EXPIRED - expired。请求被传送到后端。
-
UPDATING - expired。由于proxy/fastcgi_cache_use_stale正在更新,将使用旧的应答。
-
STALE - expired。由于proxy/fastcgi_cache_use_stale,后端将得到过期的应答。
-
HIT 命中
本文出自 “大風” 博客,请务必保留此出处http://lansgg.blog.51cto.com/5675165/1575838
相关推荐
在本文中,我们将深入探讨如何使用C++进行实战开发,以创建一个名为NginxModule的自定义Nginx扩展。这个扩展是一个简单的Nginx echo模块,它将客户端发送的请求体数据回显到响应中。这为开发者提供了一个学习Nginx...
**Nginx模块源码分析:...理解其源码可以提升对Nginx模块开发的理解,同时,编译和配置过程是学习Nginx扩展功能的重要实践环节。在实际应用中,这样的模块可以帮助我们实现定制化的服务器功能,以满足特定业务需求。
VeryNginx 基于 `lua_nginx_module(openrestry)` 开发,实现了高级的防火墙、访问统计和其他的一些功能。 集成在 Nginx 中运行,扩展了 Nginx 本身的功能,并提供了友好的 Web 交互界面。
3. **nginx-rtmp-module**:这是一个由Arut编写的Nginx扩展模块,专门用于处理RTMP协议。它提供了接收RTMP流、录制、HLS切片、播放控制等功能。通过配置Nginx服务器,我们可以设置不同的直播通道,接收来自多个源的...
Nginx 扩展版:提供了一个带有标准模块的 nginx 版本,加上额外的功能和模块,这个容器基于 ubuntu:14.04 (trusty) 和官方 PPA。 标签: 稳定:NGINX 的稳定版本。 开发:NGINX 的开发(又名主线)版本。 标准 ...
VeryNginx 是一个功能强大而对人类友好的 Nginx 扩展程序。 VeryNginx 基于 Lua_Nginx_Module(openrestry) 开发,实现了高级的防火墙、访问统计和其他的一些功能。 强化了 Nginx 本身的功能,并提供了友好的 Web ...
2. **反向代理**:Nginx 可以作为反向代理服务器,将客户端请求转发到后端应用服务器,从而实现负载均衡,提高系统的可扩展性和可靠性。 3. **静态文件服务**:Nginx 在处理静态资源如 HTML、CSS、JavaScript 文件...
3. 高扩展性:Nginx的模块化设计和自由的许可证使得扩展Nginx功能的第三方模块层出不穷。 4. 反向代理:Nginx可以作为反向代理服务器,帮助隐藏内部服务器的IP地址,提高网站的安全性。 为什么选择Nginx? 选择...
VeryNginx 基于 Lua_Nginx_Module(openrestry) 开发,实现了高级的防火墙、访问统计和其他的一些功能。 强化了 Nginx 本身的功能,并提供了友好的 Web 交互界面。
4. **内容分发**:Nginx的反向代理功能可以用于负载均衡和内容分发,提高视频服务的可扩展性和可用性。 总结,这个压缩包中的"nginx-with-http-flv-moudle"是一个包含Nginx、Nginx-RTMP和Nginx-HTTP-FLV模块的预...
在这个过程中,Nginx作为Web服务器,通过RTMP协议处理流媒体数据,而Lua扩展则可以增强Nginx的功能,提供更灵活的配置和动态处理能力。 首先,我们要理解Nginx的角色。Nginx是一款高性能的HTTP和反向代理服务器,以...
反向代理是 Nginx 的核心功能之一,它接收来自客户端的请求并转发给后端服务器。这有助于隐藏内部架构,提高系统可扩展性,同时可以实现负载均衡,提升服务的可用性和性能。 ### 4. 负载均衡策略 Nginx 支持多种...
在标准模块的基础上,Nginx还提供了许多扩展模块以增强功能。本章将介绍一些常见的第三方模块,如ModSecurity(Web应用防火墙)、GeoIP(地理位置识别)等,以及如何编译和安装这些模块。 8. **第15章 Nginx的邮件...
- **0.6.0版本**:Nginx开始强化模块化设计,允许开发者更方便地扩展功能,例如添加新的HTTP模块或第三方模块,如Perl模块,提升了其可定制性。 - **0.7.0版本**:这一版本进一步完善了模块接口,增强了对HTTPS和...
* 添加新的功能和特性,提高服务器的性能和可扩展性 * 修复已知的 Bug,提高服务器的稳定性 升级 Nginx 版本的步骤 升级 Nginx 版本可以分为七个步骤: 步骤 1: 备份配置文件 在升级 Nginx 版本之前,需要备份...
Nginx有丰富的第三方模块,如mod_security用于安全防护,lua模块实现动态脚本处理,模块的添加可以进一步增强Nginx的功能。 综上所述,Nginx-1.21.6.zip和nginx-1.21.6.tar.gz是针对不同操作系统的Nginx部署包,...
这些模块为Nginx提供了强大的功能扩展,允许用户根据需求定制服务器功能。例如,缓存模块可以帮助减轻后端服务器的压力,提高响应速度;访问控制模块则可以设置防火墙规则,限制非法访问。 此外,书中还涵盖了Nginx...
4. **添加扩展模块**:为了增强Nginx的功能,我们可以添加额外的模块,如"nginx_upstream_check_module-master.zip"用于健康检查,确保只将请求转发到健康的服务器;"nginx-sticky-module-ng.zip"提供会话持久化,...
7. 结构与扩展:Nginx 采用主进程和多个工作进程的结构,工作进程是单线程的,且不需要特殊授权即可运行。 8. kqueue、epoll、rt signals、/dev/poll 和 select 支持:Nginx 支持多种事件机制,包括 kqueue、epoll、...
Nginx作为一款高性能的HTTP和反向代理服务器,不仅在HTTP领域表现出色,还可以用于TCP和UDP的代理转发,扩展了其在网络服务中的应用范围。本文将详细介绍如何配置Nginx进行TCP转发,并探讨相关知识点。 首先,我们...