最近在忙公司的项目,公司现在重新做自己产品,所以我现在前端后台各种换着做,所以产品也奔着小程序走了。
但是坑爹的是,我在做上存文件时候发现,我填OSS的域名的时候,小程序竟然警告我这是非法的域名,然后想想暗战中那两家,就明白把阿里的域名填进去是不可能的,不过我还是庆幸没有把阿里的IP网段全封了,毕竟我们公司服务器主要用的都是阿里的😂。
好了,那么问题来了,这个问题要怎么解决,试了很多种方案,麻烦的是小程序的那些域名白名单第一需要ICP备案,第二需要https证书,我又不想又去申请一张证书,那实在太麻烦了。所以最后发现比较折衷的方法,那就是用nginx做反向代理,连接到到阿里的OSS,下面附上配置
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
server { server_name aaa.com; listen 443 ssl; ssl_certificate 证书书地址; ssl_certificate_key 秘钥地址; ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_session_cache shared:SSL:10m; ssl_prefer_server_ciphers on; ssl_session_timeout 10m; location /oss { rewrite ^/oss(/.+)?$ /$1 break; proxy_http_version 1.1; proxy_pass http://bucket-name.oss-cn-shenzhen-internal.aliyuncs.com; #这两句是为了替换调用阿里云返回的错误数据的时候,把域名替换成自己的,纯粹强迫症 sub_filter_types application/xml; sub_filter_once off; sub_filter 'bucket-name.oss-cn-shenzhen-internal.aliyuncs.com' 'aaa.com/oss'; } location / { #其它的反向代理 } } |
如上,大家可以把bucket-name.oss-cn-shenzhen-internal和aaa.com换成自己的阿里云OSS的endpoint和域名
另外,如果绑定了域名到OSS的话,因为小程序必须使用https访问,但是如果我们把OSS绑定的域名换成https访问的话,阿里的服务器会返回他们自己的https证书,然后小程序会直接校验TLS失败而直接拒绝了请求,因此只能通过自己的服务器做反向代理,毕竟这样能够返回我们自己域名的https证书,这样又没有必要特地给oss再指定一个二级域名,还省掉了麻烦的申请https证书的过程。而且可以看到用的是OSS的内部域名访问的,这样用自己服务器的流量来替换了OSS直接的外网流量,说不定是牺牲了服务器一些性能,而减少了OSS的外网流入流量,省钱啊。毕竟OSS不算内网流量。
还有就是我发现小程序内部使用到图片的时候,那个image标签和css的background-image的时候,地址是http和直接用OSS的那个三级域名也是没有问题的,那样就可以避免这些静态数据走逻辑服务器,还是直接走OSS吧,只是上存的时候比较绕,要到自己的服务器后台一圈再去OSS罢了。