nginx proxy-cache的使用

简介:

概述:

Nginx的代码是由一个核心和一系列的模块组成, 核心主要用于提供Web Server的基本功能,以及Web和Mail反向代理的功能;还用于启用网络协议,创建必要的运行时环境以及确保不同的模块之间平滑地进行交互。不过,大多跟协议相关的功能和某应用特有的功能都是由nginx的模块实现的。这些功能模块大致可以分为事件模块、阶段性处理器、输出过滤器、变量处理器、协议、upstream和负载均衡几个类别,这些共同组成了nginx的http功能。事件模块主要用于提供OS独立的(不同操作系统的事件机制有所不同)事件通知机制如kqueue或epoll等。协议模块则负责实现nginx通过http、tls/ssl、smtp、pop3以及imap与对应的客户端建立会话。


Nginx的核心模块为Main和Events,此外还包括标准HTTP模块、可选HTTP模块和邮件模块,其还可以支持诸多第三方模块。Main用于配置错误日志、进程及权限等相关的参数,Events用于配置IO模型,如epoll、kqueue、select或poll等,它们是必备模块。


1.安装配置nginx反向代理服务器:

系统环境:Centos 6.4 x86_64

软件版本:nginx-1.5.2

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
[root@localhost ~] # groupadd -r nginx
[root@localhost ~] # useradd -r -g nginx nginx
[root@localhost ~] # tar zxvf nginx-1.5.2.tar.gz
[root@localhost ~] # cd nginx-1.5.2
[root@localhost nginx-1.5.2] # mkdir /var/tmp/ngnix/client -p
[root@localhost nginx-1.5.2] # ./configure \
> --prefix= /usr/local/nginx  \
> --sbin-path= /usr/sbin/nginx  \
> --conf-path= /etc/nginx/nginx .conf \
> --error-log-path= /var/log/nginx/error .log \
> --http-log-path= /var/log/nginx/access .log \
> --pid-path= /var/run/nginx/nginx .pid  \
> --lock-path= /var/lock/nginx .lock \
> --user=nginx \
> --group=nginx \
> --with-http_ssl_module \
> --with-http_flv_module \
> --with-http_stub_status_module \
> --with-http_gzip_static_module \
> --http-client-body-temp-path= /var/tmp/nginx/client/  \
> --http-proxy-temp-path= /var/tmp/nginx/proxy/  \
> --http-fastcgi-temp-path= /var/tmp/nginx/fcgi/  \
> --http-uwsgi-temp-path= /var/tmp/nginx/uwsgi  \
> --http-scgi-temp-path= /var/tmp/nginx/scgi  \
> --with-pcre
[root@localhost nginx-1.5.2] # make; make install


2.启动nginx服务:

1
2
3
4
5
6
[root@localhost ~] # nginx
[root@localhost ~] # ps aux | grep nginx
root     13089  0.0  0.0  55152  1776 ?        Ss   10:52   0:00 nginx: master process nginx
nginx    13194  0.0  0.0  55552  2144 ?        S    11:20   0:00 nginx: worker process
nginx    13195  0.0  0.0  55348  1544 ?        S    11:20   0:00 nginx: cache manager process
root     13238  0.0  0.0 103248   824 pts /0     S+   11:31   0:00  grep  nginx


3.编辑/etc/nginx/nginx.conf

 http字段中添加:


1
2
3
4
upstream static {
     server 192.168.30.116 weight=1;
}
     proxy_cache_path   /data/nginx/cache   levels=1:2 keys_zone=one:10m inactive=24h  max_size=1g;


upstream模块


与proxy模块结合使用的模块中,最常用的当属upstream模块。upstream模块可定义一个新的上下文,它包含了一组宝岛upstream服务器,这些服务器可能被赋予了不同的权重、不同的类型甚至可以基于维护等原因被标记为down。


upstream模块常用的指令有:

ip_hash:基于客户端IP地址完成请求的分发,它可以保证来自于同一个客户端的请求始终被转发至同一个upstream服务器;

keepalive:每个worker进程为发送到upstream服务器的连接所缓存的个数;

least_conn:最少连接调度算法;

server:定义一个upstream服务器的地址,还可包括一系列可选参数,如:

weight:权重;

max_fails:最大失败连接次数,失败连接的超时时长由fail_timeout指定;

fail_timeout:等待请求的目标服务器发送响应的时长;

backup:用于fallback的目的,所有服务均故障时才启动此服务器;

down:手动标记其不再处理任何请求;


proxy_cache_path:定义一个用记保存缓存响应报文的目录,及一个保存缓存对象的键及响应元数据的共享内存区域(keys_zone=name:size),其可选参数有:

levels:每级子目录名称的长度,有效值为1或2,每级之间使用冒号分隔,最多为3级;

inactive:非活动缓存项从缓存中剔除之前的最大缓存时长;

max_size:缓存空间大小的上限,当需要缓存的对象超出此空间限定时,缓存管理器将基于LRU算法对其进行清理;

loader_files:缓存加载器(cache_loader)的每次工作过程最多为多少个文件加载元数据;

loader_sleep:缓存加载器的每次迭代工作之后的睡眠时长;

loader_threashold:缓存加载器的最大睡眠时长;

例如:  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;


然后在server中location字段中添加:

1
2
3
4
5
6
7
8
9
10
11
location / {
           proxy_pass             http: //static ;
            proxy_set_header       Host $host;
            proxy_cache            one;
            proxy_cache_valid      200  1d;
            proxy_cache_valid      301 302 10m;
            proxy_cache_valid      any 1m;
            proxy_cache_use_stale  error timeout invalid_header updating http_500 http_502 http_503 http_504;
            add_header X-Via $server_addr;
            add_header X-Cache-status $upstream_cache_status;
        }


