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