初识nginx反向代理和缓存机制

实现的需求图:

环境:

nginx缓存和反向代理服务器:192.168.0.224

实际存储数据机器:192.168.0.37

一、实现反向代理

1、安装nginx,两台服务器都需要安装

1)安装依赖包

yum -y install gcc make cmake ncurses-devel libxml2-devel libtool-ltdl-devel gcc-c++ autoconf automake bison zlib-devel pcre-devel openssl openssl-devel  

2)下载nginx

wget http://nginx.org/download/nginx-1.8.0.tar.gz

3)解压编译

tar -zxvf nginx-1.8.0.tar.gz
./configure --prefix=/usr/local/nginx --user=nginx --group=nginx
make
make install

2、修改配置文件

这里只实现他的功能,并没有对配置文件做更多的修改

1)代理服务器:vim /usr/local/nginx/conf/nginx.conf

worker_processes  1;

events {
    worker_connections  1024;
}

http {
    include      mime.types;
    default_type  application/octet-stream;
    sendfile        on;

    keepalive_timeout  65;

    server {
        listen      80;
        server_name  localhost;
        }

        location / {
            proxy_pass  http://192.168.0.37/;
        }
 }

配置文件分析:

proxy_pass指令:用来设置被代理服务器的地址,可以是主机名称,IP地址加端口号等形式

2)真实数据服务器:改路径即可vim /usr/local/nginx/conf/nginx.conf

location /{
        root  /data;
        index index.html index.php;
        }

3)创建对应的文件夹

在192.168.0.37真实数据机器上:

mkdir /data
echo "I am realy server" >/data/index.html

3、两台机器上启动nginx

 /usr/local/nginx/sbin/nginx

4、测试

这里输入访问地址,可以看到他去真是的数据机器上取到了数据," location / "表示的是匹配到的任何内容,都去代理服务器上取,若要一部分在代理服务器上,另一部分在真实机器上取,可以根据自己的需求修改配置文件

二、缓存机制

基于proxy_cache的缓存

 1:在反向代理的基础上,打开缓存机制,这样可以加快访问速度,只是添加几行配置,能实现缓存这个功能,其他具体的优化,安全之类的还没有仔细研究,先搭起来理解看怎么回事再细细研究其他的

worker_processes  1;

events {
    worker_connections  1024;
}

http {
    include      mime.types;
    default_type  application/octet-stream;
    sendfile        on;

    keepalive_timeout  65;

    proxy_cache_path /usr/local/nginx/cache levels=1:2 keys_zone=cache_one:500m inactive=1d max_size=30g;

    server {
        listen      80;
        server_name  localhost;
        }

        location / {
                 proxy_cache cache_one;
                 proxy_cache_valid 200 304 302 24h;
                 proxy_pass  http://192.168.0.37/;
        }
 }

2:查看他的进程多了缓存

3:配置文件主要添加了三行:

proxy_cache_path /usr/local/nginx/cache levels=1:2 keys_zone=cache_one:500m inactive=1d max_size=30g;

proxy_cache_path:表示缓存文件存放的路径,该路径是预先就要创建好的

levels=1:2 :   设置在相对于path指定目录的第几级hash目录中缓存数据,levels=1,表示一级hash目录,levels=1:2,表示两级hash目录,目录的名称是基于请求URL通过哈希算法得到的

keys_zone=cache_one:500m : 设置缓存名字

inactive=1d   : 强制更新时间,在指定时间内没人访问,就删除缓存

max_size=30g  : 设置硬盘中缓存数据的大小限制,最大缓存空间

proxy_cache cache_one;

表示这个server使用上面设置的那个cache

proxy_cache_valid 200 304 302 24h;

针对不同的HTTP响应状态设置不同的缓存时间,如果不设置,nginx服务器只为HTTP状态代码为200,301和302的响应数据做缓存

使用any可以表示缓存所有该指令中未设置的其他响应数据,如:

