Caddy是一个使用 Go语言写的 HTTP Server,开发时间并不长,在性能上或许比不上 Nginx,但是在 上手难度/配置难度 上面简单的不行不行的。
并且 Caddy支持 自动签订Let’s Encrypt SSL证书,什么都不需要你管,只需要提供一个邮箱,剩下的他会自己申请、配置和续约 SSL证书!
注意:如果你要镜像谷歌网站,那么不要用 www.google.com 会被跳转到谷歌的其他子域名,镜像需要用如香港: www.google.com.hk 这样的域名!
部署 Caddy
Caddy 是 Go语言编译好的二进制程序,所以只有一个 Caddy 文件(还需要生成一个配置文件),但是为了管理方便,所以我做了个一键脚本。
wget -N --no-check-certificate https://raw.githubusercontent.com/ToyoDAdoubiBackup/doubi/master/caddy_install.sh && chmod +x caddy_install.sh && bash caddy_install.sh install http.filemanager
安装Caddy成功后,我们就继续下面的步骤。
配置文件
Caddy的特点之一就是,配置文件非常的简单,继续下面看就知道了。
服务器IP 反向代理
下面是一个,用你服务器的IP 来反向代理一个 http 协议的网站 http://xxx.xx
点击展开 查看更多
# 以下全部内容是一个整体,是一个命令,全部复制粘贴到SSH软件中并一起执行!
echo ":80 {
gzip
proxy / http://xxx.xx
}" > /usr/local/caddy/Caddyfile
服务器IP 也可以反向代理 HTTPS 协议的网站,但是需要自签SSL证书,现在的浏览器一般都不会认 自签的SSL证书,所以不建议这么做。
域名 反向代理 HTTP
下面是一个,用你的域名 来反向代理一个 http 协议的网站 http://xxx.xx
点击展开 查看更多
以下所有示例域名为 toyoo.pw
,请注意替换为 自己的域名 !
# 以下全部内容是一个整体,是一个命令,全部复制粘贴到SSH软件中并一起执行!
echo "http://toyoo.pw {
gzip
proxy / http://xxx.xx
}" > /usr/local/caddy/Caddyfile
如果你需要反向代理 HTTPS 协议的网站,比如 https://www.google.com.hk
,那么继续看下面步骤。
域名 反向代理 HTTPS
如果你有 SSL证书和密匙的话,把 SSL证书(xxx.crt)和密匙(xxx.key)文件放到 /root
文件夹下(也可以是其他文件夹,自己改下面代码),然后这样做:
点击展开 查看更多
# 以下全部内容是一个整体,是一个命令,全部复制粘贴到SSH软件中并一起执行!
echo "toyoo.pw {
gzip
tls /root/xxx.crt /root/xxx.key
proxy / https://www.google.com.hk
}" > /usr/local/caddy/Caddyfile
如果你没有 SSL证书和密匙,那么你可以这样做:
下面的 [email protected]
改成你的邮箱,同时需要注意的是,申请 SSL证书前,请务必提前解析好域名记录(解析后最好等一会,以全球生效),否则 Caddy会申请并配置失败!
# 以下全部内容是一个整体,是一个命令,全部复制粘贴到SSH软件中并一起执行!
echo "toyoo.pw {
gzip
tls [email protected]
proxy / https://www.google.com.hk
}" > /usr/local/caddy/Caddyfile
如果一切正常,那么Caddy会自动帮你申请 SSL证书并配置好,而且会定时续约SSL证书 和 强制 http重定向至https !
Caddy自动申请SSL证书位置:/.caddy/acme/acme-v02.api.letsencrypt.org/sites/xxx.xxx(域名)/
上面前两段 HTTP 示例中,因为谷歌搜索网站强制 HTTPS,所以无法 HTTP 反向代理,特用 http://xxx.xx 代替。
需要注意的是,因为墙会检测关键词,所以请务必使用 HTTPS协议,不要使用 HTTP协议,否则很快就会被墙!
注意:如果你要镜像谷歌网站,那么不要用 www.google.com 会被跳转到谷歌的其他子域名,镜像需要用如香港: www.google.com.hk 这样的域名!
HTTP重定向为HTTPS(仅手动指定SSL证书和密匙)
当你是手动指定 SSL证书和密匙 来配置的话,Caddy只会监听 443端口(https),并不会自动设置 80端口(http)的重定向(如果是Caddy自动申请的SSL证书,那么就自动做好了),如果要做重定向的话,可以这样做:
点击展开 查看更多
下面的示例代码中,是把 http://toyoo.pw、http://233.toyoo.pw、https://666.toyoo.pw
三个域名都重定向到了 https://toyoo.pw
。
# 以下全部内容是一个整体,是一个命令,全部复制粘贴到SSH软件中并一起执行!
echo "http://toyoo.pw ,http://233.toyoo.pw ,https://666.toyoo.pw {
redir https://toyoo.pw{url}
}
toyoo.pw {
gzip
tls /root/xxx.crt /root/xxx.key
proxy / https://www.google.com.hk
}" > /usr/local/caddy/Caddyfile
修改完 Caddy的配置文件后,重启 Caddy即可。
/etc/init.d/caddy restart
使用说明
启动:/etc/init.d/caddy start
停止:/etc/init.d/caddy stop
重启:/etc/init.d/caddy restart
查看状态:/etc/init.d/caddy status
查看Caddy启动日志: tail -f /tmp/caddy.log
Caddy配置文件位置:/usr/local/caddy/Caddyfile
Caddy自动申请SSL证书位置:/.caddy/acme/acme-v01.api.letsencrypt.org/sites/xxx.xxx(域名)/
卸载 Caddy:
执行以下代码后,会问你是否确定要卸载 Caddy,输入 y
即可。
注意:卸载 Caddy 会把Caddy的所有虚拟主机文件夹和配置文件删除,并且不可恢复!
wget -N --no-check-certificate https://raw.githubusercontent.com/ToyoDAdoubiBackup/doubi/master/caddy_install.sh && chmod +x caddy_install.sh && bash caddy_install.sh uninstall
其他说明
单网站/多网站
当然,上面的几个示例,实际上都算是单网站。
点击展开 查看更多
最后一句代码都是 }" > /usr/local/caddy/Caddyfile
,也就是清空了 Caddy配置文件,然后再写入了配置信息。
如果你要设置多个网站,那么把最后一句代码改成 }" >> /usr/local/caddy/Caddyfile
即可,注意是把 >
改成 >>
,这样就不会清空原来的配置信息了,而是会把要添加的配置信息加到配置文件最后!
网页加密
什么?担心自己做的镜像不小心爆露被滥用?没事,设置一下用户名和密码即可,只需要在上面的示例中加入这行代码:
点击展开 查看更多
basicauth / user passwd
user
指的是 用户名,passwd
指的是 用户名密码,设置这个后,访问网页就需要输入用户名和密码来验证了!
注意:用户名和密码不支持特殊符号,必须使用 数字和字母 [a-z][A-z][0-6]
修改配置文件后,记得重启 Caddy !
配置示例:
# 以下全部内容是一个整体,是一个命令,全部复制粘贴到SSH软件中并一起执行!
echo "https://toyoo.pw {
gzip
basicauth / user passwd
tls /root/xxx.crt /root/xxx.key
proxy / https://www.google.com.hk
}" > /usr/local/caddy/Caddyfile
记录日志
如果你想要记录网站访问日志,那么只需要在上面的示例中加入这行代码:
点击展开 查看更多
log /tmp/caddy_1.log
修改配置文件后,记得重启 Caddy !
配置示例:
# 以下全部内容是一个整体,是一个命令,全部复制粘贴到SSH软件中并一起执行!
echo "https://toyoo.pw {
gzip
log /tmp/caddy_1.log
tls /root/xxx.crt /root/xxx.key
proxy / https://www.google.com.hk
}" > /usr/local/caddy/Caddyfile
日志文件的位置和名字可以自己改,放到 /tmp
文件夹的话,每次重启都会自动清空日志的。
启动显示成功,但是实际未运行
因为 服务脚本判断的问题,只判断了nohub是否运行 Caddy成功,但没有判断 Caddy 是否保持正常运行。
你可以理解为,nohub成功启动了 Caddy,但是 Caddy因为配置文件错误等原因,启动后又退出了。
所以这种情况下,你应该去查看启动日志:
tail -f /tmp/caddy.log
Caddy启动失败,打开 http://ip 显示的是 It works !
一些系统会自带 apache2 ,而 apache2 会占用80端口,导致Caddy无法绑定端口,所以只要关掉就好了。
点击展开 查看更多
netstat -lntp
# 我们可以通过这个命令查看是不是被其他软件占用了 80 端口。
不过 apache2 会默认开机自启动,如果不需要可以关闭自启动或者卸载 apache2 。
停止 Apache2
/etc/init.d/apache2 stop
# 尝试使用上面这个关闭,如果没效果或者提示什么错误无法关闭,那就用下面这个强行关闭进程。
kill -9 $(ps -ef|grep "apache2"|grep -v "grep"|awk '{print $2}')
取消开机自启动
# 以下代码仅限 Debian/Ubuntu 系统 #
update-rc.d -f apache2 remove
卸载 Apache2
# 以下代码仅限 Debian/Ubuntu 系统 #
apt-get remove --purge apache2
关闭 Apache2后,就可以尝试启动 Caddy ,并试试能不能打开网页。
/etc/init.d/caddy start
有什么问题请在下面留言评论。
转载请超链接注明:月下博客 » 利用 Caddy 非常简单的部署 反向代理/镜像(支持自签SSL证书)
责任声明:本站一切资源仅用作交流学习,请勿用作商业或违法行为!如造成任何后果,本站概不负责!