Nginx自建CDN

1.安装Nginx

这里可以手动编译,或者使用 Oneinstack LNMP等脚本一键编译,注意编译上ngx_cache_purge插件

Oneinstack

编译完成后使用一些命令编译|ngx_cache_purge`,注意替换

cd /root/oneinstack/src #进入安装包目录
nginx -V
tar xzf nginx-*.tar.gz #根据上面查看到的nginx版本选择解压包
tar zxvf pcre-8.43.tar.gz
tar zxvf openssl-1.1.1d.tar.gz 
wget http://labs.frickle.com/files/ngx_cache_purge-2.3.tar.gz
tar zxvf ngx_cache_purge-2.3.tar.gz
cd /root/oneinstack/src/nginx-*

下面的./configure 后加的参数,你可以直接复制刚刚用nginx -V得到的参数,然后在最后加上--add-module=../ngx_cache_purge-2.3即可,参考:

./configure --prefix=/usr/local/nginx --user=www --group=www --with-http_stub_status_module --with-http_v2_module --with-http_ssl_module --with-http_gzip_static_module --with-http_realip_module --with-http_flv_module --with-http_mp4_module --with-openssl=../openssl-1.1.1d --with-pcre=../pcre-8.43 --with-pcre-jit --with-ld-opt=-ljemalloc --add-module=../ngx_cache_purge-2.3
make

mv /usr/local/nginx/sbin/nginx{,$(date +%m%d)}
cp objs/nginx /usr/local/nginx/sbin #oneinstack,其它的可以不用这个操作

nginx -t
service nginx restart

LNMP

首先下载ngx_cache_purge插件

wget http://labs.frickle.com/files/ngx_cache_purge-2.3.tar.gz
tar zxvf ngx_cache_purge-2.3.tar.gz

后再lnmp.conf文件中的Nginx_Modules_Options=''''之间添加–add-odule=/root/ngx_cache_purge-2.3
后升级Nginx版本即可

方法2:
LNMP安装ngx_cache_purge缓存清除组件步骤如下:

一、检查是否已安装 ngx_cache_purge

nginx -V 2>&1 | grep -o ngx_cache_purg

如果显示 ngx_cache_purge 则已安装。

二、编译安装 ngx_cache_purge 步骤

1、进入LNMP的源码目录
cd /root/lnmp1.6/src
2、下载最新版 ngx_cache_purge

wget http://labs.frickle.com/files/ngx_cache_purge-2.3.tar.gz

3、解压 NGINX 和 ngx_cache_purge

tar xzf nginx-*.tar.gz
tar xzf ngx_cache_purge-2.3.tar.gz

4、进入 nginx 目录

cd nginx-*

5、查看现有 nginx 配置参数

nginx -V

6、在现有的编译参数后面加上–add-module=/root/lnmp1.6/src/ngx_cache_purge-2.3

./configure --user=www --group=www --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module --with-http_v2_module --with-http_gzip_static_module --with-http_sub_module --with-stream --with-stream_ssl_module --with-openssl=/root/lnmp1.5/src/openssl-1.0.2o --add-module=/root/lnmp1.5/src/ngx_cache_purge-2.3

如您的编译参数不同,请自行对照修改。

7、开始编译

make

8、备份原来的 Nginx 编译文件

mv /usr/local/nginx/sbin/nginx{,_`date +%F`}

9、拷贝新的编译文件过去

cp objs/nginx /usr/local/nginx/sbin/nginx

10、检查配置

/usr/local/nginx/sbin/nginx -t

11、完成升级

make upgrade

12、检查是否安装成功

nginx -V 2>&1 | grep -o ngx_cache_purge

出现 ngx_cache_purge ,表示已经成功在 LNMP1.6 环境下添加了 ngx_cache_purge 组件。

2.配置网站配置文件

#创建缓存目录
mkdir -p /usr/local/nginx/caches/moec.top
#设置缓存目录权限
chown -R www:www /usr/local/nginx/caches/moec.top

网站配置文件:

proxy_cache_path /usr/local/nginx/caches/moec.top levels=1:2 keys_zone=laoxong:1m inactive=30m max_size=50m;
server {
 listen 80;
 listen 443 ssl http2;
 ssl_certificate /usr/local/nginx/conf/ssl/moec.crt;
 ssl_certificate_key /usr/local/nginx/conf/ssl/moec.key;
 ssl_session_timeout 1d;
 ssl_session_cache builtin:1000 shared:SSL:10m;
 add_header Strict-Transport-Security "max-age=63072000; includeSubdomains; preload";
 ssl_protocols TLSv1.1 TLSv1.2 TLSv1.3;
 ssl_ciphers "TLS-CHACHA20-POLY1305-SHA256:TLS-AES-256-GCM-SHA384:TLS-AES-128-GCM-SHA256:EECDH+CHACHA20:EECDH+CHACHA20-draft:EECDH+ECDSA+AES128:EECDH+aRSA+AES128:RSA+AES128:EECDH+ECDSA+AES256:EECDH+aRSA+AES256:RSA+AES256:EECDH+ECDSA+3DES:EECDH+aRSA+3DES:RSA+3DES:!MD5";

 ssl_prefer_server_ciphers on;

 ssl_stapling on;
 ssl_stapling_verify on;

 server_name 你的域名;
 access_log /usr/local/nginx/caches/moec.top_nginx.log combined;

 charset utf-8,gbk;
 location / {
 proxy_set_header Accept-Encoding "";
 proxy_pass https://你的网站;
 proxy_redirect off;
 proxy_set_header X-Real-IP $remote_addr;
 proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
 proxy_cache laoxong;
 proxy_cache_key $uri$is_args$args;
 proxy_cache_valid 200 304 30m;
 proxy_cache_valid 301 24h;
 proxy_cache_valid 500 502 503 504 0s;
 proxy_cache_valid any 1s;
 proxy_cache_min_uses 1;
 expires 12h;
 }
 location ~ /purge(/.*) {
                allow              all;
                allow              127.0.0.1;
            #   deny               all;
                proxy_cache_purge laoxong $1$is_args$args;
 }
}


/usr/local/nginx/caches/moec.top:为缓存目录。
levels:指定该缓存空间有两层 hash 目录,第一层目录为 1 个字母,第二层为 2 个字母。
keys_zone=laoxong:50m:为缓存空间起个名字,这里取名为“laoxong”,后面的 1m 指缓存的key索引,1m可以存几万个key。
inactive=30m:如果 30 分钟内该资源没有被访问则删除。
max_size=50m:指硬盘缓存大小为 50MB.
proxy_cache_valid:指定状态码缓存时间,前面写状态码,后面写缓存时间。

访问域名/purge即可清理缓存

Wordpress 获取真实IP

将下面一段代码加入到wp-config.php文件中即可:

if (isset($_SERVER['HTTP_X_REAL_IP'])) {
$_SERVER['REMOTE_ADDR'] = $_SERVER['HTTP_X_REAL_IP'];
}

WordPress自动刷新缓存

对于Wordpress和Typecho博客,如果启用CDN后页面被缓存,用户提交评论后无法马上显示出来,可以使用Ajax异步请求ngx_cache_purge接口,当用户提交评论的时候则清除该页面缓存。只需要下面的这段js添加到footer.php即可。

<script>
        $(document).ready(function(){
            $("#submit").click(function(){
                var uri = "https://域名/purge" + window.location.pathname;
                $.get(uri,function(data,status){
                    return true;
                });
            });
        });
</script>

注:请 添加网站的另一域到hosts文件,IP为反代鸡IP,上面的的域名不要和绑定了源IP的域名相同,否则不会起作用

Comments

  1. dforel
    Windows Chrome

    大佬牛逼,我可以抄过去我的博客吗?

    6 months ago
    2020-2-07 18:08:46
    • 老兄 Owner
      Android Chrome

      当然可以,记得留下原帖哦

      6 months ago
      2020-2-08 17:32:20
  2. cpuer
    Windows Chrome

    nginx: [emerg] "proxy_cache" zone "laoxong" is unknown in /usr/local/nginx/conf/nginx.conf:109

    6 months ago
    2020-2-08 15:27:16
    • 老兄 Owner
      Android Chrome

      `ngx_cache_purge`插件安装了吗?
      在Nginx的配置文件的server段内加
      ```
      location ~ /purgee(/.*) {
      allow all;
      proxy_cache_purge laoxong $proxy_host$1$is_args$args;
      error_page 405 =200 /purge$1;
      }
      ```
      了吗?
      实在不行把网站配置文件中`proxy_cache laoxong;`删掉

      6 months ago
      2020-2-08 17:31:35
    • 老兄 Owner
      Windows Chrome

      教程进行了一次更新,需要可以再看一下.

      6 months ago
      2020-2-13 21:48:05
  3. Google Voice
    Windows Firefox

    自动更新缓存如何实现?

    6 months ago
    2020-2-13 21:10:40
    • 老兄 Owner
      Windows Chrome

      已更新

      6 months ago
      2020-2-14 8:11:45
  4. copper187
    Windows Firefox

    好简单的编译命令,回想起我用的......

    ./configure --prefix=/home/nginx --sbin-path=/home/nginx/sbin/nginx --modules-path=/var/tmp/nginx/modules --conf-path=/home/nginx/conf/nginx.conf --error-log-path=/var/log/nginx/error.log --pid-path=/home/nginx/logs/nginx.pid --lock-path=/home/nginx/logs/nginx.lock --with-select_module --with-poll_module --with-threads --with-file-aio --with-http_ssl_module --with-http_v2_module --with-http_realip_module --with-http_addition_module --with-http_xslt_module --with-http_image_filter_module --with-http_geoip_module --with-http_sub_module --with-http_dav_module --with-http_flv_module --with-http_mp4_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_auth_request_module --with-http_random_index_module --with-http_secure_link_module --with-http_degradation_module --with-http_slice_module --with-http_stub_status_module --with-http_gzip_static_module --with-http_perl_module --http-log-path=/var/log/nginx/access.log --http-client-body-temp-path=/var/tmp/nginx/client/ --http-proxy-temp-path=/var/tmp/nginx/proxy/ --http-fastcgi-temp-path=/var/tmp/nginx/fcgi/ --http-uwsgi-temp-path=/var/tmp/nginx/uwsgi/ --http-scgi-temp-path=/var/tmp/nginx/scgi/ --with-mail --with-mail=dynamic --with-mail_ssl_module --with-stream --with-stream_ssl_module --with-stream_realip_module --with-stream_geoip_module --with-stream_ssl_preread_module --with-google_perftools_module --with-cpp_test_module --with-compat --with-pcre --with-pcre-jit --with-zlib=/root/zlib-1.2.11 --with-libatomic --with-ipv6 --with-openssl=/root/openssl-1.1.1d --with-debug --add-module=/home/nginx-ct-1.3.2 --add-module=/home/ngx_cache_purge-2.3 --add-module=/home/ngx_slowfs_cache-1.10

    6 months ago
    2020-2-16 23:47:48
    • 老兄 Owner
      Windows Chrome

      太草了~

      6 months ago
      2020-2-18 13:10:17
  5. Google Voice
    Windows Firefox

    WordPress自动刷新缓存 这段JS代码有作用?

    6 months ago
    2020-2-19 11:12:13
    • 老兄 Owner
      Windows Chrome

      有人评论是自动访问https://域名/purge,您不起效果的原因可能是域名使用了绑定了源IP的域名,应该使用另一个绑定了反代机IP的域,这个是我没写好,现在我补全了,请重新看一下

      6 months ago
      2020-2-19 11:56:20
      • 老兄 Owner
        Windows Chrome

        有人评论时自动访问https://域名/purge/页面地址 您不起效果的原因可能是使用了绑定源IP的域,应该用另一个绑定了反代机ip的域(可以改hosts),这个是我没写好,我已经补全了.

        6 months ago
        2020-2-19 12:04:01
  6. 容易
    Windows Chrome

    “有人评论时自动访问https://域名/purge/页面地址 您不起效果的原因可能是使用了绑定源IP的域,应该用另一个绑定了反代机ip的域(可以改hosts),这个是我没写好,我已经补全了.”

    请问这个是在源站host文件修改还是反代机host修改?

    5 months ago
    2020-3-03 20:21:32
    • 老兄 Owner
      Linux Chrome

      反代机

      5 months ago
      2020-3-03 22:09:02
  7. john
    Macintosh Chrome

    请问博主是啥环境 centos 还是 debian 我用debian9 全新系统 到这一步 7、开始编译

    make

    直接报错 cd /home/lnmp/lnmp1.7/src/openssl-1.1.1g \
    && if [ -f Makefile ]; then make clean; fi \
    && ./config --prefix=/home/lnmp/lnmp1.7/src/openssl-1.1.1g/.openssl no-shared no-threads enable-weak-ssl-ciphers \
    && make \
    && make install_sw LIBDIR=lib
    /bin/sh: 1: cd: can't cd to /home/lnmp/lnmp1.7/src/openssl-1.1.1g
    objs/Makefile:1562: recipe for target '/home/lnmp/lnmp1.7/src/openssl-1.1.1g/.openssl/include/openssl/ssl.h' failed
    make[1]: *** [/home/lnmp/lnmp1.7/src/openssl-1.1.1g/.openssl/include/openssl/ssl.h] Error 2
    make[1]: Leaving directory '/home/lnmp/lnmp1.7/src/nginx-1.18.0'
    Makefile:8: recipe for target 'build' failed
    make: *** [build] Error 2

    2 months ago
    2020-6-18 0:35:57

Send Comment Edit Comment

Previous
Next
%d bloggers like this: