Nginx的反向代理和缓存功能介绍
一、nginx实现反向代理负载均衡
1、什么是反向代理呢?
反向代理(Reverse Proxy)方式是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客户端,此时代理服务器对外就表现为一个反向代理服务器。如下图的www.baidu.com可以想象成一个代理服务器,当客户端internet向www.baidu.com发起连接请求,www.baidu.com这个代理服务器会把请求转发给后端的服务器server1、server2、server3,这时代理服务器就表现为一个反向代理服务器。
2、nginx实现反向代理(介绍)
nginx代理基于ngx_http_proxy_module模块的功能,该模块有很多属性配置选项,如:
proxy_pass:指定将请求代理至server的URL路径;
proxy_set_header:将发送至server的报文的某首部进行重写;
proxy_send_timeout:在连接断开之前两次发送到server的最大间隔时长;过了这么长时间后端还是没有收到数据,连接会被关闭
proxy_read_timeout:是从后端读取数据的超时时间,两次读取操作的时间间隔如果大于这个值,和后端的连接会被关闭
proxy_connect_timeout: 是和后端建立连接的超时时间
3、nginx实现反向代理负载均衡(介绍)
nginx负载均衡是ngx_http_upstream_module模块的功能,需要在配置文件http块上下文中定义upstream块,指定一组负载均衡的后端服务器,然后在proxy_pass中引用,就可以反向代理时实现负载均衡了
语法:server address [parameters];
paramerters:
weight:负载均衡策略权重,默认为1;
max_fails:在一定时间内(这个时间在fail_timeout参数中设置)检查这个服务器是否可用时产生的最多失败请求数
fail_timeout:在经历了max_fails次失败后,暂停服务的时间。max_fails可以和fail_timeout一起使用,进行对后端服务器的健康状态检查;
backup:当所有后端服务器都宕机时,可以指定代理服务器自身作为备份,对外提供维护提示页面
down:永久不可用
4、专业健康检测模块 nginx_upstream_check_module-master(官方地址介绍)
5、如何使用tengine(实验)
①下载源码并编译安装
lftp 172.17.0.1:/pub/Sources/sources/nginx> get tengine-2.1.1.tar.gz 2062650 bytes transferred 下载源码 [root@centos7 ~]# tar -xvf tengine-2.1.1.tar.gz 解压 [root@centos7 ~]# cd tengine-2.1.1/ [root@centos7 ~/tengine-2.1.1]# yum groupinstall "Development tools" 安装开发包组 [root@centos7 ~/tengine-2.1.1]# yum install openssl-devel pcre-devel 安装所需工具 [root@centos7 ~/tengine-2.1.1]# ./configure --prefix=/usr/local/tengine 安装到指定路径 [root@centos7 ~/tengine-2.1.1]# make && make install 编译 [root@centos7 ~/tengine-2.1.1]# cd /usr/local/tengine/
②编辑配置文件
[root@centos7 ~/tengine-2.1.1]# cd /usr/local/tengine/ 进入自己指定的目录 [root@centos7 /usr/local/tengine]# ls conf html include logs modules sbin [root@centos7 /usr/local/tengine]# cd conf/ [root@centos7 /usr/local/tengine/conf]# vim nginx.conf 修改配置文件,写在http段 #gzip on; upstream server-cluster { 定义upstream块,指定一组负载均衡的后端服务器 server 172.17.250.117:80; server 172.17.250.107:80; 后端服务器IP check interval=3000 rise=2 fall=5 timeout=1000 type=http; check_http_send "HEAD / HTTP/1.0\r\n\r\n"; check_http_expect_alive http_2xx http_3xx; } upstream static-cluster { server 172.17.251.226:80; server 172.17.251.227:80; check interval=3000 rise=2 fall=5 timeout=1000 type=http; # check_http_send "HEAD / HTTP/1.0\r\n\r\n"; check_http_expect_alive http_2xx http_3xx; } server { listen 80; server_name localhost; proxy_set_header Host $host; 将发送至server的报文的首部进行重写;常用于nginx做负载均衡时,获取客户端IP使,需要添加forward头部 proxy_set_header X-REMOTE-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 原有请求报文中如果存在X-Forward-For首部,则将client_addr以逗号分隔原有值后,否则则直接添加此首部; #charset koi8-r; #access_log logs/host.access.log main; location /stats { check_status; } location ~* .jpg|.png|.gif|.jpeg$ { proxy_pass http://static-cluster; 指定将请求代理至server的URL路径 } location ~* .css|.js|.html|.xml$ { proxy_pass http://static-cluster; } location / { # root html; index index.php index.html index.htm; }
③查看健康测试状态页面
二、nginx实现缓存功能(实验)
nginx实现缓存是通过代理缓存proxy-cache,这也是ngx_http_proxy_module模块提供的功能,配置较多,常用的选项有;proxy_cache_path proxy_cache和proxy_cache_valid
1、proxy_cache_path
proxy_cache_path定义一个完整的缓存空间,指定缓存数据的磁盘路径、索引存放的内存空间以及一些其他参数。如缓存策略。该选项只能定义在http块上下文中
例如:procxy_cache_path /data/cache levels=1:2 keys_zone=web:10m max_size=1G inactive=10;
2、proxy_cache
proxy_cache用来引用上面proxy_cache_path定义的缓存空间,现时打开缓存功能
例如:proxy_cache web; #引用上面定义上的缓存空间,同一缓存空间可以在几个地方使用
3、proxy_cache_valid
proxy_cache_valid设置不同响应代码的缓存时间
例如:proxy_cache_valid 200 302 10m;
实现缓存功能,配置文件编辑示例:
56 proxy_cache_path /data/cache levels=1:2 keys_zone=web:10m max_size=1G inactive=10m; 57 定义一个完整的缓存空间;缓存数据存储在/data/cache目录中,配置在该目录下再分两层目录,名称为web,10m内存空间大小,最大缓存数据磁盘空间的大小;10分钟未被访问的缓存数据将从缓存中删除 58 server { 59 listen 80; 60 server_name qianzhihe; 61 proxy_set_header Host $host; 62 proxy_set_header X-REMOTE-IP $remote_addr; 63 proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 64 65 add_header Qianzhihe-Cache "$upstream_cache_status from $server_addr"; 66 给请求响应增加一个头部信息,表示从服务器上返回的cache状态怎么样(有没有命中HIT) #charset koi8-r; 67 68 #access_log logs/host.access.log main; 69 location /stats { 70 check_status; 71 } 72 location ~* .jpg|.png|.gif|.jpeg$ { 74 proxy_cache web; 缓存图片,引用上面定义的缓存空间,同一缓存空间可以在几个地方使用 75 proxy_cache_valid 200 302 301 20m; 对代码200 302 301的响应设置10分钟的缓存 76 proxy_pass http://server-cluster; 引用上面定义的upstream负载均衡组
测试:访问IP地址后F12键查看header头部,第一次是MISS字样(丢失图片),再次刷新就会显示HIT(命中)字样,证明图片缓存成功
介绍结束,多谢浏览~~