情景1 : 单一域名实现域名二级目录分流 【反向代理】
app.abc.com/1 分流至 192.168.0.100:8080
app.abc.com/2 分流至 192.168.0.200:9090
利用/1 /2 以目录形式反向代理分流不同的服务,当然也可以改为本地服务或本地目录
配置如下:
http://app.abc.com {
log {
output file /var/log/caddy/caddy.log {
roll_size 50mb
roll_keep 5
roll_keep_for 80h
}
}
reverse_proxy /1* 192.168.0.100:8080 {
header_up Host app.abc.com
header_up X-Real-IP {http.request.remote.host}
header_up X-Forwarded-For {http.request.remote.host}
header_up X-Forwarded-Port {http.request.port}
header_up X-Forwarded-Proto {http.request.scheme}
}
reverse_proxy /2* 192.168.0.200:9090 {
header_up Host app.abc.com
header_up X-Real-IP {http.request.remote.host}
header_up X-Forwarded-For {http.request.remote.host}
header_up X-Forwarded-Port {http.request.port}
header_up X-Forwarded-Proto {http.request.scheme}
}
}
反向代理相关配置说明:
代理所有转发请求
abc.com
reverse_proxy 192.168.0.100:8080
代理/test/路径的请求到指定地址
abc.com
root * /var/www <- 根目录在本地/var/www,可以改变或转发
file_server
reverse_proxy /test/* 192.168.0.100:8080 <- 当有abc.com/bin的请求时转发
更多配置实例可参考: 这个网站
常用配置说明:
PHP请求转发 例如:Wordpress是需要PHP FastCGI运行环境的,可以转发到目标服务器进行解释 abc.com root * /var/www php_fastcgi /wp/* 192.168.0.200:9090 <- 这里是WP服务器上fastcgi的服务端口 file_server 说明: 当站点路径*和访问路径/wp/*有访问请求时,Caddy会分流*到/var/www本地目录,/wp/*会分流到指定的fastcgi端口,但php_fastcgi只会针对PHP单一入口index.php 重定向子域配置说明: abc.com { redir http://www.abc.com{uri} } www.abc.com { root * /var/www } 当用户浏览器访问abc.com时会自动转到www.abc.com。当DNS记录设定主域接受用户任何任意子域名时,都会跳转到www.abc.com 内部强制重写 abc.com rewrite /kk /kk/ <- 代表强调末尾加斜线 rewrite /wp/ /wp <- 代表强制末尾减斜线 变量形式: rewrite { to {path} {path}/ / } 外部强制重定向 abc.com redir /kk /kk/ <- 直接重定向为abc.com/kk/ 重定向例子1: # 先让rewrite过滤掉需要redir的路径 rewrite { if {path} not /wp/test1 if {path} not /wp/img/test2.html to {path} {path}/ / } # 先执行rewrite,再执行redir redir 301 { /wp/test1 /wp/test1/index.php /wp/img/test2.html /wp/test1/index.php }
重定向例子2:
https://app.example.com {
route {
rewrite / /web{uri}
reverse_proxy * 192.168.15.122:443 {
header_up Host app.example.com
header_up X-Forwarded-Proto https
transport http {
tls_insecure_skip_verify
}
}
}
}