前言
为了部署一个单页面应用,需要符合以下条件
- 路径为/api时,转发到后台应用
- 路径为文件时,返回文件,并且设定cache
- 路径为目录时,都转发到index.html
配置
为了实现以上目标,在caddyfile中先定义常用方法
共同方法
1 | # 输出日志到文件 |
单页面应用配置
1 | example.com { |
如果调用api时,后台想去掉繁琐的/api前缀,可以使用strip_prefix1
2
3
4handle /api/* {
uri strip_prefix /api
reverse_proxy backend-api:80
}
或者干脆使用handle_path,它默认会去掉前缀1
2
3handle_path /api/* {
reverse_proxy backend-api:80
}
单应用配置(管理端,用户端分离)
1 | example.com { |
单应用配置(域名分离)
1 | api.example.com { |
PHP应用配置
需要启动一个fpm伺服程序,然后通过php-fpm.sock进行通信1
2
3
4
5
6
7
8
9
10!/bin/sh
docker rm -f php
docker run -d --restart always \
--name php \
--network my-nw \
-v /root/workspace/php:/var/php \
-v phpsocket:/var/run \
php:fpm
Caddy启动时需要mount同样的东西1
2
3
4
5
6
7
8
9
10
11
12
13
14
15!/bin/sh
docker rm -f caddy2
docker run -d --restart always \
--name caddy2 \
--network my-nw \
-v /root/workspace/php:/var/php \
-v phpsocket:/var/run \
-v "$PWD"/log:/var/log \
-v "$PWD"/config:/etc/caddy \
-v caddy_data:/data \
-v caddy_config:/config \
-p 80:80 -p 443:443 \
caddy
这样配置就可以了1
2
3
4
5example.com {
import LOG "/var/log/example.log"
import TLS
import PHP /var/php/example/public
}
其他
在启动caddy的时候,输出日志里可能会发现有以下警告消息1
{"level":"info","ts":1690268568.537111,"msg":"failed to sufficiently increase receive buffer size (was: 208 kiB, wanted: 2048 kiB, got: 416 kiB). See https://github.com/quic-go/quic-go/wiki/UDP-Receive-Buffer-Size for details."}
这是由于系统默认的设置太小的缘故,加大后,重启caddy即可1
sysctl -w net.core.rmem_max=2500000