proxy_cache_valid 200 302 10m;

proxy_cache_valid 301 1h;

proxy_cache_valid any 1m;

表示的是对返回状态为200,302的响应数据缓存10分钟,对返回状态码为301的响应数据缓存1小时,非200,302,301返回状态的响应数据缓存1分钟

4:测试:

1)当你第一次访问目录时,得到的结果是,如下:

2)可以进入到缓存目录看一下它的目录结构:

目录的名称是基于请求URL通过哈希算法获取到的

/usr/local/nginx/cache/d/91/972fbe600d30f1cc92495981969ff91d

查看一下具体的内容:

3)然后把真实数据服务器的nginx给停掉,再一次访问,还是可以得到

4)然后把代理服务器的缓存数据给删除,再一次访问,得到结果:说明从缓存没有找到,然后代理转发到真是的服务器也没找到,这就说明了第二次访问的是缓存数据的内容

5)使用tcpdump抓包看看他的走向:

在客户端192.168.0.222 访问192.168.0.224,可以elinks 192.168.0..224

在代理服务器这里使用tcpdump抓包,可以看到他确实是从192.168.0.37去取得数据

tcpdump -i eno16777736 host 192.168.0.224 and 192.168.0.37 and tcp port 80

第二次再去访问,还是监听这个80端口,可以发现tcpdump没有任何数据,说明它直接从缓存里读取了,你可以把缓存删了,再次在客户端访问,可以看到它又有数据了

基于proxy_store的缓存

1:修改反向代理的配置文件

worker_processes  1;

events {
    worker_connections  1024;
}

http {
    include      mime.types;
    default_type  application/octet-stream;
    sendfile        on;

    keepalive_timeout  65;

    server {
        listen      80;
        server_name  localhost;
        }

        location / {
              root "/web1";
              proxy_store on;
              proxy_store_access user:rw group:rw all:r;
              proxy_temp_path "/web1";
              if ( !-f $request_filename )
              {
                proxy_pass   http://192.168.0.37;
              }
        }
 }

通过location的 if 条件判断驱动nginx代理服务器与后端服务器通信和web缓存;判断请求的资源在nginx代理服务器上是否存在,如果不存在就通过后端服务器获取数据,然后回传给客户端,同时使用proxy store进行缓存。

用户一访问的时候,主目录为/web1,如果里面没有用户需要的数据,就去代理取,然后缓存到自己的主目录,下次再访问同样的资源的时候,就能在缓存这里得到数据

创建文件夹:

mkdir /web1

2:真实数据服务器的配置文件

worker_processes  1;

events {
    worker_connections  1024;
}

http {
    include      mime.types;
    default_type  application/octet-stream;
    sendfile        on;

    keepalive_timeout  65;

    server {
        listen      80;
        server_name  localhost;
        }

        root /data;

 }

3:测试

访问真实机器的数据目录/data下的/hah/a.html

在代理服务器的缓存目录下可以看到缓存到的数据和真实数据服务器的目录结构一样:(这个与proxy cache不一样)

把代理缓存的a.html改一下:

再次访问的时候,返回的数据如下,说明它第二次访问的是缓存

proxy store 与proxy cache的区别:proxy store不提供缓存过期更新,内存索引建立等功能,缓存文件一直会保存在本地磁盘中。

注:学习《nginx高性能Web服务器详解》的时候总结

时间: 2024-10-07 10:44:31

初识nginx反向代理和缓存机制的相关文章

初识nginx反向代理和缓存机制(简单实现)

实现的需求图: 环境: nginx缓存和反向代理服务器:192.168.0.224 实际存储数据机器:192.168.0.37 一.实现反向代理 1.安装nginx,两台服务器都需要安装 1)安装依赖包 yum -y install gcc make cmake ncurses-devel libxml2-devel libtool-ltdl-devel gcc-c++ autoconf automake bison zlib-devel 2)下载nginx wget http://nginx.

