本来没想这么早加 HTTPS,之前在家里访问后台的时候,直接弹出一个广告……于是开始着手搞全站 HTTPS;
主要有三步:申请证书、安装证书、设置站点 HTTPS 访问;
申请证书
直接用了腾讯云的,免费一年;腾讯云文档在这里
路径:域名与网站 -> SSL证书管理 -> 申请证书,填写信息,验证身份;
验证通过后,就可以到证书管理里下载证书文件了,下载解压后会有不同服务器下的证书,我用的是Apache;
从我填完申请信息到审核通过,差不多半小时;
安装证书
服务器是 Ubuntu 16、Web 服务器是 Apache 2.4.18;
网上找了一圈,很多都是 Apache 1.x 版本的安装方法,完全找不到对应的配置文件在哪儿,这也是写这篇文章的动机;
最终是在 阿里云的文档 中找到了解决方案,腾讯云文档 里虽然写的是2.x版本,但对照文档,找不到那些文件;
下面的步骤基本是摘抄自阿里云文档的,但还是要记录一下,方便日后查阅:
1、将第一步中下载下来的证书传到服务器上;
2、启用SSL模块,用的是 apache 自带的 ssl_mod 模块;
sudo a2enmod ssl
SSL模块启用后,/etc/apache2/sites-available 下会生成一个 default-ssl.conf 文件。
3、修改配置文件 default-ssl.conf 安装证书,下载下来的证书文件有三个:1_root_bundle.crt,2_www.domain.com_cert.crt 和私钥文件 3_www.domain.com.key,腾讯这点儿比较好,通过名称就能很好的区分出来
<VirtualHost *:443>
# 下面三个值默认应该就是这样的,不用动
ServerAdmin webmaster@localhost
DocumentRoot /var/www
SSLEngine on
# 下面三个值对应三个证书的位置
SSLCertificateFile /usr/local/apache/conf/2_www.domain.com_cert.crt
SSLCertificateKeyFile /usr/local/apache/conf/3_www.domain.com.key
SSLCertificateChainFile /usr/local/apache/conf/1_root_bundle.crt
配置文件中内容较多,需要看好注释,配置内容包含了自签名和第三方证书,默认开启的是自签名证书,需要把他们注释掉,在对应位置添加上面代码中的三个地址;
还一个需要注意的地方: <VirtualHost *:443>
4、把 default-ssl.conf 映射至 /etc/apache2/sites-enabled 文件夹中建立软链接、实现二者之间的自动关联,执行以下命令:
sudo ln -s /etc/apache2/sites-available/default-ssl.conf /etc/apache2/sites-enabled/001-ssl.conf
5、重新加载 Apache2 配置文件并重启
sudo /etc/init.d/apache2 force-reload
sudo service apache2 restart
重启后,就能通过 https 访问到页面了;
设置站点 HTTPS 访问
设置之前,一定要保证 https 能访问到页面;有几个地方需要改:
1、进入 wp 后台,在 设置 – 常规 中,将 WordPress地址 和 站点地址 都改为 https 的;这个是改了网页中所有的动态地址;
2、修改或新建根目录下的 .htaccess 文件,内容如下:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{SERVER_PORT} !^443$
RewriteRule ^(.*)$ http://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
// 其他代码 ……
</IfModule>
如果之前 配置过固定链接 的,应该是有这个文件的,这时只需增加第二三个字段,RewriteCond 和 RewriteRule 即可;这一步是将所有 http 访问的请求 301 重定向为 https 的请求;
3、修改文章中写死的 http:// 资源,这一步是直接修改数据库,修改之前先备份数据库;
update wp_posts set post_content = replace(post_content, 'http://','https://')
最终,可以在 这儿 检测一下自己的网站,会有一些兼容性、安全性的检测;