为博客配置 Caddy 和强制走 HTTPs

gomkiri 发布于 2025-11-09 81 次阅读


AI 摘要

博客备案后如何配置Caddy实现HTTPS强制跳转?三行代码完成自动证书管理,解决CSS/JS加载问题。详细步骤涵盖权限配置、WordPress参数修改及数据库迁移,助你快速部署安全站点。

今天我的网站备案终于通过了,可以通过域名去访问咱们的网站了,但是在这个过程中还是遇到了不少问题,这里打算只是记录一下整个程序,以便下次做迁移的时候可以省事一些。

先对整个过程做一个梳理:

  1. 在域名管理台添加域名解析,将blog.gomkiri.top解析到 A 类型的 ip 地址中去。
  2. 在服务器下载 Caddy
  3. 编写 caddyfile
  4. 强制开始 SSL
  5. 强制跳转 https

下载 Caddy

我这里是直接使用了 Caddy 官方提供的下载方式,没有使用 Docker ,如果使用的是 root 用户,可以省略sudo

sudo apt install -y debian-keyring debian-archive-keyring apt-transport-https curl
curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/gpg.key' | sudo gpg --dearmor -o /usr/share/keyrings/caddy-stable-archive-keyring.gpg
curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/debian.deb.txt' | sudo tee /etc/apt/sources.list.d/caddy-stable.list
chmod o+r /usr/share/keyrings/caddy-stable-archive-keyring.gpg
chmod o+r /etc/apt/sources.list.d/caddy-stable.list
sudo apt update
sudo apt install caddy
Bash

另外我这里还多做了一步,给 Caddy 了更大的权限,在文件:/etc/systemd/system/multi-user.target.wants/caddy.service中将 User 和 Group 从 caddy 替换为了 root。

-- 修改前
User=caddy
Group=caddy
-- 修改后
User=root
Group=root
Plaintext

修改 Caddyfile

目前我们也没有配 CDN 什么的,所以 caddyfile 的内容非常简单,文件位置:/etc/caddy/Caddyfile

blog.gomkiri.top {
        reverse_proxy localhost:3307
}
Plaintext

没错,只需要这三行就能满足我们的全部需求,包括自动证书管理和域名反向代理!

开启 SSL 和强制跳转 https

本来以为到这里就结束了,但是实际去访问博客却发现,要么不走 http,要么所有的 css、js 都无法正常加载,搜索一番后发现还需要加入下面两个东西:

修改 ~wordpress/wp-config.php,加入下面的代码:

$_SERVER['HTTPS'] = 'on';
define('FORCE_SSL_ADMIN', true);
define('FORCE_SSL_LOGIN', true);
// 下面这两行可以在这里写,也可以直接改数据库,或者是修改管理页面的两个访问url
define('WP_HOME', 'https://blog.gomkiri.top/');
define('WP_SITEURL', 'https://blog.gomkiri.top/');
PHP

如何是想直接通过数据库的方式改,那就是将 wp_options 表中的 option_namehomesiteurl 的两行的 option_value 列改为htts访问地址

然后在~wordpress/wp-includes/fuctions.php,找到require ABSPATH . WPINC . '/option.php'; 后在它的下方加入

add_filter('script_loader_src', 'agnostic_script_loader_src', 20,2); function agnostic_script_loader_src($src, $handle) { return preg_replace('/^(http|https):/', '', $src); } 
add_filter('style_loader_src', 'agnostic_style_loader_src', 20,2); function agnostic_style_loader_src($src, $handle) { return preg_replace('/^(http|https):/', '', $src); }
PHP

完成之后重启WordPress :docker restart wordperss

修改数据库数据

将数据库中存放的 url 全部从 IP 加端口替换为我们的域名即可,应该大部分数据都在wp_posts 表中。