Nginx反向代理、缓存、负载均衡服务器构建

代理服务可简单的分为正向代理和反向代理: 正向代理: 用于代理内部网络对Internet的连接请求(如VPN/NAT),客户端指定代理服务器,并将本来要直接发送给目标Web服务器的HTTP请求先发送到代理服务器上,然后由代理服务器去访问Web服务器, 并将Web服务器的Response回传给客户端: 反向代理: 与正向代理相反,如果局域网向Internet提供资源,并让Internet上的其他用户可以访问局域网内资源, 也可以设置一个代理服务器, 它提供的服务就是反向代理. 反向代理服务器接受来

Nginx 反向代理并缓存及缓存清除

Nginx 反向代理并缓存及缓存清除 原文地址:http://www.cnblogs.com/caoguo/p/5012447.html 一. Nginx 配置 #user nobody; worker_processes 1; #error_log logs/error.log; #error_log logs/error.log notice; #error_log logs/error.log info; #pid logs/nginx.pid; events { worker_conne

nginx 反向代理、缓存

lvs+keepalive+nginx(realserver)两台+tomcat(后端服务器),nginx的配置文件nginx.conf如下 user  nobody nobody; worker_processes 12; error_log /var/log/nginx/error.log crit;(取消记录错误日志) #error_log  /var/log/nginx/debug.log  debug_http; #error_log  logs/error.log; #error_l

nginx反向代理及缓存清理

#下载安装包wget http://nginx.org/download/nginx-1.13.7.tar.gzwget http://labs.frickle.com/files/ngx_cache_purge-2.3.tar.gzwget https://nchc.dl.sourceforge.net/project/pcre/pcre/8.40/pcre-8.41.tar.bz2 #--------------- 在未安装nginx的情况下安装ngx_cache_purge -------

Nginx反向代理、缓存、 负载均衡、upstream以及fastcgi模块应用

Nginx反向代理,缓存, 负载均衡, upstream及fastcgi模块应用 Nginx版本为nginx-1.6.2-1.el6.ngx.x86_64.rpm可以去官网下载: http://nginx.org/packages/centos/6/x86_64/RPMS/ [[email protected] ~]# rpm -ivhnginx-1.6.2-1.el6.ngx.x86_64.rpm [[email protected] ~]# vim/var/www/html/index.ht

Nginx反向代理和缓存杂记

Nginx反向代理 反向代理实验 1.准备node1,node2两台节点,node1反向至node2,node2配置wed服务 2.node2启动web服务 3.配置node1的nginx反向代理 3.1 备份配置文件 [[email protected] nginx]# cd conf.d/ [[email protected] conf.d]# cp default.conf{,.bak} 3.2 node1配置反向代理至后端服务器 [[email protected] conf.d]# v

Nginx反向代理、缓存、负载均衡

环境介绍 主机名 系统环境 Ip地址 Nginx nginx Centos 6.6 64位 172.16.4.100 Web-01 Web-01 Centos 6.6 64位 172.16.4.101 Web-02 Web-02 Centos 6.6 64位 172.16.4.102 安装nginx 使用官网制作好的rpm包 [[email protected] ~]# rpm -ivh nginx-1.6.2-1.el6.ngx.x86_64.rpm [[email protected] ~]

Nginx反向代理缓存服务器搭建

Nginx反向代理 代理服务可简单的分为正向代理和反向代理: 正向代理: 用于代理内部网络对Internet的连接请求(如VPN/NAT),客户端指定代理服务器,并将本来要直接发送给目标Web服务器的HTTP请求先发送到代理服务器上, 然后由代理服务器去访问Web服务器,并将Web服务器的Response回传给客户端: 反向代理: 与正向代理相反,如果局域网向Internet提供资源,并让Internet上的其他用户可以访问局域网内资源, 也可以设置一个代理服务器, 它提供的服务就是反向代理.