docker环境下,关于https的配置。(已解决)

技术分享 · Axin · 于 5年前 发布 · 11253 次阅读

环境说明:

  • 阿里云 Centos 7.4
  • fecshop 安装方式: docker安装
  • 证书:Let's encrypt

Let's encrypt安装

git clone https://github.com/letsencrypt/letsencrypt.git

# cd letsencrypt
# ./letsencrypt-auto certonly --standalone --email 你邮箱地址 -d 你的域名  
  • 记得将上面的邮箱和域名替换成自己的,上面命令中的certonly表示只获取证书,不安装;-d 参数可以多个,表示增加多个域名

期间会出现两个确认。依次输入 A, Y。 如图(如果看到我的域名,求放过):

获取成功后:你可以到/etc/letsencrypt/live/你的域名/目录下找到相关的证书文件有4个:

----注意这里有个坑,因为这个耽误了我一个多小时----

这里我们看到的是软链接,其实真实目录在以下位置而且名字还多个1(这是坑)。

/etc/letsencrypt/archive/你的域名

记住这个路径,下面配置我们会用到。

配置nginx, 配置docker-compose.yml

  • 阿里云记得开放443端口
  • docker-compose.yml

上面的路径就是要用到上面所说的证书路径

最后是nginx配置,你可以参照的写,贴代码:

server {
    listen 80;
    listen 443 ssl http2;
    server_name 你的域名;

    ssl on;
	#这里是http转https配置
    if ($server_port !~ 443) {
            rewrite ^(/.*)$ https://$host$1 permanent;
    }

    ssl_certificate /etc/letsencrypt/archive/你的域名/fullchain1.pem;
    ssl_certificate_key /etc/letsencrypt/archive/你的域名/privkey1.pem;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
    ssl_prefer_server_ciphers on;
    ssl_session_cache shared:SSL:10m;
    ssl_session_timeout 10m;
	#这里是http转https配置
    error_page 497  https://$host$request_uri;

    root  /www/web/fecshop/appserver/web;
    server_tokens off;
    include none.conf;
    index index.php index.html index.htm;
    access_log /www/web_logs/access.log wwwlogs;
    error_log  /www/web_logs/error.log  notice;
    location ~ \.php$ {
        fastcgi_pass   php:9000;
        fastcgi_index  index.php;
        include fcgi.conf;
    }

    location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$ {
        expires      30d;
    }

    location ~ .*\.(js|css)?$ {
        expires      12h;
    }
}

配置好后,

docker-compose restart web 重启web容器

到这里HTTPS配置完成。不懂留言

本文由 Axin 创作,采用 知识共享署名 3.0 中国大陆许可协议 进行许可。 可自由转载、引用,但需署名作者且注明文章出处。

共收到 9 条回复 技术分享
Fecmall#15年前 0 个赞

最好的方式,是直接在yml中构建,七月中旬抽时间写一个

Axin#25年前 0 个赞

@Fecshop #1楼 好的,网上找半天没有相应的,就只能这样凑合了。不过还是有问题,我这样的话,每个二级域名都要申请证书,是这样吗?

Fecmall#35年前 0 个赞

可以一次全部添加的,好像是用-d参数

Fecmall#45年前 0 个赞

多个子域名,用多个-d参数

kyohaha#55年前 1 个赞

你这个不行。我参考这个就可以了 https://www.jianshu.com/p/5afc6bbeb28c

Axin#65年前 0 个赞

@kyohaha #5楼 这篇我有看过,没试。 还是用之前笨方法弄的,你的可以,可以把你的过程贴出来。方便大家

coolhector#75年前 0 个赞

@Fecshop [#1楼](#comment1) 直接在yml中构建的方式,博主写完了么?再辅之 开启http2 就很完美了。

coolhector#85年前 0 个赞

你这样 证书到期 就要重新更新证书,然后还要自己上去重启docker,人工成本有点大啊。

Fecmall#95年前 0 个赞

这里有教程: http://www.fecshop.com/topic/1249

@coolhector #7楼 @coolhector #8楼

更新的时候是需要重启的,耗费时间也就1秒,没啥问题的

当你的网站非常非常重要的时候,你也不差那点钱了,去搞个付费的就OK了

添加回复 (需要登录)
需要 登录 后方可回复, 如果你还没有账号请点击这里 注册
Your Site Analytics