feat: config works
This commit is contained in:
74
src/main.rs
74
src/main.rs
@@ -6,11 +6,13 @@ use pingora::{
|
||||
use pretty_env_logger::env_logger::Builder;
|
||||
use structopt::StructOpt;
|
||||
|
||||
use crate::config::ProxyConfig;
|
||||
use crate::service::HostConfig;
|
||||
|
||||
mod app;
|
||||
mod service;
|
||||
mod cert;
|
||||
mod config;
|
||||
|
||||
pub fn main() {
|
||||
init_logger();
|
||||
@@ -19,38 +21,54 @@ pub fn main() {
|
||||
let mut my_server = Server::new(opt).unwrap();
|
||||
my_server.bootstrap();
|
||||
|
||||
let proxy_service_tcp = service::proxy_service_tcp(
|
||||
&my_server.configuration,
|
||||
"0.0.0.0:8800",
|
||||
vec![],
|
||||
);
|
||||
let proxy_config = ProxyConfig::load("proxy_config.json").unwrap_or_else(|e| {
|
||||
panic!("Load proxy_config.json failed: {}", e);
|
||||
});
|
||||
|
||||
let proxy_service_ssl2 = service::proxy_service_tls(
|
||||
&my_server.configuration,
|
||||
"0.0.0.0:4430",
|
||||
vec![
|
||||
HostConfig {
|
||||
proxy_addr: "101.132.122.240:443".to_owned(),
|
||||
proxy_tls: true,
|
||||
proxy_hostname: "hatter.ink".to_owned(),
|
||||
},
|
||||
HostConfig {
|
||||
proxy_addr: "1.1.1.1:443".to_owned(),
|
||||
proxy_tls: true,
|
||||
proxy_hostname: "one.one.one.one".to_owned(),
|
||||
},
|
||||
],
|
||||
);
|
||||
let mut services: Vec<Box<dyn Service>> = vec![];
|
||||
for group in &proxy_config.groups {
|
||||
let listen_address = format!("0.0.0.0:{}", group.port);
|
||||
let mut host_configs = vec![];
|
||||
if let Some(proxy_map) = &group.proxy_map {
|
||||
for (hostname, proxy_item) in proxy_map {
|
||||
host_configs.push(HostConfig {
|
||||
proxy_addr: proxy_item.address.clone(),
|
||||
proxy_tls: proxy_item.tls.unwrap_or(false),
|
||||
proxy_hostname: proxy_item.sni.clone().unwrap_or_else(|| hostname.clone()),
|
||||
});
|
||||
}
|
||||
}
|
||||
let lookup_tls = group.lookup_dns.unwrap_or(false);
|
||||
match &group.tls {
|
||||
None => {
|
||||
let proxy_service_tcp = service::proxy_service_tcp(
|
||||
&my_server.configuration,
|
||||
&listen_address,
|
||||
lookup_tls,
|
||||
host_configs,
|
||||
);
|
||||
services.push(Box::new(proxy_service_tcp));
|
||||
}
|
||||
Some(proxy_tls) => {
|
||||
let proxy_service_ssl = service::proxy_service_tls(
|
||||
&my_server.configuration,
|
||||
&listen_address,
|
||||
lookup_tls,
|
||||
&proxy_tls,
|
||||
host_configs,
|
||||
);
|
||||
services.push(Box::new(proxy_service_ssl));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
let mut prometheus_service_http = ListeningService::prometheus_http_service();
|
||||
prometheus_service_http.add_tcp("127.0.0.1:6150");
|
||||
if let Some(true) = proxy_config.prometheus {
|
||||
let mut prometheus_service_http = ListeningService::prometheus_http_service();
|
||||
prometheus_service_http.add_tcp("127.0.0.1:6150");
|
||||
services.push(Box::new(prometheus_service_http));
|
||||
}
|
||||
|
||||
info!("start listen...");
|
||||
let services: Vec<Box<dyn Service>> = vec![
|
||||
Box::new(proxy_service_tcp),
|
||||
Box::new(proxy_service_ssl2),
|
||||
Box::new(prometheus_service_http),
|
||||
];
|
||||
my_server.add_services(services);
|
||||
my_server.run_forever();
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user