add feature to specify default backend
This commit is contained in:
parent
a6912e72bd
commit
3491b80142
9 changed files with 50 additions and 12 deletions
|
|
@ -39,8 +39,11 @@ where
|
|||
} else {
|
||||
return http_error(StatusCode::SERVICE_UNAVAILABLE);
|
||||
};
|
||||
let backend = if let Some(be) = self.backends.get(server_name.as_str()) {
|
||||
let backend = if let Some(be) = self.backends.apps.get(server_name.as_str()) {
|
||||
be
|
||||
} else if let Some(default_be) = &self.backends.default_app {
|
||||
debug!("Serving by default app: {}", default_be);
|
||||
self.backends.apps.get(default_be).unwrap()
|
||||
} else {
|
||||
return http_error(StatusCode::SERVICE_UNAVAILABLE);
|
||||
};
|
||||
|
|
|
|||
|
|
@ -1,9 +1,9 @@
|
|||
// use super::proxy_handler::handle_request;
|
||||
use crate::{backend::Backend, error::*, globals::Globals, log::*};
|
||||
use crate::{backend::Backends, error::*, globals::Globals, log::*};
|
||||
use hyper::{
|
||||
client::connect::Connect, server::conn::Http, service::service_fn, Body, Client, Request,
|
||||
};
|
||||
use std::{collections::HashMap, net::SocketAddr, sync::Arc};
|
||||
use std::{net::SocketAddr, sync::Arc};
|
||||
use tokio::{
|
||||
io::{AsyncRead, AsyncWrite},
|
||||
net::TcpListener,
|
||||
|
|
@ -38,8 +38,8 @@ where
|
|||
T: Connect + Clone + Sync + Send + 'static,
|
||||
{
|
||||
pub listening_on: SocketAddr,
|
||||
pub tls_enabled: bool, // TCP待受がTLSかどうか
|
||||
pub backends: Arc<HashMap<String, Backend>>, // TODO: hyper::uriで抜いたhostで引っ掛ける。Stringでいいのか?
|
||||
pub tls_enabled: bool, // TCP待受がTLSかどうか
|
||||
pub backends: Arc<Backends>,
|
||||
pub forwarder: Arc<Client<T>>,
|
||||
pub globals: Arc<Globals>,
|
||||
}
|
||||
|
|
|
|||
|
|
@ -17,7 +17,7 @@ where
|
|||
let cert_service = async {
|
||||
info!("Start cert watch service for {}", self.listening_on);
|
||||
loop {
|
||||
for (server_name, backend) in self.backends.iter() {
|
||||
for (server_name, backend) in self.backends.apps.iter() {
|
||||
if backend.tls_cert_key_path.is_some() && backend.tls_cert_path.is_some() {
|
||||
if let Err(_e) = backend.update_server_config().await {
|
||||
warn!("Failed to update certs for {}", server_name);
|
||||
|
|
@ -53,7 +53,7 @@ where
|
|||
info!("No SNI in ClientHello");
|
||||
continue;
|
||||
};
|
||||
let backend_serve = if let Some(backend_serve) = self.backends.get(svn){
|
||||
let backend_serve = if let Some(backend_serve) = self.backends.apps.get(svn){
|
||||
backend_serve
|
||||
} else {
|
||||
info!("No configuration for the server name {} given in client_hello", svn);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue