标签:via web服务 版本 www 磁盘 connect 读取 不同 编辑
上节课讲了nginx代理服务器可以修改传递给后端服务器和客户端的请求报文,其中还有nginx代理服务器:1、代理服务器本地没有缓存的时候,通过到后端服务器的网络IO和后端服务器的本地磁盘IO才能到达代理服务器2、后端服务器的文件结构是树状结构,通过根一级一级的去查找,而代理服务器的缓存数据结构虽然也是树状结构,但是是固定等级的路径,而每级路径的名字是哈希码
nginx代理服务器的缓存有两种:一种是内存中的hash表,根据用户请求来去hash表中查找,速度快,另外一种是磁盘上的多级目录1:1:2,如果hash表中有,就遍历
缓存空间要先定义后使用,多级目录也要先定义,哪一个地方放这些缓存
有些情况是不需要缓存的,例如:用户提交表单的post方法不需要,put上传文件不需要,delete删除文件不需要,f5+shift强刷(告诉代理服务器不要缓存),httpv1、httpv2等版本不同的缓存,ftp、http不同协议可能请求的url相同但是请求内容不同,也不需要缓存,后端服务器挂了也不能缓存,缓存满了也不能缓存,有些动态信息也不能缓存;
需不需要缓存,要看用户能不能接受过期的信息
接上节课的课件:
3、proxy_cache_path
定义可用于proxy功能的缓存;Context:http
4、proxy_cache zone | off
指明要调用的缓存,或关闭缓存机制;Context:http,server,location
5、proxy_cahe_key string;
缓存中用于"键"的内容;
默认值:proxy_cache_key $scheme$proxy_host$request_url;
6、proxy_cache_valid [code ...] time;
定义对特定响应码的响应内容的缓存时长;
定义在http{...}中;
proxy_cache_path /var/cache/nginx/proxy_cache levels=1:1:1 keys_zone=pxycache:20m max_size=1g;
定义在需要调用缓存功能的配置段,例如server{...};
proxy_cache pxycache;
proxy_cache_key $request_url;
proxy_cache_valid 200 302 301 1h;
proxy_cache_valid any 1m;
7、proxy_cache_use_state---定义对于那些过期的内容响应与否怎么响应,默认off,只要后端服务器联系不上就不能使用缓存来响应。
8、proxy_cache_methods GET|HEAD|POST...;---post没有必要缓存,默认是get和head,可以不用定义
9、proxy_hide_header field;
10、proxy_connect_timeout time;---定义向服务器一侧发请求(建立三次握手的连接)超时时间。
默认为60s,最长为75s;
11、proxy_read_timeout time;---定义两次重传之间的时间间隔,而不是多长时间完成请求,读取后端服务器给代理服务器的响应的超时时间
12、proxy_send_timeout time;---设置向服务端,向被代理服务端发请求报文时的超时时长,默认60s
ngx_http_headers_modules模块:
向由代理服务器响应给客户端的响应报文添加自定义首部,或修改指定首部的值;
1、add_header name value [always];
添加自定义首部;
add_header X-Via $server_addr;
add_header X-Accel $server_name;
2、expires [modified] time;
expires epoch | max|off;
用于定义Expire或Cache-Control首部的值;
下边是如何定义缓存的演示:
vim nginx.conf---放在http上下文中,添加下列一行
proxy_cache_paht /data/nginx/cache levels=1:1:1 keys_zone=pcache:10m max_size=2g;
定义缓存的存放目录,指明是几级子目录(每个子目录截取URL多少个字符),在内存中取个名字以及大小,存放缓存目录的磁盘空间最大是多少
mkdir -pv /data/nginx/cache---会自动按需创建缓存目录
nginx -s reload
然后编辑自定义的虚拟主机配置文件:
vim ilinux.conf
server {
listen 80;
server_name www.ilinux.io;
proxy_cache pcache;---使用pcache这个缓存,上边已经定义过了下边的两个location都生效。
proxy_cache_key $request_uri;
proxy_cache_method GET POST;
proxy_cache_min_uses 1;---缓存内部的缓存项在指定非活动时间内(默认10min)至少访问到几次认为是活动项,如果少于定义的次数,就把它清理掉,默认是1次
proxy_cache_valid 200 302 10m;
proxy_cache_valid 404 1m;
proxy_cache_use_state http_502;
location / {---没有root就没法提供web服务,但是我们是反代服务器,不需要web功能
proxy_pass http://192.168.10.11:80;---可以是域名,可以是ip地址,后边要不要跟斜线,如果没有斜线,是把能匹配到的补到后边,如果有斜线,是替换斜线
proxy_set_header X-Real-IP $remote_addr;---把客户端真实地址添加到报文首部发给后端主机
add_header X-Via $server_addr;---把真实后端服务器地址发给客户端
}
location ~* \.(jpg|jpeg|png)$ {---这是另一台后端服务器了UPSS2,使用了正则表达式匹配的话,url后边不能加斜线
proxy_pass http://192.168.10.12:80;
}
}
定义好缓存后,就可以进入到我们创建的缓存目录中,查看缓存的信息了
cat /data/nginx/cache/9/d/7/**---可以查看到缓存信息
httpd+php有两种方式:1、把php做成httpd的模块2、把php做成fpm server
而nginx只能用第二种方式fpm server
lnmp架构
lnamp也是不错的架构nginx apache+php mysql
标签:via web服务 版本 www 磁盘 connect 读取 不同 编辑
原文地址:https://blog.51cto.com/13852573/2368257