Add support for HAProxy proxy protocol for listeners

This commit is contained in:
Lambda 2024-09-15 15:55:47 +00:00
parent 99f3e2aecd
commit 3247c64cd8
7 changed files with 234 additions and 14 deletions

View file

@ -137,22 +137,35 @@ pub(crate) enum ListenTransport {
port: u16,
#[serde(default = "false_fn")]
tls: bool,
#[serde(default = "false_fn")]
proxy_protocol: bool,
},
}
impl Display for ListenTransport {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
match self {
match *self {
ListenTransport::Tcp {
address,
port,
tls: false,
} => write!(f, "http://{address}:{port}"),
ListenTransport::Tcp {
address,
port,
tls: true,
} => write!(f, "https://{address}:{port}"),
tls,
proxy_protocol,
} => {
let scheme = format!(
"{}{}",
if proxy_protocol {
"proxy+"
} else {
""
},
if tls {
"https"
} else {
"http"
}
);
write!(f, "{scheme}://{address}:{port}")
}
}
}
}
@ -379,6 +392,7 @@ fn default_listen() -> Vec<ListenConfig> {
address: default_address(),
port: default_port(),
tls: false,
proxy_protocol: false,
},
}]
}