nginx转caddy之proxy_pass转换

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两个指令,再不断抓包测试,终于实现完美转换,最终配置如下: