nginx 作为Web缓存服务器

【实验环境】
系统: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

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
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
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天清理一次缓存,硬盘缓存空间大小为30G
upstream 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、开启日志

1
2
3
4
5
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,centos,服务器,File,缓存服务器)