add x-forwarded-proto
This commit is contained in:
parent
907d7e574b
commit
828d2300c0
3 changed files with 96 additions and 86 deletions
|
|
@ -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:
|
||||
|
|
|
|||
|
|
@ -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
|
||||
////////////////////////////////////////////////////
|
||||
// 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);
|
||||
|
|
@ -174,15 +176,16 @@ fn generate_response_forwarded<B: core::fmt::Debug>(response: &mut Response<B>)
|
|||
)?;
|
||||
|
||||
Ok(())
|
||||
}
|
||||
}
|
||||
|
||||
fn generate_request_forwarded<B: core::fmt::Debug>(
|
||||
fn generate_request_forwarded<B: core::fmt::Debug>(
|
||||
&self,
|
||||
client_addr: SocketAddr,
|
||||
mut req: Request<B>,
|
||||
upstream_scheme_host: &Uri,
|
||||
upgrade: &Option<String>,
|
||||
upstream: &Upstream,
|
||||
) -> Result<Request<B>> {
|
||||
) -> Result<Request<B>> {
|
||||
debug!("Generate request to be forwarded");
|
||||
|
||||
// Add te: trailer if contained in original request
|
||||
|
|
@ -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
|
||||
|
|
@ -249,4 +252,5 @@ fn generate_request_forwarded<B: core::fmt::Debug>(
|
|||
}
|
||||
|
||||
Ok(req)
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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(())
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue