业务场景:公司开发小程序,使用了OSS资源来存储一些资源,但是考虑到访问量大,每天的外网流出流量太大了,领导让我处理,通过nginx 转到内网,内网访问不需要收费的,简单记录一下操作步骤。

前提

  • 准备一台阿里云服务,自己手上也有一台阿里云学生机(小水管)
  • 阿里OSS
  • 一个域名(备案)

一、基本配置

关于oss的使用收费需要说一下:

对象存储OSS服务的基础计费项包括:存储容量,流量,请求次数。此外,OSS还提供存储数据处理服务(如图片处理服务等),会根据您的使用情况单独计量计费,不使用不计费。

1、创建bucket

注意: 创建的bucket区域必须和阿里云服务器的区域相同,只有相同的区域内网才能打通

OSS

image-20211203232740686

ESC

image-20211203232833526

2、配置一个二级域名

​ 主机记录可以随便起,我因为好辨认起了oss。这个域名只是为了方便外网访问时nginx转发时使用的,所以不需要将域名绑定oss,所以此时这个域名啥用没用,绑定了nignx转发才能用域名访问文件

image-20211203233448656

二、Nginx 转发配置

image-20211203233753375

打开bucket 在 概览中可以看到,第一个是外网访问的节点,第二是是内网访问的,记下第二个,在下面配置中要用到

使用Https:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
server {
listen 80;
server_name localhost;

# 将请求转发成 HTTPS
rewrite ^(.*)$ https://$host$1 permanent;
}

server {
listen 443 ssl;
server_name oss.xxx.cn; # 你添加记录的域名

ssl_certificate /opt/card/oss.xxx.cn/oss.xx.cn.pem; # 域名SSL证书中的pem
ssl_certificate_key /opt/card/oss.xxx.cn/oss.xx.cn.key; # 域名SSL证书中的key

location / {
proxy_pass https://xxx.oss-cn-shenzhen-internal.aliyuncs.com;#转发的oss内网地址
}

}

使用http:

1
2
3
4
5
6
7
server {
listen 80;
server_name oss.xxx.cn; #你添加记录的域名
location / {
proxy_pass https://xxx.oss-cn-zhangjiakou-internal.aliyuncs.com; #转发的oss内网地址
}
}

三、使用宝塔快速配置

1、添加站点

image-20211203235125103

2、配置文件

1
2
# 填写自己转发的oss内网地址
https://xxx.oss-cn-zhangjiakou-internal.aliyuncs.com;

image-20211204223215667

3、配置SSL证书

  • 可以区阿里云自己获取免费的SSL证书,一年有效期
  • 获取地址:SSL证书获取

image-20211203235927626

image-20211204000006087

以前访问文件用的是外网point,如:https://xxx.oss-cn-shenzhen.aliyuncs.com/files/xxx.jpg

现在变成使用你自己的域名就可以:https://oss.xxx.com/files/xxx.jpg

nginx接收到这个域名后会自动转发内网请求文件并返回,走了内网流量