在用 markdown 写博客的时候会经常插入各种图片,这些图片可以存在本地,也可以存在网上。显然,存在网上,使用 URL 的方式访问图片会很方便。下面,就讲讲如何使用阿里云或者腾讯云搭建图床,当然也可以直接使用七牛云的图床。用阿里云或者腾讯云只是因为博主本人正好有这两家的服务器以及对象存储资源。
1. 创建Bucket
首先是购买对象存储资源包,购买之后创建相应的存储桶(Bucket),在创建存储桶(Bucket)的时候请记得把访问权限设置为“公有读私有写”,这是因为图床是给别人看的,自己负责把图片上传上去的,所以公有读的权限和私有写的权限就够了。这边就不贴图了,腾讯云和阿里云选择“对象存储”产品即可。
2. 获取 API 密钥
在访问对象存储的存储桶的时候,或者在使用一些图床工具访问的时候都是需要相应的 API 密钥的。你可以直接使用当前账户的 API 秘钥等,但是这个账户一般具有完全权限,比较危险或者说有点大财小用。
因此,出于安全和严谨考虑,我们可以创建子用户,阿里云和腾讯云都支持创建子用户。创建子用户之后,给相应的子用户赋予读写对象存储空间的权限即可。
子用户的参考:
3. 设置代理
上述完成之后,对于图片的访问,使用的是 OSS 或者 COS 提供的公网域名,但是使用公网域名去访问图片的时候会产生外网下行流量,而外网下行流量是需要收费的。在腾讯云和阿里云中,内网的上下行流量都是不收费的(比如上海地区的服务器访问上海地区的 Bucket 就是内网访问),外网上行流量也是不收费的。因此想到了使用云服务器+ Nginx 来实现代理,也就是先去访问 Nginx, Nginx 代我们去访问同一内网下 Bucket 的内容,然后返回。这样,由于云服务和对象存储空间所处的区域是同一块,是内网上下行流量,所以不会产生费用,而外网访问的是服务器,也不会产生费用。
举个例子:比如我们先使用 https://img.test.com/test/1.png
访问相应的云服务器,Nginx 中配置相应的代理规则,可以代我们访问 https://shanghai.oss.aliyun.com/test/1.png
的资源,之后返回,那么就省下这笔钱了。下面说一下配置过程:
3.1. 配置域名解析
这部分的话,先对域名的解析进行设置,将某个域名解析成一台云服务器的公网 IP ,这台云服务器要求跟Bucket 所在的地区是一样的,比如都是上海地区。
3.2 修改 Nginx 配置文件
下面修改 Nginx 的配置文件,设置相应的代理规则即可。比如我下面就设置成使用 img.test.com
访问时会进行代理
# http
server {
listen 80;
server_name img.test.com;
location / {
proxy_pass https://******.myqcloud.com/;
}
}
当然你也可以配置为 https 方式
# https
server {
listen 443;
server_name img.test.cn;
ssl on;
ssl_certificate cert/请记得改名.pem;
ssl_certificate_key cert/请记得改名.key;
ssl_session_timeout 5m;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
location / {
proxy_pass https://******.aliyuncs.com/;
}
}
# http
server {
listen 80;
server_name img.test.cn;
rewrite ^(.*)$ https://img.test.cn;
}
最后我们就可以使用 https://img.test.com/test/1.png
来访问 https://shanghai.oss.aliyun.com/test/1.png
这个的资源了。
上面内容是单独存放在
sites-enabled
目录下的一个文件中的,而不是整个 Nginx 配置文件是那样。可以在默认的配置之上,添加上述内容即可。