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(命中)字样,证明图片缓存成功

介绍结束,多谢浏览~~

 

 

 

 

posted @ 2017-11-12 17:05  千纸赫H  阅读(2618)  评论(0编辑  收藏  举报