Rootop 服务器运维与web架构

利用nginx做本地缓存或CDN加速

现在很多网站都用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主配置文件:

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 ###
}

虚拟主机配置文件:

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即可。

原创文章,转载请注明。本文链接地址: https://www.rootop.org/pages/2941.html

作者:Venus

服务器运维与性能优化

评论已关闭。