wordpress开启全站https访问

Https是现在大势所趋,越来越多的站点开启了https,而且百度对相同权值的站点,会优先采用https站点,当然咋不是为了这个,而是为了装逼,不是,为了让自己的站点更安全,看起来更优秀,所以给自己的站点实现了https,由于我的站点是采用docker搭建的wordpress,所以流程有点不一样,但是原理是一下的,下面开始说明!!

关于https基础知识,可以参考我的另外一篇文章,讲的很详细和基础,推荐阅读扫盲!
< 给Nginx配置一个自签名的SSL证书 >

  一、实验环境  

宿主机操作系统:CentOS Linux release 7.3.1611 (Core)

wordpress运行环境:docker容器(debian:9.3 + php:7.2-apache + WordPress版本:4.9.4 )

mysql运行环境:docker容器(debian:8.10 + mysql:8.0 )

  二、申请免费SSL证书  

由于我的服务器是腾讯云的,就申请了腾讯家的SSL证书,可以免费一年,下面就拿腾讯的SSL证书的进行演示,当然还有其他SSL证书提供机构,比如Let’s Encrypt,据说是永久免费的,也可以试一下!

第1步:登录腾讯云后台,云产品 –>域名与网站 –>SSL证书管理

SSL证书

第2步:点击‘申请证书’,申请免费一年的SSL证书

申请SSL证书

第3步:根据提示,填写证书申请信息

填写申请信息

  1. 通用名称就是你的域名

  2. 申请邮箱填写你的常用邮箱

  3. 证书备注名:填写一个易记的就行

  4. 私钥密码:可不填写

  5. 所属项目:默认项目即可

第4步:进行验证,这里选择‘文件验证’方式

SSL证书文件验证

第5步:根据详细说明的指示,在指定文件目录创建指定文件名、填写指定文件内容

进到wordpress的根目录,创建.well-known/pki-validation目录,新增fileauth.txt文件,文件内容为:201608241742072yvt8bxp9jv0ycginrnnebwgy1nvwgvxtssucy39w7b20nelfa

文件验证

[root@jimmy html]#cd /data/wordpress/html/
[root@jimmy html]#mkdir -p .well-known/pki-validation && cd .well-known/pki-validatio
[root@jimmy html]#touch fileauth.txt
[root@jimmy html]#echo 201608241742072yvt8bxp9jv0ycginrnnebwgy1nvwgvxtssucy39w7b20nelfa > fileauth.txt

如果申请文件验证的域名是www.xjimmy.com,那么进行验证访问的链接地址是
http://www.xjimmy.com/.well-known/pki-validation/fileauth.txt  或者
https://www.xjimmy.com/.well-known/pki-validation/fileauth.txt

第6步:验证成功后,就可以等待审核

建立完成文件后,请耐心等待CA机构扫描审核。证书颁发完成后,文件和目录即可清除。

等待认证

第7步:完成验证后,就可以下载证书了

下载证书

进入SSL证书列表,将所申请的域名SSL证书下载到本地。

证书

  三、配置SSL证书  

第1步:重新启动wordpress容器,追加443端口映射

因为之前启动wordpress容器的时候,只映射了80端口,而现在要开启https,需要追加443端口映射,而放到第一步来完成,是因为我们知道docker容器一旦启动后,是无法更改启动参数的,只有删除容器,重新启动一个新的docker容器,才能指定新的启动参数。

而我们下面的操作会修改到docker容器内的文件,如果修改完再来重新启动容器,那么所有的配置将会重置,当然如果你把docker容器的配置目录映射到宿主机也是可以的,但是我们是直接修改容器里面的文件内容。

[root@jimmy html]# docker stop wordpress
[root@jimmy html]# docker rm wordpress
[root@jimmy html]# docker run -d --name wordpress  -v /data/wordpress/html:/var/www/html \
-p 80:80 -p 443:443 --link wp_mysql:mysql  -e WORDPRESS_DB_PASSWORD='mysql_password' \
wordpress

第2步:把证书放到docker容器里面的apache配置目录

请选择对应web服务器的证书文件,由于docker官方的wordpress镜像跑的是apache2,所以将下载的Apache目录的3个证书相关文件放到对应目录下。

