终章-使用Nginx搭建一个CDN服务

终章-使用Nginx搭建一个CDN服务

dkm
dkm
2023-01-11 / 0 评论 / 8 阅读 / 正在检测是否收录...

本文为本系列最后一篇文章,本文章重点讲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;
        }
    }
0

评论

博主关闭了所有页面的评论