Skip to content

使用Caddy作为反向代理的坑

Caddy的配置

shell
# 主域名 + www,自动 HTTPS
codebox.icu, www.codebox.icu {
    root * /var/www/star-trail/dist
    file_server
}
# IP访问(比如调试用),不建议放线上
www.codebox.icu:8888 {
    root * /var/www/consultant/dist
    file_server browse
    handle_path /api/* {
       reverse_proxy localhost:8080
    }
}
# 80端口自动跳转到 HTTPS(建议)
http://1.94.147.176, https://1.94.147.176 {
    redir https://codebox.icu{uri}
}                                                  49,26         Bot

项目运维命令

下载jdk

shell
sudo dnf install java-17-openjdk-devel -y

输入数字选择jdk版本

shell
 alternatives --config java

中断进程

shell
ps -ef | grep java | grep consultant | grep -v grep | awk '{print $2}'

后台启动

shell
nohup java -Xmx256mb -Xms256mb -XX:+UseG1GC -jar /var/www/consultant/consultant-0.0.1-SNAPSHOT > /dev/null 2>&1 &
java
nohup java -Xmx160m -Xms160m -XX:+UseG1GC -jar /var/www/consultant/consultant-0.0.1-SNAPSHOT.jar > /var/log/consultant.log 2>&1 &

Caddy排错

shell
systemctl status caddy -l
shell
journalctl -xeu caddy

排查端口报错

shell
sudo lsof -i:80
sudo lsof -i:443
sudo lsof -i:8081
shell
ps -ef | grep 'xxxx'
shell
kill -9 {pid}

启动Caddy


🛠️ Step 1:给静态目录正确权限

假设你页面放在 /var/www/consultant/dist,那么执行:

bash
sudo chown -R caddy:caddy /var/www/consultant
sudo chmod -R 755 /var/www/consultant

或者更宽松一点测试用:

bash
sudo chmod -R o+rx /var/www/consultant

确保 caddy 用户可以:

  • 进入 /var/www/consultant/dist 目录(x 权限)
  • 读取里面的文件(r 权限)

🔍 Step 2:验证 index.html 存在并可读

bash
ls -l /var/www/consultant/dist/index.html

应该看到类似:

-rw-r--r-- 1 caddy caddy 1024 Jul 5 20:00 index.html

🔁 Step 3:重启 Caddy

bash
sudo systemctl restart caddy

然后访问:

bash
http://1.94.147.176:8081

应该就能正常打开页面了🎉


❗如果想测试是否真的是权限问题,可以这么试:

临时用 root 手动跑:

bash
sudo caddy run --config /etc/caddy/Caddyfile --adapter caddyfile

如果这样访问就没 403,说明百分百是 systemd 启动时用的 caddy 用户访问不到。


🧠 结论一句话:

403 不是你配置错,而是 Caddy 默认用的是低权限用户 caddy,你没给它目录访问权,它就只能给你一个 “别看了,没权限” 的 403。

搞定这个权限问题,页面就能正常通过 IP + 端口访问了 ✅

所有文章版权皆归博主所有,仅供学习参考。