[root@jimmy html]#docker cp 3_www.xjimmy.com.key wordpress:/etc/apache2/ssl/
[root@jimmy html]#docker cp 2_www.xjimmy.com.crt wordpress:/etc/apache2/ssl/
[root@jimmy html]#docker cp 1_root_bundle.crt wordpress:/etc/apache2/ssl/

第3步:进入wordpress容器,加载OpenSSL模块

在终端或者xshell中输入openssl,查看是否安装ssl,如果出现下面图情况说明已经安装过了。

[root@jimmy html]# docker exec -it wordpress bash
root@02576082531c:/var/www/html# openssl

openssl模块

第4步:加载Apache的SSL模块

输入命令:a2enmod ssl,我是已经加载过的,见下图所示,第一次时候,会提示重启Apache。

root@02576082531c:/var/www/html# a2enmod ssl

加载ssl模块

第5步:给wordpress容器安装常用工具

由于默认的docker容器是最小化安装,所以这里没有vim编辑工具,以及常用的网络工具,我们这里需要先下载一些常用的工具。

通过docker官网可以知道,wordpress容器的dockerfile中定义的base镜像是php:7.2-apache,而php:7.2-apache的base镜像又是debian系统,所以我们的wordpress的操作系统是debian的,我们这里通过apt-get进行更新和下载。

root@02576082531c:/var/www/html#apt-get update
root@02576082531c:/var/www/html#apt-get install vim
root@02576082531c:/var/www/html#apt-get install net-tools

第6步:修改SSL配置文件,绑定证书及打开443端口

Apache加载SSL模块后,会在/etc/apache2/sites-available下生成default-ssl.conf文件,编辑该文件。

root@02576082531c:/var/www/html#vim /etc/apache2/sites-available/default-ssl.conf

修改内容如下:

<VirtualHost *:443>
    ServerAdmin kzjimmy@qq.com
    DocumentRoot "/var/www/html"
    ServerName www.xjimmy.com
    SSLEngine on
    SSLCertificateFile /etc/apache2/ssl/2_www.xjimmy.com.crt    
    SSLCertificateKeyFile /etc/apache2/ssl/3_www.xjimmy.com.key    
    SSLCertificateChainFile /etc/apache2/ssl/1_root_bundle.crt
</VirtualHost>

ssl配置

配置文件参数说明:

<VirtualHost *:443>:这里配置‘*:433’既可,一开始配置‘域名:443’无法访问
DocumentRoot:网站根目录
ServerName:网站域名
SSLEngine on:启用SSL功能
SSLCertificateFile:证书文件
SSLCertificateKeyFile:私钥文件
SSLCertificateChainFile:证书链文件

第7步:把default-ssl.conf链接至/etc/apache2/sites-enabled文件夹

从apache的配置文件可以看到,apache只会读取/etc/apache2/sites-enabled目录的配置文件,所以需要把/etc/apache2/sites-available下的default-ssl.conf文件链接到/etc/apache2/sites-enabled目录下。

[root@jimmy html]#ln -s /etc/apache2/sites-available/default-ssl.conf \
/etc/apache2/sites-enabled/001-ssl.conf

第8步:重载配置文件,重启apache服务

root@02576082531c:/var/www/html#service apache2 reload
root@02576082531c:/var/www/html#service apache2 restart

重启apache服务时,wordpress容器会停止,需要手动启动。

[root@jimmy html]#docker start wordpress

第9步:验证端口监听状态

再次进入docker容器,查看端口监听状态。

root@02576082531c:~# netstat -an

端口监听

可以看到,443端口已经在监听。

  四、wordpres配置修改  

这个时候,虽然已经配置SSL证书,并且开启了https协议,但是站点还是无法用https访问的,因为wordpress还需要修改配置,及数据库路径地址修改。

第1步:修改wordpress访问地址

可以直接登陆后台,通过“设置”中“常规”里面把“WordPress 地址(URL)”、“站点地址(URL)”两个地址的 http 修改为 https 并保存。

wordpress访问地址修改

第2步:修改数据库的绝对路径地址

我们都知道,我们如果使用了 WordPress 的多媒体上传和插入图片附件的时候,附件都被 WordPress 标记为了绝对链接,一般需要修改数据库。

