75142913在线留言
使用NGINX的反向代理实现对网站加速(CDN)_服务器与网络_网络人

使用NGINX的反向代理实现对网站加速(CDN)

Kwok 发表于:2020-04-08 11:08:39 点击:64 评论: 0

大家都知道美国的服务器配置高价格却很便宜,但是对国内速度不友好,但可以通过技术手段对服务器进行加速处理。使用Nginx的反向代理+缓存模块,就可以实现类似于CDN的技术。

首先在Nginx启用缓存模块:

1、编辑nginx.conf主文件,http模块下添加如下规则:

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
标签:cdnnginx反向代理Kwok最后编辑于:2020-05-03 18:03:39
14
感谢打赏!

《使用NGINX的反向代理实现对网站加速(CDN)》的网友评论(0)

本站推荐阅读

热门点击文章