yingfeng

  • 首页
  • 友情链接
  • 申请友链
  • 关于我
  • 联系我
  • 捐赠
  • 隐私政策
yingfeng
心明若镜,不将不迎
  1. 首页
  2. 技术教程
  3. 正文

在VPS上实现Wordpress全站https

2016-07-21 27271点热度 0人点赞 29条评论

前不久我给自己的博客开启了全站https,说过会发个教程,所以便有了这篇文章。

其实使用https理论上是会使网站变慢的(具体原因这里便不再阐述,感兴趣的可以自己去查一下,另http2除外),从这一点来看是不利于用户体验的,而且启用https甚至对SEO有影响,网站的收录可能会波动一段时间。既然如此,我们为什么还要给网站加上https这把锁呢?这里摘录搜狐的一篇文章的一段话。

为什么需要HTTPS?

HTTP全名超文本传输协议,它是网络应用广泛使用的协议,客户端据此获取服务器上的超文本内容。客户端包括浏览器、PC软件客户端以及大部分 手机App。超文本内容则以HTML为主,客户端拿到HTML内容后可根据规范进行解析呈现。因此,HTTP主要负责的是“内容的请求和获取”。

问题就出在这部分。内容请求和获取时会经过许多中间人,主要是网络环节,充当内容入口的浏览器、路由器厂商、WIFI提供商、通信运营商,如果使用了代理、翻墙软件则会引入更多中间人。由于HTTP请求的路径、参数默认情况下均是明文的,因此这些中间人可以对HTTP请求进行监控、劫持、阻挡。一些关键参数比如登录密码开发者会在客户端进行MD5加密,不过互联网所承载的机密信息远不只是密码,搜索内容同样属于敏感信息。

在没有HTTPS时,运营商可在用户发起请求时直接跳转到某个广告,或者直接改变搜索结果插入自家的广告。浏览器和安全软件可以监听用户搜索在 结果页植入广告。一些中间人还可把用户数据直接转卖,这样你搜索了“保险”以后你就成了保险公司电话推销的目标。如果劫持代码出现了BUG,则直接让用户 无法搜索,出现白屏。

不只是搜索引擎,其他的网络应用同样会面临这些问题:数据泄露、请求劫持、内容篡改等等,核心原因就在于HTTP是全裸式的明文请求,域名、路 径和参数都被中间人们看得一清二楚。HTTPS做的就是给请求加密,让其对用户更加安全。对于自身而言除了保障用户利益外,还可避免本属于自己的流量被挟 持,以保护自身利益。

尽管HTTPS并非绝对安全,掌握根证书的机构、掌握加密算法的组织同样可以进行中间人形式的攻击。不过HTTPS是现行架构下最安全的解决方案,并且它大幅增加了中间人攻击的成本。

好了,接下来我们回到正题,如何启用全站https

如果在这之前你了解过一些相关内容,你就会知道我们需要申请ssl证书,我使用的是沃通的免费证书,只要验证域名所有权即可,很快就能签发证书。沃通的免费SSL证书免费两年,到期可以免费续期,相当于完全免费。Wordpress 启用全站https教程_协议

官网详细介绍

以沃通免费证书为栗子例子,先到对应的网站申请证书Wordpress 启用全站https教程_申请

取得证书后,将其解压,根据你的服务器环境选择对应的文件解压,上传到服务器上,位置自己选择

Wordpress 启用全站https教程_解压

需要注意的是,上传上去的是应该是俩个文件,一个是公钥,一个是私钥。以Nginx为例,应该是一个.key后缀的文件和一个.crt后缀的文件
Wordpress 启用全站https教程_上传到服务器

然后便是要修改对应的vhost的配置,这个便需要参考对应的证书提供商的文档了,这里以Nginx环境,使用沃通免费证书为栗子

在原来的的

listen 80;
server_name 你的域名;

下面加上

listen 443 ssl;
server_name 你的域名;

ssl on;
ssl_certificate .crt 文件位置 【必须使用绝对路径】;
ssl_certificate_key .key 文件位置 【必须使用绝对路径】;

#其他参数
ssl_session_timeout 5m;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers AESGCM:ALL:!DH:!EXPORT:!RC4:+HIGH:!MEDIUM:!LOW:!aNULL:!eNULL;
ssl_prefer_server_ciphers on;

其中其他参数后面需要根据你的SSl证书提供商的文档来配置。 附:沃通免费证书部署指南

做完这些之后,保存文档,然后重启一下Nginx(不会的话你就干脆直接重启服务器)然后博客是不是就可以用https访问了呢。

但是教程还没完成呢,这只是启用了https,我们要的是全站https,接下来就要对Wordpress动以一些手手术了

首先进入Wordpress的后台 => 设置 => 常规中,把 WordPress地址(URL)和站点地址(URL)加上一个s

Wordpress 启用全站https教程_后台改地址

改完这个文章什么的连接就自动改成https了,但是还有个很严重的问题,就是图片,当初你发文章插入图片的时候Wordpress可是在数据库妥妥的给你写入了“http://”这个有两种解决方法。

第一种:修改数据库

如果你要采用第一种方法,建议还改之前先去主机商那边创建一个快照,就是备份一下。

进入 phpMyAdmin,打开 Wordpress 的 wp_posts 表,搜索,查找与替换(Find and replace)

Wordpress 启用全站https教程_数据库_查找

这里以我的博客 yingfeng.me 为例,搜索 http://yingfeng.me 替换为 https://yingfeng.me 字段选第一个 post_content 点击执行

Wordpress 启用全站https教程_数据库_替换

第二种:修改主题

找到当前主题的 function.php 文件,在这个文件的末尾追加以下代码:

/* 替换图片链接为 https */
function my_content_manipulator($content){
    if( is_ssl() ){
        $content = str_replace('http://你的域名/wp-content/uploads', 'https://你的域名/wp-content/uploads', $content);
    }
    return $content;
}
add_filter('the_content', 'my_content_manipulator');

这个方法的原理是在 Wordpress 加载附件之前将链接替换成https,注意把“你的域名”替换成你的域名,别直接在php里面就是直接写了你的域名 23333

好了,到这一步就就Wordpress本身就已经实现了全站https了但是还有很多插件啊,比如多说等

使多说支持https

多说用的人还是很多,这里说一下多说如何完美支持https,其实多说本身是支持https,但是第三方头像,比如新浪就不支持https了,所以我们就写一个 php 来做代理

这儿已经准备好了代码,只要稍作修改即可。

  • 文件下载:百度云 | 360云盘(访问密码 cdf7)

下载代码后,上传到服务器,至于上传位置 只要能使用链接访问到即可,建议在插件的多说下新建立个 proxy 文件夹放这几个文件。编辑embed.php文件,大约在12和13行,修改成自己对应的网址,和文件传到的路径。

$data = str_replace("e.avatar_url","'https://你的域名/文件路径/img-cache.php?src='+e.avatar_url",$data);
$data = str_replace("nt.data.default_avatar_url","'https://你的域名/文件路径/img-cache.php?src='+nt.data.default_avatar_url",$data);

进入多说插件目录,找到 Wordpress.php 编辑该文件,寻找 embed.js ,大约在600行前后。将其全部替换成 https 的刚才上传的路径中的文件的 url 然后如果有使用CDN的,去CDN刷新一下全站的缓存。

完成这些,就多说就也能实现全部走 https 协议了,至于多说评论的表情直接禁用即可,反正基本用不到。

将 http 请求跳转到 https

最后就是在配置文件写个301跳转,将博客的http请求全部跳到https,这个和收录有关系,一定要注意!

在对应的vhost文件的开头加上如下代码,记得把域名改了,别直接吧“你的域名”丢进去。

server {
listen 80;
server_name 你的域名;
return 301 https://$server_name$request_uri;
}

把原来的 listen 80 那一行删掉,然后再重启下Nginx。在试下是不是访问 http 就会自动跳转到 https了呢

至此,教程结束 。

本作品采用 知识共享署名 4.0 国际许可协议 进行许可
标签: https ssl
最后更新:2018-12-02

yingfeng

心明若鏡,不將不迎

打赏 点赞
< 上一篇
下一篇 >

