
用docker部署wordpress是一个省心省力的办法。
但是默认的wordpress容器镜像并没有启用https服务。
启用的办法很多,不过无论如何都不建议进入容器内部,对配置文件进行修改和添加,也不建议在容器内部安装软件、添加证书。因为一旦wordpress镜像升级,对容器本身做的任何修改都容易失效。
一个简单而又合理的做法,是通过反向代理服务对SSL进行终结,也叫SSL卸载。也就是用反向代理服务程序接受HTTPS请求,转换成HTTP请求,再转发给wordpress。
以HAPROXY为例:
首先用docker部署haproxy。
docker run -d -p 443:443 --name haproxy -v /opt/haproxy/haproxy.cfg:/usr/local/etc/haproxy/haproxy.cfg haproxy
然后修改/opt/haproxy/haproxy.cfg配置文件,添加:
frontend www.mysite.com
bind *:443 ssl crt /etc/ssl/certs/mysite.pem
http-request redirect scheme https unless { ssl_fc }
default_backend web_server
backend web_server
mode http
server srv1 127.0.0.1:80
其中mysite.pem是申请到的网站证书文件。
再重启haproxy服务。
docker restart haproxy
接下来用浏览器访问,有可能会进入无限重定向。
如果出现这种现象,修改wp-config.php,在
/* That's all, stop editing! Happy publishing. */
前面添加:
$_SERVER['HTTPS'] = 'on';
$_SERVER['HTTP_UPGRADE_INSECURE_REQUESTS'] = 0;
$_SERVER['HTTP_HOST'] = 'www.aaa.com';
define('WP_HOME', 'https://www.aaa.com');
define('WP_SITEURL', 'https://www.aaa.com');
其中www.aaa.com是你的网站域名。
如果使用了主题,那么还要修改主题文件夹下的functions.php,添加:
remove_filter('template_redirect','redirect_canonical');
最后重启wordpress
docker restart wordpress
搞定。