证书申请
可以用阿里云、百度云等证书管理,这里使用永久免费证书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
No Comments