大家都知道美国的服务器配置高价格却很便宜,但是对国内速度不友好,但可以通过技术手段对服务器进行加速处理。使用Nginx的反向代理+缓存模块,就可以实现类似于CDN的技术。
首先在Nginx启用缓存模块:
proxy_cache_path /home/wwwlog/cache levels=1:2 use_temp_path=off keys_zone=pcache:10m max_size=20g;
/home/wwwlog/cache目录需要手工创建一下,在SSH运行以下命令:
mkdir /home/wwwlog/cache
如果你内存大,或者这台服务器只做反代,还可以把内容缓存到内存里面,把上面的目录地址改为:
/dev/shm
如果有多个硬盘,NGINX还可以用来在多个硬盘之间分割缓存。
proxy_cache_path /mnt levels=1:2 keys_zone=mntcache:100m max_size=100g inactive=60m;
proxy_cache_path /hdd2 levels=1:2 keys_zone=hdd2cache:100m max_size=100g inactive=60m;
split_clients $request_uri $my_cache {
50% "mntcache";
50% "hdd2cache";
}
参数说明如下:
/home/wwwlog/cache #本地的缓存路径,用来设置Nginx缓存资源的存放地址
levels #默认所有缓存文件都放在同一个/home/wwwlog/cache下,当文件过多的时候会极大的影响性能,这个参数的目的就创建多个子目,分散存放资源。levels=1:2 最后生成的目录为:/home/wwwlog/cache/n/2x/key名,其中的N为key的倒数1位,2x为倒数2-3位。
key_zone #在共享内存中设置一块存储区域来存放缓存的key和metadata(类似使用次数),这样nginx可以快速判断一个request是否命中或者未命中缓存,1m可以存储8000个key,10m可以存储80000个key
max_size #最大cache空间,如果不指定,会使用掉所有disk space,当达到配额后,会删除最少使用的cache文件
inactive #指的是如果一个缓存文件多长时间不被访问,就会被删除。(天:d、秒:s、分:m)。
2、配置虚拟主机的代理文件开启缓存:
server
{
listen 80;
if ($ssl_protocol = "") {return 301 https://www.meishiq.com$request_uri;}
if ($host != www.meishiq.com) {return 301 https://www.meishiq.com$request_uri;}
listen 443 ssl http2;
ssl_certificate ssl/meishiq.com.pem;
ssl_certificate_key ssl/meishiq.com.key;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3;
ssl_ciphers "TLS13-AES-256-GCM-SHA384:TLS13-CHACHA20-POLY1305-SHA256:TLS13-AES-128-GCM-SHA256:TLS13-AES-128-CCM-8-SHA256:TLS13-AES-128-CCM-SHA256:EECDH+CHACHA20:EECDH+CHACHA20-draft:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5";
ssl_prefer_server_ciphers on;
ssl_session_timeout 10m;
ssl_session_cache builtin:1000 shared:SSL:10m;
ssl_buffer_size 1400;
ssl_stapling on;
ssl_stapling_verify on;
server_name meishiq.com www.meishiq.com;
location ~ [^/].php(/|$){
proxy_cache off;#php文件不允许缓存
proxy_pass http://www.meishiq.com;#PHP反向代理地址
}
location / {
proxy_cache pcache;#开启缓存并将KEY存入pcache
proxy_cache_key $host$request_uri;//Key的名字hash码生成依据,这里使用域名+URL参数
proxy_cache_methods GET HEAD;#缓存GET和HEAD请求
proxy_cache_valid 200 302 10m;#200状态码和302缓存10分钟
proxy_cache_valid 404 1m;#404缓存1分钟
proxy_cache_use_stale http_502; #如果源站出现了502,使用本地的有效资源返回。就是源服务器挂了,如果有缓存就顶一下!
proxy_pass http://www.meishiq.com; #非PHP的反向代理地址
}
proxy_http_version 1.1;
proxy_cache_bypass $http_upgrade;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
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_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Port $server_port;
add_header x-cache "$upstream_cache_status";
access_log off;
}
我使用的HOST来回源源服务器,关于反带配置做为参考即可。比如你2台服务器都在国外的情况下,你可以使用国外回源的方式分开解析,只是国内用户使用反带即可。
流程大概是这样的:
国内用户请求<-->反理代理高速网络低配置服务器(节约成本,只使用网络速度好的)<-->高配置(慢网络)源服务器
Nginx缓存优先级顺序为:
inactive 配置项 <- 源服务器(Max-Age)<- proxy_cache_valid
这里可以把proxy_cache_valid理解为:没有配置缓存的文件,默认缓存多久!而inactive是在限定的时间内冷数据删除的时间。
除非注明,网络人的文章均为原创,转载请以链接形式标明本文地址:https://www.55mx.com/post/67
《使用NGINX的反向代理实现对网站加速(CDN)》的网友评论(0)