diff --git a/src/proxy/proxy_handler.rs b/src/proxy/proxy_handler.rs
index 237506c..765672d 100644
--- a/src/proxy/proxy_handler.rs
+++ b/src/proxy/proxy_handler.rs
@@ -19,19 +19,14 @@ where
mut req: Request
,
client_addr: SocketAddr, // アクセス制御用
) -> Result> {
- let request_log = log_request_msg(&req, &client_addr);
+ req.log(&client_addr, Some("(Incoming)"));
// Here we start to handle with server_name
- // Find backend application for given server_name
- let (server_name, _port) = if let Ok(v) = parse_host_port(&req) {
- v
- } else {
- info!("{} => {}", request_log, StatusCode::BAD_REQUEST);
- return http_error(StatusCode::BAD_REQUEST);
- };
+ // Find backend application for given server_name, and drop if incoming request is invalid as request.
+ let (server_name, _port) = parse_host_port(&req)?;
if !self.backends.apps.contains_key(&server_name) && self.backends.default_app.is_none() {
- info!("{} => {}", request_log, StatusCode::SERVICE_UNAVAILABLE);
+ // info!("{} => {}", request_log, StatusCode::SERVICE_UNAVAILABLE);
return http_error(StatusCode::SERVICE_UNAVAILABLE);
}
let backend = if let Some(be) = self.backends.apps.get(&server_name) {
@@ -45,7 +40,7 @@ where
// Redirect to https if !tls_enabled and redirect_to_https is true
if !self.tls_enabled && backend.https_redirection.unwrap_or(false) {
debug!("Redirect to secure connection: {}", server_name);
- info!("{} => {}", request_log, StatusCode::PERMANENT_REDIRECT);
+ // info!("{} => {}", request_log, StatusCode::PERMANENT_REDIRECT);
return secure_redirection(&server_name, self.globals.https_port, &req);
}
@@ -108,7 +103,7 @@ where
}
}
debug!("Response from backend: {:?}", res_backend.status());
- let response_log = res_backend.status().to_string();
+ // let response_log = res_backend.status().to_string();
if res_backend.status() == StatusCode::SWITCHING_PROTOCOLS {
// Handle StatusCode::SWITCHING_PROTOCOLS in response
@@ -138,11 +133,11 @@ where
.map_err(|e| anyhow!("Coping between upgraded connections failed: {}", e))?; // TODO: any response code?
Ok(()) as Result<()>
});
- info!("{} => {}", request_log, response_log);
+ // info!("{} => {}", request_log, response_log);
Ok(res_backend)
} else {
error!("Request does not have an upgrade extension");
- info!("{} => {}", request_log, StatusCode::BAD_REQUEST);
+ // info!("{} => {}", request_log, StatusCode::BAD_REQUEST);
http_error(StatusCode::BAD_REQUEST)
}
} else {
@@ -150,16 +145,16 @@ where
"Backend tried to switch to protocol {:?} when {:?} was requested",
upgrade_in_response, upgrade_in_request
);
- info!("{} => {}", request_log, StatusCode::SERVICE_UNAVAILABLE);
+ // info!("{} => {}", request_log, StatusCode::SERVICE_UNAVAILABLE);
http_error(StatusCode::SERVICE_UNAVAILABLE)
}
} else {
// Generate response to client
if self.generate_response_forwarded(&mut res_backend).is_ok() {
- info!("{} => {}", request_log, response_log);
+ // info!("{} => {}", request_log, response_log);
Ok(res_backend)
} else {
- info!("{} => {}", request_log, StatusCode::BAD_GATEWAY);
+ // info!("{} => {}", request_log, StatusCode::BAD_GATEWAY);
http_error(StatusCode::BAD_GATEWAY)
}
}
diff --git a/src/proxy/utils_headers.rs b/src/proxy/utils_headers.rs
index b3065d9..272d7ba 100644
--- a/src/proxy/utils_headers.rs
+++ b/src/proxy/utils_headers.rs
@@ -1,7 +1,7 @@
use super::{Upstream, UpstreamOption};
use crate::{error::*, log::*, utils::*};
use hyper::{
- header::{self, HeaderMap, HeaderValue},
+ header::{self, HeaderMap, HeaderName, HeaderValue},
Uri,
};
use std::net::SocketAddr;
@@ -29,12 +29,8 @@ pub(super) fn apply_upstream_options_to_header(
Ok(())
}
-pub(super) fn append_header_entry(
- headers: &mut HeaderMap,
- key: &'static str,
- value: &str,
-) -> Result<()> {
- match headers.entry(key) {
+pub(super) fn append_header_entry(headers: &mut HeaderMap, key: &str, value: &str) -> Result<()> {
+ match headers.entry(HeaderName::from_bytes(key.as_bytes())?) {
header::Entry::Vacant(entry) => {
entry.insert(value.parse::()?);
}
diff --git a/src/proxy/utils_request.rs b/src/proxy/utils_request.rs
index 98bd60a..16c2705 100644
--- a/src/proxy/utils_request.rs
+++ b/src/proxy/utils_request.rs
@@ -1,33 +1,39 @@
-use crate::{error::*, utils::*};
+use crate::{error::*, log::*, utils::*};
use hyper::{header, Request, Uri};
-use std::net::SocketAddr;
+use std::fmt::Display;
////////////////////////////////////////////////////
// Functions of utils for request messages
+pub trait MsgLog {
+ fn log(self, src: &T, extra: Option<&str>);
+}
+impl MsgLog for &Request {
+ fn log(self, src: &T, extra: Option<&str>) {
+ let canonical_src = src.to_canonical();
-pub(super) fn log_request_msg(req: &Request, client_addr: &SocketAddr) -> String {
- let server_name = req.headers().get(header::HOST).map_or_else(
- || {
- req
+ let server_name = self.headers().get(header::HOST).map_or_else(
+ || {
+ self
+ .uri()
+ .authority()
+ .map_or_else(|| "", |au| au.as_str())
+ },
+ |h| h.to_str().unwrap_or(""),
+ );
+ info!(
+ "{} <- {} -- {} {:?} {:?} {:?} {}",
+ server_name,
+ canonical_src,
+ self.method(),
+ self.version(),
+ self
.uri()
- .authority()
- .map_or_else(|| "", |au| au.as_str())
- },
- |h| h.to_str().unwrap_or(""),
- );
-
- return format!(
- "{} <- {} -- {} {:?} {:?} ({:?})",
- server_name,
- client_addr.to_canonical(),
- req.method(),
- req.version(),
- req
- .uri()
- .path_and_query()
- .map_or_else(|| "", |v| v.as_str()),
- req.headers()
- );
+ .path_and_query()
+ .map_or_else(|| "", |v| v.as_str()),
+ self.headers(),
+ extra.map_or_else(|| "", |v| v)
+ );
+ }
}
pub(super) fn parse_host_port(