【实验环境】
系统:Centos6.4
IP: 192.168.56.120
设置服务器的文件描述符
如果后面配置nginx的时候,需要调大worker_connections 这个参数,则需要对系统的文件描述符进行设置,否则可能会出现下面的报错:
worker_connections exceed open file resource limit: 1024
(1) 修改/etc/security/limits.conf文件,在文件中添加如下行:
* soft noproc 65535
* hard noproc 65535
* soft nofile 65535
* hard nofile 65535
就是限制了任意用户的最大线程数和文件数为65535。

其中*为所有用户的打开文件数限制,可用"*"号表示修改所有用户的限制;soft或hard指定要修改软限制还是硬限制;65535则指定了想要修改的新的限制值,即最大打开文件数(请注意软限制值要小于或等于硬限制)。修改完后保存文件。

(2) 修改/etc/pam.d/login文件,在文件中添加如下行:
session required /lib/security/pam_limits.so

这是告诉Linux在用户完成系统登录后,应该调用pam_limits.so模块来设置系统对该用户可使用的各种资源数量的最大限制(包括用户可打开的最大文件数限制),而pam_limits.so模块就会从/etc/security/limits.conf文件中读取配置来设置这些限制值。修改完后保存此文件。

(3) 修改/etc/rc.local脚本,在脚本中添加如下行:
echo “65535"> /proc/sys/fs/file-max

完成上面3步之后重启服务器,重启完,通过ulimit -n 命令确认系统最大文件描述符是否为刚刚设置的值:
[root@localhost ~]# ulimit -n

65535

【实验配置】
一、安装Nginx
[root@localhost ~]# yum install pcre-devel openssl-devel perl-ExtUtils-Embed gcc gcc-c++ make wget
[root@localhost src]# wget http://labs.frickle.com/files/ngx_cache_purge-1.0.tar.gz
[root@localhost src]# wget http://nginx.org/download/nginx-0.8.32.tar.gz
[root@localhost src]# tar xf ngx_cache_purge-1.0.tar.gz
[root@localhost src]# tar xf nginx-0.8.32.tar.gz

