add x-forwarded-proto

This commit is contained in:
Jun Kurihara 2022-07-09 12:37:50 +09:00
commit 828d2300c0
No known key found for this signature in database
GPG key ID: 48ADFD173ED22B03
3 changed files with 96 additions and 86 deletions

View file

@ -10,8 +10,8 @@ services:
build:
context: ./
environment:
- LOG_LEVEL=info
- LOG_TO_FILE
- LOG_LEVEL=debug
- LOG_TO_FILE=false
tty: false
privileged: true
volumes:

View file

@ -70,7 +70,7 @@ where
let request_upgraded = req.extensions_mut().remove::<hyper::upgrade::OnUpgrade>();
// Build request from destination information
let req_forwarded = if let Ok(req) = generate_request_forwarded(
let req_forwarded = if let Ok(req) = self.generate_request_forwarded(
client_addr,
req,
upstream_scheme_host,
@ -149,7 +149,7 @@ where
}
} else {
// Generate response to client
if generate_response_forwarded(&mut res_backend).is_ok() {
if self.generate_response_forwarded(&mut res_backend).is_ok() {
info!("{} => {}", request_log, response_log);
Ok(res_backend)
} else {
@ -158,12 +158,14 @@ where
}
}
}
}
////////////////////////////////////////////////////
// Functions to generate messages
fn generate_response_forwarded<B: core::fmt::Debug>(response: &mut Response<B>) -> Result<()> {
fn generate_response_forwarded<B: core::fmt::Debug>(
&self,
response: &mut Response<B>,
) -> Result<()> {
let headers = response.headers_mut();
remove_hop_header(headers);
remove_connection_header(headers);
@ -177,6 +179,7 @@ fn generate_response_forwarded<B: core::fmt::Debug>(response: &mut Response<B>)
}
fn generate_request_forwarded<B: core::fmt::Debug>(
&self,
client_addr: SocketAddr,
mut req: Request<B>,
upstream_scheme_host: &Uri,
@ -200,7 +203,7 @@ fn generate_request_forwarded<B: core::fmt::Debug>(
// delete hop headers including header.connection
remove_hop_header(headers);
// X-Forwarded-For
add_forwarding_header(headers, client_addr)?;
add_forwarding_header(headers, client_addr, self.tls_enabled)?;
// println!("{:?}", headers);
// Add te: trailer if te_trailer
@ -250,3 +253,4 @@ fn generate_request_forwarded<B: core::fmt::Debug>(
Ok(req)
}
}

View file

@ -49,6 +49,7 @@ pub(super) fn append_header_entry(
pub(super) fn add_forwarding_header(
headers: &mut HeaderMap,
client_addr: SocketAddr,
tls: bool,
) -> Result<()> {
// default process
// optional process defined by upstream_option is applied in fn apply_upstream_options
@ -57,6 +58,11 @@ pub(super) fn add_forwarding_header(
"x-forwarded-for",
&client_addr.to_canonical().ip().to_string(),
)?;
append_header_entry(
headers,
"x-forwarded-proto",
if tls { "https" } else { "http" },
)?;
Ok(())
}