文章转自:https://www.yunwei114.com/post/39.html
最近发现了阿里云推出了一款阿里云轻应用服务器,(是不是太out了,据说去年就有了),香港的阿里云轻应用服务器1G1核只要24元每月,而且最高30Mbps,CN2线路,于是马上买了下来。
刚好有个网站的流量多了起来,服务器虽说用的美国CN2线路,但是肯定没香港的CN2的好,少数价格高大上的除外。
那么就想用这个香港的vps做个反代加速。有考虑过使用fikker,但是免费版不支持缓存,那么暂时不考虑,就自己手动使用nginx反代自建CDN加速吧;
首先编译安装nginx;这是我的nginx -V:--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.1b --with-pcre=../pcre-8.43 --with-pcre-jit --with-ld-opt=-ljemalloc --with-http_sub_module --add-module=/root/ngx_http_substitutions_filter_module --add-module=/root/ngx_cache_purge;
新建一个缓存文件夹:/home/caches/yunwei;
再建一个缓存的临时文件夹:/home/caches/yunwei/tmp;
设置缓存目录权限:chown -R www:www /home/caches/yunwei;
然后在vhost下创建一个yunwei.conf;
proxy_cache_path /home/caches/yunwei levels=1:2 keys_zone=yunwei:192m max_size=2048m inactive=2h;
proxy_temp_path /home/caches/yunwei/temp;
upstream vps {
# server ip address;
}
server {
listen 443 ssl;
server_name yunwei114.com
www.yunwei114.com;
ssl_certificate /usr/local/nginx/conf/ssl/www.yunwei114.com.crt;
ssl_certificate_key /usr/local/nginx/conf/ssl/www.yunwei114.com.key;
access_log /data/wwwlogs/www.yunwei114.com_nginx.log combined;
location ~.*\.(gif|jpg|png|htm|html|css|js|flv|ico|swf)(.*) {
proxy_pass https://ip;
proxy_redirect off;
proxy_set_header Host $host;
proxy_cache yunwei;
proxy_cache_valid 200 302 2h;
proxy_cache_valid 301 1d;
proxy_cache_valid any 1m;
expires 10d;
}
location /nginx_status {
stub_status on;
access_log off;
allow 127.0.0.1;
allow ip;
deny all;
}
location / {
proxy_pass https://ip;
proxy_redirect off;
proxy_set_header Accept-Encoding '';
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_next_upstream error timeout invalid_header http_500 http_503 http_404;
proxy_max_temp_file_size 0;
proxy_connect_timeout 90;
proxy_send_timeout 90;
proxy_read_timeout 90;
proxy_buffer_size 4k;
proxy_buffers 4 32k;
proxy_busy_buffers_size 64k;
proxy_temp_file_write_size 64k;
}
}
第一行的proxy_cache_path,代表缓存的存放目录,。keys_zone 设置缓存名字和共享内存大小,inactive 在指定时间内没人访问则被删除,max_size最大缓存空间,如果缓存空间满,默认覆盖掉缓存时间最长的资源。
[ levels = levels ]:
设置缓存目录层数,如levels=1:2,表示创建两层目录缓存,最多创建三层。第一层目录名取proxy_cache_key md5的最后一个字符,第二层目录名取倒数2-3字符,如:
proxy_cache_key md5为b7f54b2df7773722d382f4809d65029c,则:
levels=1:2为/home/caches/yunwei/c/29/b7f54b2df7773722d382f4809d65029c
levels=1:2:3为/home/caches/yunwei/c/29/650/b7f54b2df7773722d382f4809d65029c
我把80端口单独设了一个配置文件,然后301跳转https;
location ~..(gif|jpg|png|htm|html|css|js|flv|ico|swf)(.) {
这些匹配的是静态资源,缓存在反代机器上;
4.location / {
proxy_pass https://ip;
设置好请求头,并定义一些超时时间、缓存大小之类的参数,当然,你不设置也可以。
保存后,先nginx -t检查下有没错;然后重启nginx,解析指向反代机器生效后就可以正常反问了;
静态资源,在缓存后直接由反代服务器发送,对于其他请求,反代服务器则充当中转的角色起到CDN加速作用。