非全部原创,部分转载自:Nginx代理阿里云OSS免流,原作者@小红
创建阿里云OSS和服务器的地域一致
阿里云(ECS/轻量)服务器和阿里云OSS地域必须一致。
阿里云的 OSS 收费项分的很细,存储是存储的,流量是流量的。存储费按使用的容量来计算,用多少收多少,这个很直观,也比较好掌控。流量费就不好说了,图片一不小心被盗链,或是其他原因流量突然暴增,会带来一些预料之外的开支。
好在 OSS 提供了一个比较良心的选择:内网流量免费。通过这个规则,我只需要让访问 OSS 的流量都走内网,就不用担心流量方面的开支了。那么问题来了:如何打通 OSS 的内网访问流量?
两个前提:
- 阿里云服务器 1 个。
- 同区域的 OSS 1 个。
注意我加粗了的「同区域」。举个例子,如果服务器在杭州,OSS 买到了深圳,按照 OSS 的收费规则,这是跨区域,存在流量费用。如果非要这么安排,但又想减省一点流量费,那就只有在 OSS 所在区域再买一台服务器,然后再通过公网流量连接另一台服务器。这还是会有点得不偿失,因为阿里云的服务器也不便宜。
创建OSS图片处理样式 webp
配置Ngxin
location /file/ {
#防盗链
valid_referers none blocked drcodes.cn;
if ($invalid_referer) {
return 404;
}
#匹配图片处理样式 webp
rewrite ^/file/(.*\.(JPEG|jpeg|JPG|jpg|PNG|png|.gif|.GIF))$ /$1/webp break;
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-NginX-Proxy true;
# host必须为阿里云OSS分配的内网域名 可在控制台查看
proxy_set_header Host oss-dhjddcn.oss-cn-hangzhou-internal.aliyuncs.com;
#阿里云OSS的endpoint
proxy_pass http://oss-cn-hangzhou-internal.aliyuncs.com/;
proxy_redirect off;
# 当后端服务器返回错误时,使用自定义错误页面
proxy_intercept_errors on;
# 设置自定义错误页面
error_page 403 404 /custom_error.html;
# Socket.IO Support
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
配置好重启 ./nginx -s reload
域名/file/文件名 开始既可以访问对应oss的文件,建议服务器带宽足够的情况下使用,也可以给你域名加cdn
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END
暂无评论内容