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:
|
build:
|
||||||
context: ./
|
context: ./
|
||||||
environment:
|
environment:
|
||||||
- LOG_LEVEL=info
|
- LOG_LEVEL=debug
|
||||||
- LOG_TO_FILE
|
- LOG_TO_FILE=false
|
||||||
tty: false
|
tty: false
|
||||||
privileged: true
|
privileged: true
|
||||||
volumes:
|
volumes:
|
||||||
|
|
|
||||||
|
|
@ -70,7 +70,7 @@ where
|
||||||
let request_upgraded = req.extensions_mut().remove::<hyper::upgrade::OnUpgrade>();
|
let request_upgraded = req.extensions_mut().remove::<hyper::upgrade::OnUpgrade>();
|
||||||
|
|
||||||
// Build request from destination information
|
// 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,
|
client_addr,
|
||||||
req,
|
req,
|
||||||
upstream_scheme_host,
|
upstream_scheme_host,
|
||||||
|
|
@ -149,7 +149,7 @@ where
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
// Generate response to client
|
// 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);
|
info!("{} => {}", request_log, response_log);
|
||||||
Ok(res_backend)
|
Ok(res_backend)
|
||||||
} else {
|
} 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();
|
let headers = response.headers_mut();
|
||||||
remove_hop_header(headers);
|
remove_hop_header(headers);
|
||||||
remove_connection_header(headers);
|
remove_connection_header(headers);
|
||||||
|
|
@ -174,15 +176,16 @@ fn generate_response_forwarded<B: core::fmt::Debug>(response: &mut Response<B>)
|
||||||
)?;
|
)?;
|
||||||
|
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
fn generate_request_forwarded<B: core::fmt::Debug>(
|
fn generate_request_forwarded<B: core::fmt::Debug>(
|
||||||
|
&self,
|
||||||
client_addr: SocketAddr,
|
client_addr: SocketAddr,
|
||||||
mut req: Request<B>,
|
mut req: Request<B>,
|
||||||
upstream_scheme_host: &Uri,
|
upstream_scheme_host: &Uri,
|
||||||
upgrade: &Option<String>,
|
upgrade: &Option<String>,
|
||||||
upstream: &Upstream,
|
upstream: &Upstream,
|
||||||
) -> Result<Request<B>> {
|
) -> Result<Request<B>> {
|
||||||
debug!("Generate request to be forwarded");
|
debug!("Generate request to be forwarded");
|
||||||
|
|
||||||
// Add te: trailer if contained in original request
|
// 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
|
// delete hop headers including header.connection
|
||||||
remove_hop_header(headers);
|
remove_hop_header(headers);
|
||||||
// X-Forwarded-For
|
// X-Forwarded-For
|
||||||
add_forwarding_header(headers, client_addr)?;
|
add_forwarding_header(headers, client_addr, self.tls_enabled)?;
|
||||||
// println!("{:?}", headers);
|
// println!("{:?}", headers);
|
||||||
|
|
||||||
// Add te: trailer if te_trailer
|
// Add te: trailer if te_trailer
|
||||||
|
|
@ -249,4 +252,5 @@ fn generate_request_forwarded<B: core::fmt::Debug>(
|
||||||
}
|
}
|
||||||
|
|
||||||
Ok(req)
|
Ok(req)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -49,6 +49,7 @@ pub(super) fn append_header_entry(
|
||||||
pub(super) fn add_forwarding_header(
|
pub(super) fn add_forwarding_header(
|
||||||
headers: &mut HeaderMap,
|
headers: &mut HeaderMap,
|
||||||
client_addr: SocketAddr,
|
client_addr: SocketAddr,
|
||||||
|
tls: bool,
|
||||||
) -> Result<()> {
|
) -> Result<()> {
|
||||||
// default process
|
// default process
|
||||||
// optional process defined by upstream_option is applied in fn apply_upstream_options
|
// 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",
|
"x-forwarded-for",
|
||||||
&client_addr.to_canonical().ip().to_string(),
|
&client_addr.to_canonical().ip().to_string(),
|
||||||
)?;
|
)?;
|
||||||
|
append_header_entry(
|
||||||
|
headers,
|
||||||
|
"x-forwarded-proto",
|
||||||
|
if tls { "https" } else { "http" },
|
||||||
|
)?;
|
||||||
|
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue