现在很多网站都用nginx做本机加速,降低磁盘读写,或者是nginx扮演反向代理的角色,可以减低后端服务器的压力。
在cdn中,很多厂商,比如360加速乐、阿里云cdn都是用nginx(或者Tengine)实现。
下面是一个简单的配置实例,实现用nginx加速。
用一台机器做cdn,源站ip为: 42.96.158.236 cdn服务器ip为:42.62.73.54 。因用于测试直接在cdn服务器上安装epel源,yum安装nginx,省去编译麻烦。
cdn nginx主配置文件:
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
|
user nginx;
worker_processes 1;
error_log /var/log/nginx/error.log;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
sendfile on;
keepalive_timeout 65;
### cdn head ###
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;
proxy_temp_path /home/temp_dir;
proxy_cache_path /home/cache levels=1:2 keys_zone=cache_one:200m inactive=1d max_size=10g;
include /etc/nginx/conf.d/*.conf;
### cdn end ###
}
|
虚拟主机配置文件:
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
|
upstream web {
server 42.96.158.236 max_fails=3 fail_timeout=20s;
}
server {
listen 80;
server_name www.rootop.org;
location ~ .*\.(gif|jpg|png|htm|html|css|js|flv|ico|swf)(.*) {
proxy_pass http://web;
proxy_redirect off;
proxy_set_header Host $host;
### cdn head ###
proxy_cache cache_one;
proxy_cache_valid 200 302 1h;
proxy_cache_valid 301 1d;
proxy_cache_valid any 1m;
add_header Cache "$upstream_cache_status";
### cdn end ###
expires 30d;
}
location / {
proxy_pass http://web;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
|
proxy_temp_path /home/temp_dir #临时目录
proxy_cache_path /home/cache #缓存数据目录
add_header Cache “$upstream_cache_status”; #在响应头中添加命中标记
现在等于2台服务器,一台源,一台cdn加速。通过智能dns实现轮询或者地域区分。
现在访问网站首页,或者一张图片,通过火狐firebug或者chrome开发者工具F12可以看到响应头中为命中。
现在在发表这篇文章时,访问cdn服务器并不能看到新文章,原因就是因为首页被缓存了。有一种方法,就是在编译nginx的时候添加 ngx_cache_purge 模块,用于清除指定url,这里我没有安装,直接重启下cdn的nginx即可。