wip: still bug for forwarde-host param
This commit is contained in:
parent
a73321cb27
commit
03bfd466bf
4 changed files with 20 additions and 5 deletions
|
|
@ -2,6 +2,10 @@
|
||||||
|
|
||||||
## 0.10.1 or 0.11.0 (Unreleased)
|
## 0.10.1 or 0.11.0 (Unreleased)
|
||||||
|
|
||||||
|
### Improvement
|
||||||
|
|
||||||
|
- Feat: Support `Forwarded` header in addition to `X-Forwarded-For` header. This is to support the standard forwarding header for reverse proxy applications (RFC 7239). Use the `forwarded_header` upstream option to enable this feature.
|
||||||
|
|
||||||
## 0.10.0
|
## 0.10.0
|
||||||
|
|
||||||
### Important Changes
|
### Important Changes
|
||||||
|
|
|
||||||
|
|
@ -84,6 +84,7 @@ upstream_options = [
|
||||||
"upgrade_insecure_requests",
|
"upgrade_insecure_requests",
|
||||||
"force_http11_upstream",
|
"force_http11_upstream",
|
||||||
"set_upstream_host", # overwrite HOST value with upstream hostname (like www.yahoo.com)
|
"set_upstream_host", # overwrite HOST value with upstream hostname (like www.yahoo.com)
|
||||||
|
"forwarded_header" # add Forwarded header
|
||||||
]
|
]
|
||||||
######################################################################
|
######################################################################
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -98,6 +98,18 @@ where
|
||||||
// by default, add "host" header of original server_name if not exist
|
// by default, add "host" header of original server_name if not exist
|
||||||
if req.headers().get(header::HOST).is_none() {
|
if req.headers().get(header::HOST).is_none() {
|
||||||
let org_host = req.uri().host().ok_or_else(|| anyhow!("Invalid request"))?.to_owned();
|
let org_host = req.uri().host().ok_or_else(|| anyhow!("Invalid request"))?.to_owned();
|
||||||
|
// Omit port 80 if !tls_enabled, omit port 443 if tls_enabled
|
||||||
|
let org_host = req
|
||||||
|
.uri()
|
||||||
|
.port_u16()
|
||||||
|
.map(|port| {
|
||||||
|
if (tls_enabled && port == 443) || (!tls_enabled && port == 80) {
|
||||||
|
org_host.clone()
|
||||||
|
} else {
|
||||||
|
format!("{}:{}", org_host, port)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
.unwrap_or(org_host);
|
||||||
req.headers_mut().insert(header::HOST, HeaderValue::from_str(&org_host)?);
|
req.headers_mut().insert(header::HOST, HeaderValue::from_str(&org_host)?);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -121,6 +121,7 @@ pub(super) fn apply_upstream_options_to_header(
|
||||||
UpstreamOption::ForwardedHeader => {
|
UpstreamOption::ForwardedHeader => {
|
||||||
// This is called after X-Forwarded-For is added
|
// This is called after X-Forwarded-For is added
|
||||||
// Generate RFC 7239 Forwarded header
|
// Generate RFC 7239 Forwarded header
|
||||||
|
// TODO: host is generated from x-original-uri
|
||||||
let host = headers.get(header::HOST).and_then(|h| h.to_str().ok()).unwrap_or("unknown");
|
let host = headers.get(header::HOST).and_then(|h| h.to_str().ok()).unwrap_or("unknown");
|
||||||
let tls = upstream_base_uri.scheme_str() == Some("https");
|
let tls = upstream_base_uri.scheme_str() == Some("https");
|
||||||
|
|
||||||
|
|
@ -240,11 +241,8 @@ pub(super) fn add_forwarding_header(
|
||||||
// IMPORTANT: If Forwarded header exists, always update it for consistency
|
// IMPORTANT: If Forwarded header exists, always update it for consistency
|
||||||
// This ensures headers remain consistent even when forwarded_header upstream option is not specified
|
// This ensures headers remain consistent even when forwarded_header upstream option is not specified
|
||||||
if has_forwarded {
|
if has_forwarded {
|
||||||
let host = headers
|
let host = headers.get(header::HOST).and_then(|h| h.to_str().ok()).unwrap_or("unknown");
|
||||||
.get(header::HOST)
|
|
||||||
.and_then(|h| h.to_str().ok())
|
|
||||||
.unwrap_or("unknown");
|
|
||||||
|
|
||||||
match generate_forwarded_header(headers, tls, host) {
|
match generate_forwarded_header(headers, tls, host) {
|
||||||
Ok(forwarded_value) => {
|
Ok(forwarded_value) => {
|
||||||
add_header_entry_overwrite_if_exist(headers, "forwarded", forwarded_value)?;
|
add_header_entry_overwrite_if_exist(headers, "forwarded", forwarded_value)?;
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue