wordpress HTTPS修正

前文:迁移wordpress到HTTPS

前文提到,使用docker部署,因为前后https模式不同步(前面是https后面是http://ip:port)导致需要修改配置文件,所以我决定把wordpress从docker迁移出来,因为docker挂载目录的其实就是wordpress本体在的位置


server {
  listen  443;
  server_name wpdev.endercaster.lan;#记得改掉
 #SSL证书配置参照前文
  root /opt/wordpress;#记得改掉
  location / {
      try_files $uri $uri/ /index.php?$is_args$args; #这里需要注意一下,不要少打
      index index.php;
  }
  # 这里替换为:在设置->固定连接->改为任意一个非朴素型
  #location ~ ^/wp-json/ {
  #    rewrite ^/wp-json/(.*?)$ /?rest_route=/$1 last;
  #}
  location ~ \.php$ {
        fastcgi_pass unix:/run/php/wp-test.sock;
        include fastcgi.conf;
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        fastcgi_param PATH_INFO $fastcgi_path_info;
        fastcgi_param PATH_TRANSLATED $document_root$fastcgi_path_info;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
  }
}

然后把前文中wp-config.php加的代码都删掉。

配置php-fpm,如果只有这一个项目,可以把上面的fastcgi_pass改掉,跳过这步


[wordpress]#从www改为wordpress
user = www-data
group = www-data
listen = /run/php/wp-test.sock
listen.mode = 0666


# 重启php-fpm
systemctl restart php7.2-fpm
#现在可以重新读取nginx配置文件了
nginx -t 
# 如果上面的输出是successful的话
systemctl reload nginx

然后登录查看工具->站点健康,看看有没有少一些依赖,给它装上。

至此,我的站点终于完美的迁移到https啦!

迁移wordpress到HTTPS

鸽了四个月之后我终于想起来配置HTTPS环境了

好的现在不止四个月了,一直以来都懒得写,这不是最近终于有时间了,所以补上。

第一步先把https证书扔上去


#
server {
    listen       80;
    server_name  wordpress.endercaster.com;
    rewrite ^(.*) https://$host$1 permanent;# 强制跳转
    # 这下面其实已经没有执行了
    location / {
        proxy_pass http://127.0.0.1:docker 暴露的端口;

        proxy_redirect off;
        proxy_set_header HOST $host;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}
server {
    listen       443;# ssl默认端口
    server_name  wordpress.endercaster.com;
    ssl on;# 开启ssl
    ssl_certificate cert/wordpress.pem;# nginx下的cert目录
    ssl_certificate_key cert/wordpress.key; # nginx下的cert目录
    ssl_session_timeout 5m;
    ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
    #ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_protocols TLSv1.2;# 有个站长工具可以测ssl配置,设置成1.2是支付级安全
    location / {
        proxy_pass http://127.0.0.1:docker 暴露的端口;#下文会提到,因为这里用的是http

        proxy_redirect off;
        proxy_set_header HOST $host;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}

由于我的站是用nginx反向代理+docker 实现的,所以访问后台的时候实际上用的还是http,又由于我在nginx里配置的所有http请求全部跳转到https ,因此需要加上下面的配置才不会出错


/** Absolute path to the WordPress directory. */
if ( !defined('ABSPATH') )
	define('ABSPATH', dirname(__FILE__) . '/');
// 这下面是加的
$_SERVER['HTTPS']='ON';// 强行开启https
define('FORCE_SSL_LOGIN',true);
define('FORCE_SSL_ADMIN',true);
define('CONCATENATE_SCRIPTS',false);
// 这上面是加的
/** Sets up WordPress vars and included files. */
require_once(ABSPATH . 'wp-settings.php');

然后是替换站点url和固定连接,这一步需要操作数据库,执行下面的sql把固定连接和文章内容中的http://wordpress.endercaster.com/换成https://wordpress.endercaster.com/


-- 替换内容
update wp_posts set post_content=replace(post_content,'http://wordpress.endercaster.com/','https://wordpress.endercaster.com/');
-- 替换固定连接
update wp_posts set guid=replace(guid,'http://wordpress.endercaster.com/','https://wordpress.endercaster.com/');
-- 更新站点URL
update wp_options set option_value=replace(option_value,'http://wordpress.endercaster.com','https://wordpress.endercaster.com');

我记得当时配置的时候挺麻烦的,这看上去好像也没那么麻烦

在wordpress头部或底部添加自定义代码

前两天要在自己的主页添加百度统计代码,百度谷歌了好多都告诉我要改主题代码,这是wordpress不推荐的,那,我是拒绝这么改的,因为我喜欢用最新代码,所以一定会过几天更新就失效了,我看到百度经验都是说要改主题的footer或者header文件,船到桥头自然直嘛,不试试怎么能找到更好的方法呢,就先点进去看了一眼,如图

footer.php-twentyfifteen 主题 by wordpress

在红色框起来的地方,怎么看都是WordPress自带的函数吧,那么顺藤摸瓜的找过去(这时我下了一份在本地,用vscode打开了),用全局搜索,找到wp_footer

general-template.php

看见没有,还有一个wp_head,这个我们顾名思义就知道它是用来初始化Header的啊,而且一般统计代码放在header里面,那么我们来看看这个函数的实现,do_action,这个不用想,去官网看文档应该有


//https://developer.wordpress.org/reference/functions/do_action/
function my_callback( $should_be_an_array ){
   var_dump($should_be_an_array);
}
add_action( 'my_action', 'my_callback' );
do_action( 'my_action', array(new stdclass()) );
do_action( 'my_action', array( 'array_item_thats_not_an_object') );

在这段代码中我们可以看见使用add_action向某一个key添加需要执行的函数,通过do_action来执行某一个key下所有的函数,那么我们要做的就是新增一个百度统计代码的函数,然后把它放在”wp_head”这个key中

那么放在哪个文件里比较好呢?我在之前看到过对WordPress进行diy的大佬们都在functions.php中进行修改,试着在里面搜了一下,有add_action的调用,说明在执行的时候可以调用到这个方法(因为现在的还是没改过的,官方要是犯这么低级的错误就很尴尬了),于是在文件末尾添加如下内容

百度统计

注意红色圈起来的部分,我也是头一次真切的感受到php是真的适合做网站(虽然和jsp里直接写html一个感觉),这么写就相当于把内容输出到相应的位置上,最后一句是把函数添加到wp_head这个函数里

最后,保存文件,刷新WordPress,查看统计代码安装是否成功(如果打开了supercache记得先删除缓存)