docker中的wordpress添加https访问
申请证书
可以从freessl.cn免费申请。免费的SSL证书时间长度为1年,但是只能对单个域名,不支持多域名通配符,选择的话以个人需求为准。
选择浏览器生成
点击确认创建后,得到如下信息:
接下来到域名管理里面,按上述信息配置域名的信息,可以参考上面的验证配置指南,如下:
配置完了之后,不一定会立马生效,取决于配置改解析项的TTL。
apache配置
- 将容器里面的443端口映射到宿主机的443端口。如果已启动了容器,可能需要重新创建。
- 将申请好的证书和私钥上传到宿主机中,并将其挂载到容器中。
docker run --name wp \ -p 80:80 \ -p 443:443 \ -e WORDPRESS_DB_HOST=host \ -e WORDPRESS_DB_USER=user \ -e WORDPRESS_DB_PASSWORD="" \ -v /root/wordpress:/var/www/html \ -v /root/ssl:/ssl \ -d wordpress
- 先进入容器中
docker container exec -it wp bash
- 加载apache的ssl模块
a2enmod ssl
- 修改证书和私钥路径
vim /etc/apache2/sites-available/default-ssl.conf
找到SSLCertificateFile
和SSLCertificateKeyFile
这两个配置项,改成把私钥和证书挂载进容器里面后的路径,这里都在/ssl/
目录下。修改后为:
- 让ssl配置被apache加载
ln -s /etc/apache2/sites-available/default-ssl.conf /etc/apache2/sites-enabled/default-ssl.conf
- 退出容器,并重启容器。
docker container restart wp
- 强制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>
如下:
- 退出容器,并重启容器。
docker container restart wp
检验
如果不能访问,可以往如下两方面考虑:
- 查看容器的日志,看报什么错误信息:
docker container logs -f wp
- 看宿主机的443端口是否开放