本文为本系列最后一篇文章,本文章重点讲Nginx一个最重要的功能,即CDN服务器功能;目前国际大厂,Amazon,Azure,CloudFlare,Akamain以及国内的大部分CDN服务商均使用
将Nginx变成CDN服务之前,首先配置缓存目录,缓存位置最好放在速度比较快的硬盘里面,建议放速度快的硬盘,因为缓存是频繁调用的。
配置缓存目录
#创建目录
mkdir -p /data/nginx-cdn-cache
mkdir -p /data/nginx-cache
#配置文件目录权限
chmod 777 /data/nginx-cdn-cache
chmod 777 /data/nginx-cache
#配置Nginx配置文件
nano /etc/nginx/nginx.conf
#在配置文件内引入参数
http{
proxy_temp_path /data/nginx-cache;
proxy_cache_path /data/nginx-cdn-cache levels=1:2 keys_zone=cache_one:50m inactive=1d max_size=1g;
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_next_upstream error timeout invalid_header http_500 http_502 http_503 http_404;
}
#注意这个是引入到http块里面的,不要填错地方
#一开始的目录是必须要创建的,不创建无法正常正常使用
下面写用于清除缓存的脚本,也可以用用C代码写一个服务,C代码我就不讲了,这里我就用bash脚本
nano /etc/nginx/clean-cdn-cache.sh
chmod a+x clean-cdn-cache.sh
#/bin/bash
cd /data
sudo rm -rf nginx-cache/* && sudo rm -rf nginx-cdn-cache/*
cd
上面的脚本可以清除文件
下面将脚本封装成命令
cp clean-cdn-cache.sh /usr/bin/nginx-clean
sudo chmod 755 /usr/bin/nginx-clean
#修改完了之后使用nginx-clean即可执行清除CDN缓存
下面开始编写Nginx的网站配置文件
#upstream参数,因为是CDN服务器,这个upstream是标记源服务器的参数块,一般直接填写服务器IP地址
upstream cdn_web_1 {
server 172.16.21.37:80;
}
#server参数,用于缓存参数
server {
listen 80;
server_name www.nginx.test;
#缓存静态文件
location ~ .*\.(gif|jpg|png|html|htm|css|js|ico|swf|pdf|jpeg|mp4)$
{
proxy_redirect off;
proxy_next_upstream http_502 http_504 http_404 error timeout invalid_header;
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_pass http://cdn_web_1;
proxy_cache cache_one;
#传回请求参数
proxy_cache_key "$host$request_uri";
add_header Cache "$upstream_cache_status";
#HTTP返回错误状态
proxy_cache_valid 200 304 301 302 8h;
proxy_cache_valid 404 1m;
#缓存在CDN有效时间,可以自定义,常见CDN运营商使用的为5小时左右
proxy_cache_valid any 1d;
}
location / {
proxy_redirect off;
#设置超时错误
proxy_next_upstream http_502 http_504 http_404 error timeout invalid_header;
proxy_set_header Host $host;
proxy_set_header X-real-ip $remote_addr;
#向服务端返回客户端IP地址
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
#配置源站参数
proxy_pass http://cdn_web_1;
client_max_body_size 40m;
client_body_buffer_size 128k;
#连接超时时间
proxy_connect_timeout 60;
#发送超时时间
proxy_send_timeout 60;
#读取超时时间
proxy_read_timeout 60;
proxy_buffer_size 64k;
proxy_buffers 4 32k;
proxy_busy_buffers_size 64k;
}
}
评论