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');

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