feat: config works

This commit is contained in:
2024-03-30 15:37:26 +08:00
parent f02f6bb7dd
commit 55c1aa3205
8 changed files with 944 additions and 182 deletions

View File

@@ -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();
}