[root@localhost src]# useradd -s /sbin/nologin -M www
[root@localhost nginx-0.8.32]# ./configure --user=www --group=www --add-module=../ngx_cache_purge-1.0 --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module
[root@localhost nginx-0.8.32]# make && make install
注意:这里nginx可能要使用较低的版本,我用新版本1.5.x 编译安装的时候会报错:
make[1]: *** [objs/addon/ngx_cache_purge-1.0/ngx_cache_purge_module.o] Error 1
make[1]: Leaving directory `/usr/src/nginx-1.5.3'

make: *** [build] Error 2

二、配置Nginx
[root@localhost ~]# mkdir -p /data/proxy_temp_dir
[root@localhost ~]# mkdir -p /data/web/www

[root@localhost ~]# mkdir -p /data/proxy_cache_dir

[root@localhost ~]# vim /usr/local/nginx/conf/nginx.conf

user  www www;
worker_processes  8;error_log  logs/error.log crit;
pid        logs/nginx.pid;
worker_rlimit_nofile 65535;events {worker_connections  65535;
}http {include       mime.types;default_type  application/octet-stream;server_names_hash_bucket_size 128;client_header_buffer_size 32k;large_client_header_buffers 4 32k;client_max_body_size 300m;sendfile        on;tcp_nopush     on;tcp_nodelay on;keepalive_timeout  65;client_body_buffer_size 512k;proxy_connect_timeout 5;proxy_read_timeout 60;proxy_send_timeout 5;proxy_buffer_size 16k;proxy_buffers 4 64k;proxy_busy_buffers_size 128k;proxy_temp_file_write_size 128k;gzip  on;gzip_min_length 1k;gzip_buffers 4 16k;gzip_http_version 1.1;gzip_comp_level 2;gzip_types text/plain application/x-javascript text/css application/xml;gzip_vary on;#注:proxy_temp_path和proxy_cache_path指定的路径必须在同一分区proxy_temp_path /data/proxy_temp_dir;proxy_cache_path /data/proxy_cache_dir levels=1:2 keys_zone=cache_one:200m inactive=1d max_size=30g;
#设置Web缓存区名称为cache_one,内存缓存空间大小为200MB,1天清理一次缓存,硬盘缓存空间大小为30Gupstream web_proxy_cache {server 192.168.56.113:80 weight=1 max_fails=2 fail_timeout=30s;server 192.168.56.114:80 weight=1 max_fails=2 fail_timeout=30s;}server {listen       80;server {listen       80;server_name  192.168.56.120;root   /data/web/www;index  index.html index.htm;location / {proxy_next_upstream http_502 http_504 error timeout invalid_header;
# 如果后端的服务器返回502、504、执行超时等错误,自动将请求转发到upstream负载均衡池中的另一台服务器,实现故障转移proxy_cache cache_one;proxy_cache_valid 200 304 12h;   #对不同的HTTP状态码设置不同的缓存时间# 以域名、URI、参数组合成Web缓存的Key值,Nginx根据Key值哈希,存储缓存内容到二级缓存目录内proxy_cache_key $host$uri$is_args$args;proxy_set_header Host $host;proxy_set_header X-Forwarded-For $remote_addr;proxy_pass http://web_proxy_cache;expires 1d;}# 用于清除缓存,假设一个URL为http://192.168.56.120/test.txt,通过访问http://192.168.56.120/purge/test.txt就可以清除该URL的缓存。location ~ /purge(/.*) {  # 设置只允许指定的IP或IP段才可以清除URL缓存allow 127.0.0.1;allow 192.168.56.0/24;deny all;proxy_cache_purge cache_one $host$1$is_args$args;}location ~ .*\.(php|jsp|cgii)?$ {  # 扩展名以.php、.jsp、.cgi结尾的动态应用程序不缓存proxy_set_header Host $host;proxy_set_header X-Forwarded-For $remote_addr;proxy_pass http://web_proxy_cache;}access_log off;}
}
检查配置是否有误
[root@localhost ~]# /usr/local/nginx/sbin/nginx -t
the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
configuration file /usr/local/nginx/conf/nginx.conf test is successful

启动nginx
[root@localhost ~]# /usr/local/nginx/sbin/nginx
三、测试
在web1和web2 两个web服务器上创建不同页面
[root@web1 ~]# vim /data/web/www/index.html
<H1>welcome to web1</H1>
<img src="123.jpg">
在/data/web/www/ 目录下上传一个图片,命名为123.jpg
[root@web1 ~]# service httpd start
[root@web2 ~]# service httpd start

访问效果如下:

102915308.png

测试能否正常代理以及作为web缓存
[root@localhost ~]# curl -dump http://192.168.56.120
<h1>welcome to web1</h1>
[root@localhost ~]# curl -dump http://192.168.56.120
<h1>welcome to web2</h1>

清除123.jpg的缓存,访问http://192.168.56.120/purge/123.jpg 即可看到下面的页面
102012367.png

四、通过日志查看HIT 情况

1、开启日志

log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for" '
'"$upstream_cache_status"';
access_log logs/access.log main;
2、添加$upstream_cache_status
这个变量用来显示缓存的状态,我们可以在配置中添加一个http头来显示这一状态
location / {
proxy_next_upstream http_502 http_504 error timeout invalid_header;
proxy_cache cache_one;
proxy_cache_valid 200 304 12h;
proxy_cache_key $host$uri$is_args$args;
add_header Nginx-Cache "$upstream_cache_status";
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_pass http://web_proxy_cache;
expires 1d;
}

3、通过日志查看是否hits中缓存
可以看到,第一次访问的时候是没有通过缓存的,状态为-MISS
192.168.56.1 - - [09/Aug/2013:12:18:02 +0800] "GET /123.jpg HTTP/1.1" 200 4496 "http://192.168.56.120/" "Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.93 Safari/537.36" "-""MISS"
第二次访问的时候则是通过缓存,状态为HITS
192.168.56.1 - - [09/Aug/2013:12:18:02 +0800] "GET /123.jpg HTTP/1.1" 304 0 "http://192.168.56.120/" "Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.93 Safari/537.36" "-""HIT"

4、计算HIT命中概率

[root@localhost logs]# awk '{if($NF=="\"HIT\"") hit++} END{printf "%.2f%\n",hit/NR*100}' access.log
51.85%

nginx 作为Web缓存服务器相关推荐

  1. 案例:Nginx作为Web缓存服务器应用

    从0.7.48版本开始,nginx支持类似Squid的缓存功能.nginx的Web缓存服务主要由proxy_cache相关命令集和fastcgi_cache相关命令集构成,前者用于反向代理时对后端内容 ...

  2. Nginx的Web缓存服务及清除缓存

    这一篇记录一下Nginx作为Web服务器缓存,减少对应用服务器请求次数 ,各位看到此博客的小伙伴,如有不对的地方请及时通过私信我或者评论此博客的方式指出,以免误人子弟.多谢! Nginx作为Web缓存 ...

  3. web缓存服务器性能比较 nuster vs nginx vs varnish

    简单比较了web缓存服务器nuster, nginx和varnish的缓存性能,结果显示nuster的RPS(每秒请求数)单进程模式下大概是nginx的3倍,多进程下是nginx的2倍,varnish ...

  4. 将nginx同时作为负载均衡和Web缓存服务器

    Nginx从0.7.48版本开始,支持了类似Squid的缓存功能.这个缓存是把URL及相关组合当作Key,用md5编码哈希后保存在硬盘上,所以它可以支持任意URL链接,同时也支持404/301/302 ...

  5. nginx反向代理缓存服务器构建

    博主QQ:819594300 博客地址:http://zpf666.blog.51cto.com/ 有什么疑问的朋友可以联系博主,博主会帮你们解答,谢谢支持! 代理服务可简单的分为正向代理和反向代理: ...

  6. web 缓存服务器 HTTP2 性能测试: nuster vs nginx

    简单的用 h2load测试了nuster和nginx的http/2下的缓存性能,结果显示RPS(每秒请求数)nuster差不多是nginx的3倍 https://github.com/jiangwen ...

  7. ROS 软路由配合squid WEB缓存服务器中实现行为管理

    公司使用的ROS 软路由 和Cisco 交换机,划分的Vlan网络,路由器是ROS,在部署行为管理时,只能用端口镜像,但效果,表现比较一般,不能过滤内容,且公司终端数据比较多,网络出口压力日渐增大,需 ...

  8. Nginx 搭建图片缓存服务器-转

    文章:https://waver.me/2019/04/11/Nginx-Cache-Server/ 参考: Nginx 配置详解 Nginx 简易教程 Nginx 配置总结 转载于:https:// ...

  9. nginx缓存服务器

    参考:http://www.cnblogs.com/GXLo/articles/5169098.html 一.准备 1.一台后端服务器,已安装Apache服务器,/var/www/html下已放置了一 ...

最新文章

  1. 分享几个matlab的下载安装包吧,一周有效期,过期不候
  2. LiveMigration之四配置高可用虚拟机
  3. 如何构建一个分布式爬虫:实战篇
  4. “未在本地计算机上注册“Microsoft.ACE.OLEDB.12.0”提供程序”的解决方案
  5. Python中用字典的映射来代替switch语句
  6. pythonic code_Pythonic Code (Part III)
  7. 如何仅用300行代码完成spring基本框架?
  8. LeetCode(59):螺旋矩阵 II
  9. php的toast,Windows通知服务:401尝试在PHP中创建Toast通知时无效令牌
  10. 【PC工具】更新U盘SD卡测试工具,速度测试,坏块测试查找
  11. 晓日程-首款打通微信和桌面的免费日历应用
  12. Win11如何进行重置电脑初始化
  13. 手机浏览器电脑版有什么作用,手机浏览器如何设置成电脑版
  14. ...的Comparator和Compa
  15. luogu1091合唱队形
  16. vue中将水印加在页面的某一部分
  17. 龙讯4号 龙芯图谋你的客厅
  18. js动态生成echarts图表,并生成图片保存到本地,自定义图片名。
  19. 梆梆安全的金砖梦想:“安全联结世界”
  20. codeforces 1546B AquaMoon and Stolen String

热门文章

  1. Concurrent and Parallel
  2. 右)侧固定宽度,右(左)侧宽度自适应 ---清除浮动
  3. jquery 提交数据
  4. 我是直接学Swift还是Objective-C?
  5. 在 Delphi 下使用 DirectSound (2): 查看设备性能
  6. 数字类型转换成字符串类型并逆序输出
  7. Q99:当Bezier曲面(Utah Teapot)同时遇上“噪声纹理”和“Phong反射模型”
  8. java除了框架还需要什么_除了框架,前端面试还问什么
  9. 大数据分析工具有哪些特性
  10. 影响大数据和分析的5大趋势