Skip to main content

在Apache环境下为WordPress配置HTTPS

本文记录了在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,于是我这里就没有配置代理了。

Leave a Reply