文章评论

  • boyizmen

    现在用certbot方便很多了,nginx的话还有certbot版本,nginx 1.9.5以上非源码编译安装版本直接修改配置就可以开启HTTP2了

    2017-12-03
    回复
    • yingfeng

      @boyizmen 说到http2,用了CDN不支持http2,挺惆怅的...

      2017-12-03
      回复
      • 笛声

        @yingfeng verycloud 支持http2,这可不是杂牌军哦,cnbeta用了好多年了。我的博客也在用,你可以试试速度。

        2017-12-07
        回复
        • yingfeng

          @笛声 我在用360的CDN 23333 懒啊

          2017-12-07
          回复
          • 龙笑天

            @yingfeng 我也是360的~~

            2017-12-16
          • yingfeng

            @龙笑天 360的免费CDN还行,就是有时候会抽风。。。

            2017-12-16
  • 魏星博客

    你好哥们,我的网站用的阿里云的SSL证书,通过CDN也安装完毕启用https模式,刚开始网站后台是没有样式,我在后台把网站基本信息里的域名改成https://weixing.me提交之后就,后台就直接打不开了,请问这个怎么处理啊,搞了好久了,还是不行,谢谢!!

    2017-08-25
    回复
    • yingfeng

      @魏星博客 我看你的后台跳转了好多次,你试试继续按照我教程中的,把数据库中是http改成https,当然,在这之前记得备份啊

      2017-08-25
      回复
  • 封麟网络

    很有借鉴意义。感谢站长

    2016-12-10
    回复
  • 菊部

    貌似沃通的最近出问题蛮多啊

    2016-11-13
    回复
    • yingfeng

      @菊部 Wosign纯粹是自作自受,话说我还是没有换 = = 懒癌晚期

      2016-11-14
      回复
  • Benny

    现如今,并不推荐使用WoSign的证书,也就是说StartCom也别用。具体可以搜索下Mozilla和Wosign。

    2016-10-11
    回复
    • yingfeng

      @Benny 我知道,一直准备换,然而懒癌发作 。。。

      2016-10-11
      回复
      • Benny

        @yingfeng 快换吧,非常简单容易的!

        2016-10-11
        回复
        • yingfeng

          @Benny 换下文件,稍微改下配置,是很快 。。。

          2016-10-11
          回复
          • Benny

            @yingfeng 是的!就是用Let's Encrypt签发下,然后改证书私钥的路径...

            2016-10-11
  • 慕若曦

    看着你们一个个都https,我在想我要不要也换一下……

    2016-10-03
    回复
    • yingfeng

      @慕若曦 折腾了一下邮件回复提醒,不知道用手机的WordPress客户端回复可不可以。。

      2016-10-07
      回复
  • EQ

    然而我的网站并没有变慢

    2016-08-06
    回复
    • yingfeng

      @EQ https 确实会慢一点,毕竟还要第三方验证,然后,我用三六蛋的CDN,最近三六蛋的SSL似乎一直在抽风 ...

      2016-08-06
      回复
      • EQ

        @yingfeng 不用CDN的路过

        2016-08-07
        回复
        • zh

          @EQ 不用CDN,一旦被ddos得炸呀

          2016-08-08
          回复
          • yingfeng

            @zh 你是知道的,我已经炸过好几次了😭

            2016-08-08
      • zh

        @yingfeng 可以找找支持ssl,http2的cdn

        2016-08-08
        回复
        • EQ

          @zh 有倒是有 是国内的不敢用 国外的cloudflare倒是支持。但是CDN 的IP容易被墙还是算了把。现在也蛮好的。一被D就换vps。。。

          2016-08-08
          回复
  • guozixi

    为什么没有Apache的教程?

    2016-07-24
    回复
    • yingfeng

      @guozixi 因为我用的Nginx啊

      2016-07-24
      回复
  • 一只北极熊

    好麻烦的说...

    2016-07-23
    回复
    • yingfeng

      @一只北极熊 所以我才拖了这么久才弄的

      2016-07-23
      回复
  • razz evil exclaim smile redface biggrin eek confused idea lol mad twisted rolleyes wink cool arrow neutral cry mrgreen drooling persevering
    取消回复

    yingfeng

    心明若鏡,不將不迎

    最新 热点 随机
    最新 热点 随机
    2025年的第一场流星雨:象限仪座流星雨 Let's Encrypt免费SSL证书申请与自动化续签 关于我使用z30一段时间的一些分享(絮絮叨叨,废话比较多) 银临『山色有无中』巡演 • 深圳站 UNAS替换卷组中的硬盘,保持目录不变 Linux替换卷组中的硬盘
    在 Wordpress 上实现评论回复邮件提醒 使用ffmpeg提取视频文件中的音频 Let's Encrypt免费SSL证书申请与自动化续签 Wordpress 在使用CDN后获取正确访客 ip 关于我使用z30一段时间的一些分享(絮絮叨叨,废话比较多) 2025年的第一场流星雨:象限仪座流星雨
    最近评论
    yingfeng 发布于 8 个月前(09月20日) 你的站点挂啦
    思陽 发布于 9 个月前(09月04日) 算了,還是台版Apple id來的香
    Ali7 发布于 11 个月前(06月08日) 新建立的网站,刚刚从内网迁移到广域网~ 已为大佬添加友链 http://blog.alise.t...
    FreelyTomorrow 发布于 1 年前(02月12日) 你好,如果我的网站架设在国外是不是和国内的站点互换友链不太方便啊
    跨境电商 发布于 2 年前(09月27日) 感谢分享

    COPYRIGHT © 2025 yingfeng. ALL RIGHTS RESERVED.

    Theme Kratos Made By Seaton Jiang

    闽ICP备15026537号-1