Caddy最容易上⼿的WebServer Caddy最容易上⼿的Web Server-⾃动化HTTPS⼀分钟部署⽹站\⽹盘
2018年01⽉27⽇ ⁄ 评论数 1 ⁄ 被围观 455 个+
Caddy服务器(或者Caddy Web)是⼀个开源的使⽤ GoLang 编写,⽀持 HTTP/2 的 Web 服务端。它使⽤ GoLang 标准库提供 HTTP 功能, Caddy ⼀个显著的特性是默认启⽤ HTTPS,它是第⼀个⽆需额外配置即可提供 HTTPS 特性的 Web 服务器。
Caddy和我们常⽤的Nginx、Apache等Web服务器相⽐,最⼤的特点就是部署简单,它拥有基本的apache或者nginx有的web server模块,同时还有⼀些很有特⾊的功能,⽐如: HTTP/2、Automatic HTTPS、Multi-core、Websockets、Markdown、IPv6等等。
Caddy可以⽤于静态和动态⽹站,当然不少⼈看到了Caddy易于安装部署的特点,将Caddy与⽹盘、下载等各类应⽤整合,这样既发挥了Caddy部署配置简单的优势,同时⼜可以最⼤限度地节省服务器资源,专注于第三⽅应⽤的开发管理。
本⽂就来分享⼀下Caddy服务器的安装与使⽤,更多的⽹站建站⼯具和脚本,还有:
三款优秀的在线⽂件管理器(⽬录列表)对⽐-Directory Lister、h5ai和FileRun
Smokeping安装与配置-免费开源⽹络性能监控⼯具可视化主/从部署
OneinStack⼀键安装脚本-轻松部署Let’s Encrypt证书配置Https站点
⼀、Caddy安装⽅法
Caddy官⽹:
⽹站:caddyserver/
下载:caddyserver/download
Github:github/mholt/caddy
Caddy安装与部署只有三步。⾸先,根据你的服务器操作系统选择Caddy版本并下载(Linux和Windows都⽀持)。
Caddy提供了丰富的插件可供选择,例如:
http.cache,http.filemanager,http.ipfilter,http.ratelimit等。
其次,将Caddy包下载到VPS主机上并解压,例如我下载的是:
caddy_v0.10.10_linux_amd64_custom_,将压缩包解压到你的⽹站根⽬录下载,即index.html放置的地⽅。
最后,在 caddy 解压出来的⽬录(⽹站根⽬录)执⾏ ./caddy ,这时访问 :
推荐caddy官⽅⼀键安装脚本。
脚本如下:
curl getcaddy | bash -s personal
或者
wget -qO- getcaddy | bash -s personal
如果想要安装插件,请使⽤以下命令:
curl getcaddy | bash -s personal http.git,dns
使⽤ which caddy,可以看到 caddy 已经被安装到了 /usr/local/bin/caddy 。进⼊到⽹站根⽬录,然后执⾏命令:caddy,再打开你的IP:2015,你就可以看到Web页⾯了。
⼆、Caddy配置⽅法
2.1 创建配置⽂件
⾸先创建配置⽂件放到 /etc/caddy ⾥。
sudo mkdir /etc/caddy
sudo touch /etc/caddy/Caddyfile
sudo chown -R root:www-data /etc/caddy
除了配置⽂件,caddy 会⾃动⽣成 ssl 证书,需⼀个⽂件放置 ssl 证书。
sudo mkdir /etc/ssl/caddy
sudo chown -R www-data:root /etc/ssl/caddy
sudo chmod 0770 /etc/ssl/caddy
因为 ssl ⽂件夹⾥会放置私钥,所以权限设置成 770 禁⽌其他⽤户访问。最后,创建⼀下放置⽹站⽂件的⽬录,如果已经有了,就不需要创建了。
sudo mkdir /var/www
sudo chown www-data:www-data /var/www
2.2 设置开机启动
创建好这些⽂件和⽬录了之后,我们需要把 caddy 配置成⼀个服务,这样就可以开机⾃动运⾏,并且管理起来也⽅便。因为⽬前⼤多数发⾏版都使⽤ systemd 了,所以这⾥只讲⼀下如何配置 systemd。
sudo curl -s raw.githubusercontent/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 状态
2.3 编辑Caddyfile。
可以直接 vim /etc/caddy/Caddyfile 来修改 Caddyfile,也可以再⾃⼰电脑上改好然后上传到服务器上。如果修改了 Caddyfile 发现没有⽣效,是需要执⾏⼀下 sudo systemctl restart
caddy.service 来重启 caddy 。
2.4 Caddyfile 的格式
Caddfile的格式还是⽐较简单的,⾸先第⼀⾏必须是⽹站的地址,例如:
localhost:8080
或
wzfou
地址可以带⼀个端⼝号,那么 caddy 只会在这个端⼝上开启 http 服务,⽽不会开启 https,如果不写端⼝号的话,caddy 会默认绑定 80 和 443 端⼝,同时启动 http 和 https 服务。地址后⾯可以再跟⼀⼤堆指令(directive)。Caddyfile 的基本格式就是这样,由⼀个⽹站地址和指令组
成。
2.5 指令
指令的作⽤是为⽹站开启某些功能。指令的格式有三种,先说⼀下最简单的不带参数的指令⽐如:
wzfou
gzip
第⼆⾏的 gzip 就是⼀个指令,它表⽰打开 gzip 压缩功能,这样⽹站在传输⽹页是可以降低流量。第⼆种指令的格式是带简单参数的指令:
wzfou
gzip
log /var/log/caddy/access.log
*******************
root /var/www/
第三⾏,log 指令会为⽹站开启 log 功能,log 指令后的参数告诉 caddy log ⽂件存放的位置。第四⾏的 tls 指令告诉 caddy 为⽹站开启 https 并⾃动申请证书,后⾯的 email 参数是告知 CA 申请⼈的邮箱。(caddy 会默认使⽤ let’s encrypt 申请证书并续约,很⽅便吧)
另外,简单参数也可能不只⼀个,⽐如 redir 指令:
wzfou
gzip
log /var/log/caddy/access.log
tls /etc/ssl/cert.pem /etc/ssl/key.pem
root /var/www/
redir / wzfou/archive/{uri} 301
上⾯的 redir 指令带了三个参数,意思是把所有的请求使⽤ 301 重定向,这个指令在给⽹站换域名的时候很有⽤。另外 tls 指令变了,不单单传 email⼀个参数,⽽是分别传了证书和私钥的路径,这样的话 caddy 就不会去⾃动申请证书,⽽是使⽤路径给出的证书了。
在这个例⼦⾥还使⽤了 {uri} 这样的占位符(placeholder),详细的列表可以在这⾥查询到:caddyserver/docs/placeholders。最后⼀种指令是带复杂参数的,这种指令包含可能很多参数,所以需要⽤⼀对花括号包起来,⽐如 header 指令:
wzfou
gzip
log /var/log/caddy/access.log
*******************
root /var/www/
header /api {
Access-Control-Allow-Origin *
Access-Control-Allow-Methods “GET, POST, OPTIONS”
-Server
}
fastcgi / 127.0.0.1:9000 php {nginx ssl证书配置
index index.php
}
rewrite {
to {path} {path}/ /index.php?{query}
}
6-10 ⾏的 header 指令代表为所有的 /api/xxx 的请求加上 Access-Control-Allow-Origin 和Access-Control-Allow-Methods 这两个 header,从⽽能⽀持 javascript 跨域访问,第 9 ⾏代表删除 Server header,防⽌别⼈看到服务器类型。
11-13 ⾏使⽤了 fastcgi 指令,代表把请求通过 fastcgi 传给 php,ruby 等后端程序。
14-15 ⾏,使⽤了 rewrite 指令,这个指令的作⽤是服务器内部重定向在下⾯的参数 to 后⾯,⼜跟了
三个参数,这个功能上有点类似 nginx 的 try_files 。告诉 caddy 需要先查看⽹址根⽬录/var/www ⾥有没有 {path} 对应的⽂件,如果没有再查看有没有 {path} 对应的⽬录,如果都没有,则转发给 index.php ⼊⼝⽂件。这个功能⼀般会⽤在 PHP 的 MVC 框架上使⽤。
2.6 多域名⽹站
上⾯说的都是单个域名的⽹址,那么如果在同⼀个服务器上部署多个域名的⽹站呢?很简单,只需要在域名后⾯跟⼀个花括号扩起来就可以了,如下:
wzfou {
gzip
log /var/log/caddy/wzfou_com.log
*******************
root /var/www/
header /api {
Access-Control-Allow-Origin *
Access-Control-Allow-Methods “GET, POST, OPTIONS”
-Server
}
fastcgi / 127.0.0.1:9000 php {
index index.php
}
rewrite {
to {path} {path}/ /index.php?{query}
}
}
wzfou{
*******************
log /var/log/caddy/wzfou_com.log
redir / wzfou/{uri} 301
}
基本的 caddy 配置就这些,更多的内容需要查阅官⽹⽂档:
caddyserver/docs。
三、Caddy⼀键建站脚本
看了上⾯的Caddy的配置,有朋友可能觉得有没有⼀键建站的Caddy脚本呢?
3.1 Caddy-Web-Server-Installer
项⽬地址:github/sayem314/Caddy-Web-Server-Installer
系统要求:Ubuntu 14.x、15.x、16.x,Debian 7.x、8.x、9.x,CentOS 6.8、7.2。
运⾏以下命令:wget git.io/vra5C -O – -o /dev/null|bash
然后使⽤下列命令进⾏操作:
caddy start #开启Caddy Web Server
caddy stop #停⽌Caddy Web Server
caddy reload #重载Caddy Web Server
caddy restart #重启Caddy Web Server
caddy status #查看Caddy Web Server状态
caddy install #安装Caddy Web Server
caddy edit #编辑配置⽂件Caddyfile
caddy service #使Caddy Web Server成为⼀项服务(upstart/systemd)
caddy update #升级Caddy Web Server
caddy delete #卸载Caddy and data
caddy about #关于Caddy Web Server
caddy version #检测脚本/Caddy/PHP5-fpm版本信息
安装插件命令:
caddy install http.cache,http.filemanager,http.ipfilter,http.ratelimit
安装caddy的时候会要求你输⼊域名,邮箱(帮你⾃动签发ssl),然后使⽤命令启动caddy即可!
虚拟主机⽂件夹:/var/caddywww
配置⽂件夹:/etc/Caddyfile
这是安装成功的界⾯:
安装成功后重启Caddy服务。
最后,打开你的域名,你就可成功看到Web页⾯了。
执⾏:caddy edit就可以编辑配置⽂件了,默认的配置如下:
这是caddy安装的PHP。
3.2 Caddy FileManager安装脚本
Caddy 有⼀个扩展FileManager,你可以单独安装,这⾥介绍⼀个Caddy FileManager快速部署的脚本,功能没有上⾯的Caddy-Web-Server-Installer丰富,⽐较适合利⽤Caddy FileManager 搭建⽹盘。
运⾏以下命令:
wget -N –no-check-certificate
raw.githubusercontent/ToyoDAdoubi/doubi/master/caddy_install.sh && chmod +x caddy_install.sh && bash caddy_install.sh install http.filemanager
#备⽤地址
wget -N –no-check-certificate ats/usr/shell/Caddy/caddy_install.sh && chmod
+x caddy_install.sh && bash caddy_install.sh install http.filemanager
安装成功后,继续新建⼀个⽤于使⽤的虚拟主机⽂件夹,例如file(可以⾃⼰改):
mkdir /usr/local/caddy/www && mkdir /usr/local/caddy/www/file
1、IP访问
绑定虚拟主机为IP(即通过IP访问),HTTP协议(80端⼝)。
# 以下全部内容是⼀个整体,是⼀个命令,全部复制粘贴⼀起执⾏!
echo “:80 {
root /usr/local/caddy/www/file
timeouts none
gzip
filemanager / /usr/local/caddy/www/file {
database /usr/local/caddy/filemanager.db
}
}” > /usr/local/caddy/Caddyfile
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论