nginx做为反向代理时,能够将来自upstream的响应缓存至本地,并在后续的客户端请求同样内容时直接从本地构造响应报文。


proxy_cache zone|off:定义一个用于缓存的共享内存区域,其可被多个地方调用;缓存将遵从upstream服务器的响应报文首部中关于缓存的设定,如 "Expires"、"Cache-Control: no-cache"、 "Cache-Control: max-age=XXX"、"private"和"no-store" 等,但nginx在缓存时不会考虑响应报文的"Vary"首部。为了确保私有信息不被缓存,所有关于用户的私有信息可以upstream上通过"no-cache" or "max-age=0"来实现,也可在nginx设定proxy_cache_key必须包含用户特有数据如$cookie_xxx的方式实现,但最后这种方式在公共缓存上使用可能会有风险。因此,在响应报文中含有以下首部或指定标志的报文将不会被缓存。

Set-Cookie

Cache-Control containing "no-cache", "no-store", "private", or a "max-age" with a non-numeric or 0 value

Expires with a time in the past

X-Accel-Expires: 0

proxy_cache_key:设定在存储及检索缓存时用于“键”的字符串,可以使用变量为其值,但使用不当时有可能会为同一个内容缓存多次;另外,将用户私有信息用于键可以避免将用户的私有信息返回给其它用户;

proxy_cache_lock:启用此项,可在缓存未命令中阻止多个相同的请求同时发往upstream,其生效范围为worker级别;

proxy_cache_lock_timeout:proxy_cache_lock功能的锁定时长;

proxy_cache_min_uses:某响应报文被缓存之前至少应该被请求的次数;

proxy_cache_use_stale:在无法联系到upstream服务器时的哪种情形下(如error、timeout或http_500等)让nginx使用本地缓存的过期的缓存对象直接响应客户端请求;其格式为:

proxy_cache_use_stale error | timeout | invalid_header | updating | http_500 | http_502 | http_503 | http_504 | http_404 | off

proxy_cache_valid [ code ...] time:用于为不同的响应设定不同时长的有效缓存时长,例如:proxy_cache_valid  200 302  10m;

proxy_cache_methods [GET HEAD POST]:为哪些请求方法启用缓存功能;

proxy_cache_bypass string:设定在哪种情形下,nginx将不从缓存中取数据;例如:

proxy_cache_bypass $cookie_nocache $arg_nocache $arg_comment;

proxy_cache_bypass $http_pragma $http_authorization;

add_header    用于自定义http响应报文内容,这里用于查询是否命中缓存;


4.建立nginx缓存目录,并重启nginx:

1
2
[root@localhost ~] # mkdir /data/nginx/cache -p
[root@localhost ~] # nginx -s reload


5.检测缓存是否命中:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
[root@localhost ~] # curl -I http://192.168.30.115/index.html
HTTP /1 .1 200 OK
Server: nginx /1 .5.2
Date: Mon, 24 Mar 2014 03:39:44 GMT
Content-Type: text /html
Content-Length: 7
Connection: keep-alive
Last-Modified: Mon, 24 Mar 2014 03:22:07 GMT
ETag:  "532fa4df-7"
X-Via: 192.168.30.115
X-Cache-status: HIT
Accept-Ranges: bytes
[root@localhost ~] # ls /data/nginx/cache/c/33/
71c50b7fc36aaac8ea9ebc87ae37a33c


看到X-Cache-status 字段位HIT,是从后端主机192.168.30.115的内容,命中成功。




     本文转自ljl_19880709 51CTO博客,原文链接:http://blog.51cto.com/luojianlong/1382132,如需转载请自行联系原作者







相关文章
|
19天前
|
运维 前端开发 应用服务中间件
LNMP详解(八)——Nginx动静分离实战配置
LNMP详解(八)——Nginx动静分离实战配置
24 0
|
29天前
|
应用服务中间件 nginx
Nginx中如何配置中文域名?
Nginx中如何配置中文域名?
39 0
|
2月前
|
负载均衡 Ubuntu 应用服务中间件
|
2月前
|
前端开发 应用服务中间件 Linux
nginx解决springcloud前后端跨域问题,同时配置ssl
nginx解决springcloud前后端跨域问题,同时配置ssl
|
17天前
|
前端开发 应用服务中间件 nginx
Nginx配置详解Docker部署Nginx使用Nginx部署vue前端项目
Nginx配置详解Docker部署Nginx使用Nginx部署vue前端项目
78 0
|
1月前
|
PHP
百度虚拟机 bcloud_nginx_user.conf配置
百度虚拟机 bcloud_nginx_user.conf配置
22 0
|
11天前
|
应用服务中间件 nginx
nginx进行反向代理的配置
在Nginx中设置反向代理的步骤:编辑`/etc/nginx/nginx.conf`,在http段加入配置,创建一个监听80端口、服务器名为example.com的虚拟主机。通过`location /`将请求代理到本地3000端口,并设置代理头。保存配置后,使用`sudo nginx -s reload`重载服务。完成配置,通过example.com访问代理服务器。
18 0
|
12天前
|
应用服务中间件 网络安全 nginx
nginx配置https访问
nginx配置https访问
25 0
|
21天前
|
应用服务中间件 nginx
nginx配置访问qicaitun.com强制跳转www.qicaitun.com
nginx配置访问qicaitun.com强制跳转www.qicaitun.com
9 0
|
22天前
|
应用服务中间件 Linux PHP
Linux下安装php环境并且配置Nginx支持php-fpm模块
Linux下安装php环境并且配置Nginx支持php-fpm模块
18 0