对象存储(OBS)绑定的自定义域名不开启CDN加速如何支持 HTTPS(SSL) 证书访问?

笔者在购买了对象存储服务后发现国内云计算厂商对于对象存储实现https这一块,只有阿里云服务器支持自动的,其他厂商要么表示不支持,要么需麻烦的配置,因此对于已经购买了非阿里云服务器的朋友们,今天笔者分享自己如何配置的,如有问题麻烦批评指正。

以示例的形式介绍在 OBS(对象存储服务) 中通过反向代理配置自定义域名(关闭 CDN 加速)支持 HTTPS 访问的操作步骤。本示例将实现不开启 CDN 加速的情况下,直接通过自定义域名https://img.test.com(前缀img可自定义最好有意义),访问所属地域为华南、名称为 testhttps-12345678 的存储桶(http://testhttps-12345678.obs.ap-guangzhou.mycloud.com)。

基本情况: 域名test.com,主域名www.test.com均已配置好强制https(强制https请参考 HTTP转强制HTTPS代码(用rewrite规则) )且http://test.com,http://www.test.com,https://test.com会301永久跳转到https://www.test.com)

具体操作步骤如下:

1.绑定自定义域名

将存储桶 testhttps 绑定到域名img.test.com不要CNAME到对象存储的域名,关闭 CDN 加速,正常这一步按照云服务器厂商的文档操作就可以,很简单。

2.为域名配置反向代理

在服务器上为域名img.test.com配置反向代理。具体配置参考如下(以下 Nginx 配置仅供参考):

server {
    listen       443 ssl http2;
    server_name  img.test.com ;

    ssl on;
    ssl_certificate /usr/local/nginx/conf/server.crt;//宝塔面板看下面
    ssl_certificate_key /usr/local/nginx/conf/server.key;//宝塔面板看下面

    error_log logs/test.cos.com.error_log;//手动创立此文件
    access_log logs/test.cos.com.access_log;//手动创建此文件
    location / {
        proxy_pass  http://testhttps-12345678.obs.ap-guangzhou.mycloud.com; //配置存储桶(Bucket)的默认下载域名 
    }
}

其中server.crt;server.key是您的自有(自定义)域名的 HTTPS 证书。若您的域名还没有 HTTPS 证书 ,请到各自域名服务商或云服务器服务商处申请,有免费的SSL证书。

如果是宝塔面板的话,请参考下面的代码:

ssl_certificate    /www/server/panel/vhost/cert/img.test.com/fullchain.pem;
ssl_certificate_key    /www/server/panel/vhost/cert/img.test.com/privkey.pem;

设置到此的时候我们会发现会有两个443端口需要监听,端口冲突,一个是我们的img.test.com,另一个则是我们的主站test.com和www.test.com,nginx会默认选择主站进行https,而我们配置的不会生效。参照下面代码配置:

server {
    listen          192.168.1.1:443 ssl;
    server_name     www.example.com;
    ssl_certificate www.example.com.crt;
    ...
}

server {
    listen          192.168.1.2:443 ssl;
    server_name     www.example.org;
    ssl_certificate www.example.org.crt;
    ...
}

假设主站用192.168.1.1,img.test.com用192.168.1.2,那最终的配置应该为:

server {
    listen       192.168.1.2:443 ssl http2;
    server_name  img.test.com ;

    ssl on;
    ssl_certificate /www/server/panel/vhost/cert/img.test.com/fullchain.pem;//宝塔面板为例
    ssl_certificate_key /www/server/panel/vhost/cert/img.test.com/privkey.pem;//宝塔面板为例

    error_log logs/test.cos.com.error_log;//手动创立此文件
    access_log logs/test.cos.com.access_log;//手动创建此文件
    location / {
        proxy_pass  http://testhttps-12345678.obs.ap-guangzhou.mycloud.com; //配置存储桶(Bucket)的默认下载域名 
    }
}

3.解析域名到服务器。

在您域名的 DNS 解析服务商处解析您的域名。将域名img.test.com解析到步骤2中的服务器的 IP 上。

配置完成后,在 Nginx 配置中增加一行信息,可直接重启 Nginx,刷新浏览器缓存即可。

proxy_set_header Host $http_host;

原创文章,作者:huoxiaoqiang,如若转载,请注明出处:https://www.huoxiaoqiang.com/experience/tcpip/335.html

发表评论

电子邮件地址不会被公开。 必填项已用*标注