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

    介绍结束,多谢浏览~~

     

     

  • 相关阅读:
    并发编程之多线程(理论部分)
    基于TCP和UDP的socket
    ajax笔记 显示出所城市名称 ShowCity.aspx Html代码
    蒸饭的纱布
    ajax 笔记--不刷新实现简单的留言版 guestBook
    从表的第几条取到第几条记录
    在asp.net添加数据到XML里去
    ajax 笔记-- 写了一个不用刷新就能实现--用户名验证的例子
    今天生日
    ajax 笔记不用刷新实现数据的分页显示
  • 原文地址:https://www.cnblogs.com/Qian-free/p/7819781.html
Copyright © 2020-2023  润新知