本文记录了在Apache下为WordPress配置HTTPS的心得。
注:本文的HTTPS使用的是免费SSL证书,只能支持单个域名,所以无法直接支持多子域名的WP Multisite。关于如何在Apache里为子域名同时配置多个HTTPS,请参考这篇文章。
首先先参照本文的1、2章节(仅1、2章节即可,已经弄好SSL的请直接阅读下文)申请好SSL并上传到服务器上。
接着,参照下文为域名配置即可。配置文件的默认位置在/etc/apache2/sites-available/
下。一般来说,默认的vHost为000开头的文件。具体的Apache vHost读取顺序的解释请参考这里。
配置文件可以参考以下配置:
首先,对于所有的80端口的流量,我们都要做一个转发,确保只有通过443才能对网站进行访问:
<VirtualHost *:80> ServerName example.com # 你的域名,比如example.com ServerAlias www.example.com # 你的域名別名,比如www.example.com Redirect / https://www.example.com/ # 想要转发到的HTTPS的域名,比如https://www.example.com </VirtualHost>
接下来就是重头戏,配置443以支持HTTPS
<VirtualHost *:443> ServerName example.com # 你的域名,比如example.com ServerAlias www.example.com # 你的域名別名,比如www.example.com ServerAdmin webmaster@localhost DocumentRoot pathToWordpressRoot # 你的Wordpress的跟目录地址,比如/var/www/example-com ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined <Directory /var/www/example-com/> #这里需要改成对应的自己的网站的根目录。 AllowOverride All </Directory> SSLEngine on SSLProxyEngine On SSLProxyCheckPeerCN on SSLProxyCheckPeerExpire on SSLCertificateFile pathToSSLCertificateFile # 将对应文件的路径写进来。建议使用绝对路径 SSLCertificateKeyFile SSLCertificateKeyFile # 将对应文件的路径写进来。建议使用绝对路径 SSLCertificateChainFile SSLCertificateChainFile # 将对应文件的路径写进来。建议使用绝对路径 </VirtualHost>
修改完成后需要开启SSL模组:
sudo a2enmod ssl
然后记得查看一下防火墙的状态:
sudo ufw status
记得要同时允许80和443的链接:
sudo ufw allow in "Apache Full"
最后,别忘了开启辛苦定义的vHost:
sudo a2ensite configName
另外,如果使用了Container的话,建议使用代理将真实应用藏起来,以增加安全性。具体配置如下:
ProxyPreserveHost On ProxyRequests Off ProxyPass / http://localhost:yourPortNumber/ ProxyPassReverse / http://localhost:yourPortNumber/
我因为直接用Apache跑的Wordpress且使用里CDN,于是我这里就没有配置代理了。