[root@jimmy html]# docker exec -it wp_mysql bash
root@e20cb0bc320e:/# mysql -uroot -p'mysql_password'
mysql> use wordpress;
UPDATE wp_posts SET post_content = REPLACE(post_content, 'http://www.xjimmy.com','https://www.xjimmy.com');
UPDATE wp_comments SET comment_content = REPLACE(comment_content, 'http://www.xjimmy.com','https://www.xjimmy.com');
UPDATE wp_comments SET comment_author_url = REPLACE(comment_author_url, 'http://www.xjimmy.com','https://www.xjimmy.com');
UPDATE wp_postmeta SET meta_value = REPLACE(meta_value, 'http://www.xjimmy.com','https://www.xjimmy.com');
UPDATE wp_termmeta SET meta_value = REPLACE(meta_value, 'http://www.xjimmy.com','https://www.xjimmy.com');

提醒:把代码中的域名改为自己网站的域名再执行,此外操作前一定要对数据库进行备份

至此,正常的话,你的wordpress站点就可以用https访问了。

  五、开启强制https访问  

细心的你这时候一定会发现,你的网站这时候虽然支持了 HTTPS 访问,但是似乎也可以使用 HTTP 来访问,考虑到搜索引擎目前收录的都是你的 HTTP 链接,那么如果不做点什么的话恐怕这张 SSL 证书将会毫无用处!所以我们可以利用apache的重定向,来跳转客户访问请求,全部指向为https协议的请求。

第1步:开启apache的重定向模块

输入命令:a2enmod rewrite,我是已经加载过的,见下图所示。

root@02576082531c:/var/www/html# a2enmod rewrite

a2enmod rewrite

另外,也可以通过将 /etc/apache2/mods-available/rewrite.load 链接到 /etc/apache2/mods-enabled/rewrite.load 来打开 Mod_rewrite 模块。

用指令操作就是:

root@02576082531c:/var/www/html#ln -s /etc/apache2/mods-available/rewrite.load \
/etc/apache2/mods-enabled/rewrite.load

第2步:修改配置文件,实现301重定向

编辑‘/etc/apache2/mods-available/000-default.conf’配置文件,添加如下的配置内容:

root@02576082531c:/etc/apache2# vim mods-available/000-default.conf
RewriteEngine on
RewriteCond %{HTTPS} !=on
RewriteRule ^(.*) https://%{SERVER_NAME}$1 [L,R=301]

配置文件内容添加

第3步:重载配置文件,重启apache服务

root@02576082531c:/var/www/html#service apache2 reload
root@02576082531c:/var/www/html#service apache2 restart

重启apache服务时,wordpress容器会停止,需要手动启动

[root@jimmy html]#docker start wordpress

第4步:浏览器访问https://站点,进行验证

正常的话,应该能正常访问了,并且浏览器会显示绿色的小图标了。

如果发现浏览器的小图标还是灰色,说明还存在http协议的链接,在chrome中按‘F12’看看有没有警报,要确保网站的每个元素(如插件、JS、CSS文件、图片、内容分发网站等)都采用https协议,发现有的话,根据显示的地址信息,在后台找到对应的位置,要手动全部修改成https协议访问。

  六、百度分享不支持https的解决方案  

站点开启 https 之后 ,站点的百度分享就不能用了!上网搜索了一下,看到已经有大神分享出了解决方案,下面就直接拿来用了。

第1步:下载修改好的分享代码

Github地址:https://github.com/hrwhisper/baiduShare

百度分享代码下载

第2步:static 解压后丢到站点的根目录

  • 注意static目录的属主属组

  • 这里需要确保要确保“根目录”能被访问到,比如我的wordpress确实就是丢到根目录即可

static目录

第3步:修改对应的调用代码

.src='http://bdimg.share.baidu.com/static/api/js/share.js?v=89860593.js?cdnversion='+~(-new Date()/36e5)];
改为
.src='/static/api/js/share.js?v=89860593.js?cdnversion=' + ~ ( - new Date() / 36e5)];

调用代码修改

至此,本次wordpress站点配置ssl证书,开启https,并且实现全站https访问,并解决了https下百度分享功能失效问题,已全部完成,感谢阅读!

Jimmy's Blog ,版权所有丨如未注明,均为原创丨本网站采用BY-NC-SA协议进行授权,转载请注明转自:https://www.xjimmy.com/wordpress_https.html

Leave a Comment