nginx转caddy之proxy_pass转换

warning: 这篇文章距离上次修改已过440天,其中的内容可能已经有所变动。

nginx中转发某个后端应用,配置如下:

location  /web/sys/Login/ {
            proxy_pass http://ip:9999/back/sys/tLogin/;
        }

从配置可以看到,所有匹配了/web/sys/Login/的路径都会被转发到http://ip:9999/back/sys/tLogin/,即使==/web/sys/Login/==后面有xxx也会被转发,也会带上。比如/web/sys/Login/dingtalk/callback?code=xxx,转发到后端时,路径会变成 http://ip:9999/back/sys/tLogin/callback?code=xxx

但是在caddy中,如果只是简单的将proxy_pass改为reverse_proxy,那么很不幸你将会在caddy日志里看到如下报错:

Error during parsing: for now, URLs for proxy upstreams only support scheme, host, and port components

大概意思是reverse_proxy暂不支持主机或端口后带路径的写法,查了一圈官方文档,再试了rewrite和uri两个指令,再不断抓包测试,终于实现完美转换,最终配置如下:

handle /web/sys/Login/* {
    rewrite * /back/sys/tLogin/{uri}
    reverse_proxy http://ip:9999
}

其中{uri}会把/web/sys/Login/*后的内容带上!

评论已关闭