技术虚拟化

Docker容器wordpress开启SSL

证书申请

可以用阿里云、百度云等证书管理,这里使用永久免费证书Let’s Encrypt,注意是3个月期限。。。后续要更新

阿里云有Symantec 免费版,一年期限。

大多数启动 wordpress 容器只映射了80端口,开启 https,需要追加 443 端口映射,否则还怎么玩,同时也要把申请的 SSL 证书拷贝到容器内,或者将证书挂载到容器内。

# 举个例子
docker run --name wordpress \
-p 80:80 \
-p 443:443 \
--link mysql:mysql \
-v /home/blog/wordpress:/var/www/html \
-v /etc/letsencrypt:/etc/letsencrypt \
-d wordpress:latest
# 这里我为什么要挂载`/etc/letsencrypt`路径呢?
# 因为我申请的是 Let’s Encrypt SSL 证书
# 方便容器内绑定证书

加载 Apache SSL 模块

输入 a2enmod ssl,第一次加载,会提示重启 Apache,简单粗暴直接重启 wordpress 容器

root@d38c40e54806:/var/www/html# a2enmod ssl
Considering dependency setenvif for ssl:
Module setenvif already enabled
Considering dependency mime for ssl:
Module mime already enabled
Considering dependency socache_shmcb for ssl:
Enabling module socache_shmcb.
Enabling module ssl.
See /usr/share/doc/apache2/README.Debian.gz on how to configure SSL and create self-signed certificates.
To activate the new configuration, you need to run:
  service apache2 restart
root@d38c40e54806:/var/www/html# 

修改 SSL 配置文件,绑定证书及打开 443 端口

Apache 加载 SSL 模块后,会在 /etc/apache2/sites-available 下生成 default-ssl.conf 文件,编辑该文件

SSLCertificateFile	/etc/ssl/certs/ssl-cert-snakeoil.pem
SSLCertificateKeyFile /etc/ssl/private/ssl-cert-snakeoil.key

上述两行配置就是证书的存放位置,我们只需要把第三方第三方可信CA签发的证书相应的文件进行替换

从 apache 的配置文件 apache2.conf 可以看到,apache 只会读取 /etc/apache2/sites-enabled 目录的配置文件,所以需要把 /etc/apache2/sites-available 下的 default-ssl.conf 文件复制到 /etc/apache2/sites-enabled 目录下。

cp /etc/apache2/sites-available/default-ssl.conf /etc/apache2/sites-enabled/

http 请求强制跳转到 https

编辑 /etc/apache2/sites-available/000-default.conf

在 <VirtualHost *:80> </VirtualHost> 标签中增加下面的配置

<Directory "/var/www/html"> 
    RewriteEngine   on
    RewriteBase /
    # FORCE HTTPS
    RewriteCond %{HTTPS} !=on
    RewriteRule ^/?(.*) https://%{SERVER_NAME}/$1 [R,L]
</Directory>

修改完之后,重启 wordpress 容器,一切都变成了 https

systemctl start docker.service
Prev Next
No Comments

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注