我现在主力VPS有两台,分别是新加坡和香港的阿里云,其中香港那台装的是LNMP环境,跑着自己的这堆老字号网站(比如这个博客),而新加坡那台主要安装的Docker和NodeJS环境,如果还用Nginx反代的话就太麻烦了,所以我想到了Caddy。
上手两天后,发现它真的非常简单方便,如果仅仅只需要反代或者静态文件托管更是简单的要命,比起Nginx的配置来讲可以说精简了大部分。
在这里我做一个自己的简单总结,方便参考。
安装
安装很简单,Caddy官方有自己的一键安装包,可以直接在 [官网] 定制自己需要的插件。 我自己的安装如下:
1
|
curl https://getcaddy.com | bash -s personal docker,http.cache,http.cgi,http.filemanager,http.forwardproxy,http.git,http.jwt,http.login,http.minify,http.nobots
|
安装完成后,定义一下配置文件目录、网站目录和证书生成目录。
配置文件目录
1
2
3
|
sudo mkdir /etc/caddy
sudo touch /etc/caddy/Caddyfile
sudo chown -R root:www-data /etc/caddy
|
SSL证书目录
定义为 /etc/ssl/caddy 并做好权限设置(770)
1
2
3
|
sudo mkdir /etc/ssl/caddy
sudo chown -R www-data:root /etc/ssl/caddy
sudo chmod 0770 /etc/ssl/caddy
|
网站目录
定义到 /var/www,用户为www-data
1
2
|
sudo mkdir /var/www
sudo chown www-data:www-data /var/www
|
创建服务
最后,创建一个服务,这样就可以很方便地管理并实现开机启动。(使用systemd)
1
2
3
4
|
sudo curl -s https://raw.githubusercontent.com/mholt/caddy/master/dist/init/linux-systemd/caddy.service -o /etc/systemd/system/caddy.service # 从 github 下载 systemd 配置文件
sudo systemctl daemon-reload # 重新加载 systemd 配置
sudo systemctl enable caddy.service # 设置 caddy 服务自启动
sudo systemctl status caddy.service # 查看 caddy 状态
|
安装PHP
为了方便,当然是直接用apt安装了(我用的Ubuntu 18.04 LTS)。
1
|
sudo apt-get -y install php-fpm php-cli php-json php-curl php-imap php-gd php-xml php-zip php-intl php-imagick php-mbstring libsodium-dev
|
再修改一下配置文件 /etc/php/7.2/fpm/php.ini
1
2
3
|
memory_limit => memory_limit = 512M
;cgi.fix_pathinfo=1 => cgi.fix_pathinfo=1 upload_max_filesize => upload_max_filesize = 2000M
post_max_size => post_max_size = 2000M
|
以及 /etc/php/7.2/fpm/pool.d/www.conf (由于我9000端口被占用,所以用的9009)
1
|
listen = /run/php/php7.2-fpm.sock => listen = 127.0.0.1:9009
|
编写配置
Caddy的配置文件为 Caddyfile,详细的配置可以看 [官网文档]
我这里一个Caddyfile里面记录了我这个VPS的所有网站,多个host只需要用花括号 “{ }” 括起来即可。
不过总体来讲,Caddy的逻辑大概都是一个套路:第一行是域名,不填端口或者http(s)协议的话默认开启80和443端口并自动签发证书。接下来就可以定义gzip、网站根目录和rewrite规则等等。下面详细说明。
普通反代
我在机器上有跑Docker和NodeJS,为了让这些Web应用绑定上域名,就会涉及到反向代理。
使用Caddy完成普通反代的语句非常简单,可以参考下面的例子,比Nginx不知道简单到哪里去了。
1
2
3
4
5
|
example.com { #域名
gzip #开启GZIP
tls your@email.com #SSL证书签发邮箱
proxy / localhost:端口号 #反代地址
}
|
静态文件
静态HTML文件托管也很简单,只要定义网站根目录和域名。
1
2
3
4
5
|
example.com { #域名
gzip #开启GZIP
tls your@email.com #SSL签发邮箱
root /var/www/YOUR_WEBROOT #网站根目录
}
|
使用PHP(以OneIndex为例)
如果要使用PHP,那就要加上fastcgi了。Rewrite部分就是伪静态规则,这里写的是OneIndex的规则。
1
2
3
4
5
6
7
8
9
10
11
12
|
#OD
a.b.com {
gzip
tls a@a.com
root /var/www/WEBROOT
fastcgi / 127.0.0.1:9009 php { #刚刚安装的时候监听的是9009端口
env PATH /bin
}
rewrite { #OneIndex的伪静态规则
to {path} {path}/ /index.php?{query}
}
}
|
使用JWT做简单的登陆验证
除了basic_auth之外,Caddy还可以使用JWT进行简单的加密和登陆验证,自带登陆界面,比较好用。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
b.com {
tls a@abc.com
gzip
root /var/www/WEBROOT
jwt {
path /example #加密目录
redirect /login #跳转到login界面
allow sub user #允许的用户名
}
login {
success_url /welcome #验证成功后跳转的位置
simple user=pass #格式:用户名=密码
}
}
|