欢迎光临!
若无相欠,怎会相见

WordPress 启用 SSL 证书并修复无法登陆后台

序言

最近一周我迫切想要启用 https, 上周还因此把网址推到重建,并升级了服务器系统。

究其根本, 是因为我之前使用 readthedocs 把自己的学习笔记搭建起来, 并使用 docs 子域名进行解析, 谁知道 readthedocs 是  https 类型的网站, 我另外的 wiki 子域名和当前博客都是 http 类型的, 然后又是使用 cloudflare 进行缓存, 结果就经常出现 too many redirect 导致 chrome 上打不开网站。 无奈之下才想起都启用 https 的。

事先声明: 在启用 https 之前, 请把网站 wp-login.php 的屏蔽给解除了(之前为了安全把这个给屏蔽了), 使之可以正常访问, 不然会出现如下错误

我上周没有进行下去的原因就是这个 reauth=1 was not found on this server. 导致根本无法进入后台。

我是把 WP Cerber 安全插件的屏蔽 wp-login.php 的设置给关闭了才搞定, 就这花费了我昨天一天的时间才找到原因, 网上的操作基本上我都试过。虽然开启 https 之后需要登录两次, 但能正常使用 docs 子域名也是好的

安装证书

上一篇文章已经写了如何使用 acme.sh 申请泛域名证书:使用 acme.sh 申请泛域名证书

现在把申请到的证书使用起来。

首先需要说明, 我的网站是使用 lnmp 搭建的, nginx 和 PHP mysql 都在 /usr/local 目录下

我打算将证书安装到 nginx conf/vhost 目录下面。 在 /usr/local/nginx/conf/vhost/ 目录创建 cert 文件夹, 然后执行如下命令

acme.sh --install-cert -d liangz.org --cert-file  /usr/local/nginx/conf/vhost/cert/liangz.org.cer  --key-file /usr/local/nginx/conf/vhost/cert/liangz.org.key --fullchain-file /usr/local/nginx/conf/vhost/cert/fullchain.cer --reloadcmd  "service nginx restart"

这样就将证书文件安装到 /usr/local/nginx/conf/vhost/cert 目录里面了, 可以自行查找证书文件

配置 Nginx

首先在 nginx.conf 文件中添加如下 SSL 相关的设置

      # SSL
        ssl_session_timeout    1d;
        ssl_session_cache      shared:SSL:10m;
        ssl_session_tickets    off;

        # Diffie-Hellman parameter for DHE ciphersuites
        #ssl_dhparam            /etc/nginx/dhparam.pem;

        # Mozilla Intermediate configuration
        ssl_protocols          TLSv1.2 TLSv1.3;
        ssl_ciphers            ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:
ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA
-AES256-GCM-SHA384;

        # OCSP Stapling
        ssl_stapling           on;
        ssl_stapling_verify    on;
        resolver               1.1.1.1 1.0.0.1 8.8.8.8 8.8.4.4 208.67.222.222 208.67.220.220 valid=60s;
        resolver_timeout       2s;

这些设置还是在 http 中, 并不是 server 中, 这些配置来自 https://www.digitalocean.com/community/tools/nginx?global.app.lang=zhCN 生成的配置,应该是没问题的。

然后修改自己网站的 nginx 配置, lnmp 中是在 vhost 目录下面, 我的配置如下

server {
    listen 80;
    server_name liangz.org www.liangz.org;  # 自行修改成你的域名
    return 301 https://$server_name$request_uri;
}

server {
    listen              443 ssl http2;
    server_name         medias.liangz.org;

    # SSL
    ssl_certificate     /usr/local/nginx/conf/vhost/cert/fullchain.cer;
    ssl_certificate_key /usr/local/nginx/conf/vhost/cert/liangz.org.key;
    return              301 https://www.liangz.org$request_uri;
}

server
    {
        listen 443 ssl http2;
        ssl_certificate /usr/local/nginx/conf/vhost/cert/fullchain.cer;
        ssl_certificate_key /usr/local/nginx/conf/vhost/cert/liangz.org.key;
        server_name www.liangz.org liangz.org;
        index index.html index.htm index.php default.html default.htm default.php;
        root  /home/wwwroot/www.liangz.org;

        include rewrite/wordpress.conf;
        #error_page   404   /404.html;

        # Deny access to PHP files in specific directory
        #location ~ /(wp-content|uploads|wp-includes|images)/.*\.php$ { deny all; }

        include enable-php.conf;

        location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
        {
            expires      30d;
        }

        location ~ .*\.(js|css)?$
        {
            expires      12h;
        }

        location ~ /.well-known {
            allow all;
        }

        location ~ /\.
        {
            deny all;
        }

        access_log /home/wwwlogs/www.liangz.org.access.log;
    }

最上面的那个 server 配置, 是用来将 http 请求自动跳转到 https; 第二个是我自己历史遗留问题; 最后一个才是网站使用的。

nginx 配置修改完毕后,别忘了重启 Nginx   service nginx restart

修改 CloudFlare

Nginx 重启之后还是不行的, 需要确保 CloudFlare 中的 SSL 不能是 None, 否则会出现 too many redirect 导致网站无法正常访问。

我这边用的证书是合法的, 因此可以选择最后一个。

结语

至此, 网站已经上了 SSL, 访问起来也有一个锁的标志了。 算是大功告成

如有错误,敬请指出,感谢指正!       — 2022-11-27 15:04:10

 

赞(0) 打赏
转载请注明:飘零博客 » WordPress 启用 SSL 证书并修复无法登陆后台
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

欢迎光临