mirror of
https://github.com/sadoyan/aralez.git
synced 2026-10-23 06:01:35 +08:00
Finalized Consul integration,
Cached headers bug fix
This commit is contained in:
Generated
+1
-1
@@ -138,7 +138,7 @@ checksum = "2a4385e2e34eb35d6b3efe798b9eb88096925d87726c0798709bf56d9ed84af3"
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "aralez"
|
name = "aralez"
|
||||||
version = "0.93.1"
|
version = "0.93.2"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"ahash",
|
"ahash",
|
||||||
"arc-swap",
|
"arc-swap",
|
||||||
|
|||||||
+1
-1
@@ -1,6 +1,6 @@
|
|||||||
[package]
|
[package]
|
||||||
name = "aralez"
|
name = "aralez"
|
||||||
version = "0.93.1"
|
version = "0.93.2"
|
||||||
edition = "2021"
|
edition = "2021"
|
||||||
license = "Apache-2.0"
|
license = "Apache-2.0"
|
||||||
description = "Reverse proxy built on top of Cloudflare's Pingora"
|
description = "Reverse proxy built on top of Cloudflare's Pingora"
|
||||||
|
|||||||
@@ -44,7 +44,8 @@ job "apache" {
|
|||||||
tags = [
|
tags = [
|
||||||
"aralez.service=yes",
|
"aralez.service=yes",
|
||||||
"aralez.host=apache.blablabla.com",
|
"aralez.host=apache.blablabla.com",
|
||||||
"aralez.path=/"
|
"aralez.path=/",
|
||||||
|
"aralez.redirect=http://checkip.amazonaws.com"
|
||||||
]
|
]
|
||||||
check {
|
check {
|
||||||
type = "http"
|
type = "http"
|
||||||
@@ -54,9 +55,7 @@ job "apache" {
|
|||||||
timeout = "2s"
|
timeout = "2s"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
driver = "docker"
|
driver = "docker"
|
||||||
|
|
||||||
config {
|
config {
|
||||||
image = "httpd:latest"
|
image = "httpd:latest"
|
||||||
force_pull = true
|
force_pull = true
|
||||||
|
|||||||
+5
-7
@@ -45,11 +45,11 @@ job "echo" {
|
|||||||
"aralez.service=yes",
|
"aralez.service=yes",
|
||||||
"aralez.host=echo.blablabla.com",
|
"aralez.host=echo.blablabla.com",
|
||||||
"aralez.path=/",
|
"aralez.path=/",
|
||||||
"aralez.rate=100",
|
"aralez.rate=20",
|
||||||
"aralez.4xx_rate=50",
|
"aralez.4xx_rate=10",
|
||||||
"aralez.to_https=false",
|
"aralez.to_https=true",
|
||||||
"aralez.client_headers=WyJYLUVjaG8tU2VuZDpIb29vb29vb29vb29vIiwiWC1FY2hvLVJlY3Y6WW9vb29vb29vb29vbyJdCg==",
|
"aralez.client_header=X-Client-Header:Some simple header",
|
||||||
"aralez.server_headers=WyJYLVByb3h5LUZyb206IEFyYWxleiIsIlgtQmFyaS1MdXlzOiBBcGVyIEphbiIsIlgtQW5rYXAtSGVhZGVyOiBCZXNhbXAgQW5rYXAgSGVhZGVyIl0K"
|
"aralez.server_header=X-Server-Header:Some simple header",
|
||||||
]
|
]
|
||||||
check {
|
check {
|
||||||
type = "http"
|
type = "http"
|
||||||
@@ -59,9 +59,7 @@ job "echo" {
|
|||||||
timeout = "2s"
|
timeout = "2s"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
driver = "docker"
|
driver = "docker"
|
||||||
|
|
||||||
config {
|
config {
|
||||||
image = "ealen/echo-server:latest"
|
image = "ealen/echo-server:latest"
|
||||||
force_pull = true
|
force_pull = true
|
||||||
|
|||||||
@@ -45,12 +45,13 @@ job "nginx" {
|
|||||||
"aralez.service=yes",
|
"aralez.service=yes",
|
||||||
"aralez.host=nginx.blablabla.com",
|
"aralez.host=nginx.blablabla.com",
|
||||||
"aralez.path=/",
|
"aralez.path=/",
|
||||||
"aralez.rate=20",
|
"aralez.rate=1",
|
||||||
"aralez.4xx_rate=10",
|
"aralez.4xx_rate=10",
|
||||||
"aralez.to_https=true",
|
"aralez.to_https=true",
|
||||||
"aralez.auth=basic root:toor",
|
"aralez.client_header=X-Some:Some Random Header",
|
||||||
"aralez.client_headers=WwogICAgIlgtU29tZS1IZWFkZXI6QUFBQUFBQUFBQUFBQUFBIiwKICAgICJYLUVtb3MtSGVhZGVyOlpaWlpaWlpaWlpaWlpaWiIsCiAgICAiWC1PdGhlci1oZWFkZXI6VmF5VmF5VmF5IiwKICAgICJYLVJlaHRvLWhlYWRlcjpaYXlaYXlaYXkiCl0KCg==",
|
"aralez.client_header=X-Emos:Redaeh Modnar Emos",
|
||||||
"aralez.server_headers=WyJYLVByb3h5LUZyb206IEFyYWxleiIsIlgtQmFyaS1MdXlzOiBBcGVyIEphbiIsIlgtQW5rYXAtSGVhZGVyOiBCZXNhbXAgQW5rYXAgSGVhZGVyIl0K"
|
"aralez.server_header=X-From:Aralez & Consul",
|
||||||
|
"aralez.server_header=X-Mrof: Lusnoc & Zelara",
|
||||||
]
|
]
|
||||||
check {
|
check {
|
||||||
type = "http"
|
type = "http"
|
||||||
@@ -60,9 +61,7 @@ job "nginx" {
|
|||||||
timeout = "2s"
|
timeout = "2s"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
driver = "docker"
|
driver = "docker"
|
||||||
|
|
||||||
config {
|
config {
|
||||||
image = "nginx:latest"
|
image = "nginx:latest"
|
||||||
force_pull = true
|
force_pull = true
|
||||||
|
|||||||
+2
-24
@@ -3,9 +3,7 @@ use crate::utils::kuberconsul::match_path;
|
|||||||
use crate::utils::kubernetes::KubeEndpoints;
|
use crate::utils::kubernetes::KubeEndpoints;
|
||||||
use crate::utils::structs::{GlobalServiceMapping, InnerMap};
|
use crate::utils::structs::{GlobalServiceMapping, InnerMap};
|
||||||
use ahash::HashMap;
|
use ahash::HashMap;
|
||||||
use base64::{engine::general_purpose, Engine as _};
|
|
||||||
use dashmap::DashMap;
|
use dashmap::DashMap;
|
||||||
use log::warn;
|
|
||||||
use pingora_core::connectors::http::Connector;
|
use pingora_core::connectors::http::Connector;
|
||||||
use pingora_core::listeners::ALPN;
|
use pingora_core::listeners::ALPN;
|
||||||
use pingora_core::prelude::HttpPeer;
|
use pingora_core::prelude::HttpPeer;
|
||||||
@@ -66,28 +64,8 @@ fn parse_services(json: Vec<u8>) -> Result<ConsulServices, serde_json::Error> {
|
|||||||
"aralez.to_https" => internal.to_https = value.parse::<bool>().ok(),
|
"aralez.to_https" => internal.to_https = value.parse::<bool>().ok(),
|
||||||
"aralez.auth" => internal.auth = Option::from(value.to_string()),
|
"aralez.auth" => internal.auth = Option::from(value.to_string()),
|
||||||
"aralez.redirect" => internal.redirect = Option::from(value.to_string()),
|
"aralez.redirect" => internal.redirect = Option::from(value.to_string()),
|
||||||
"aralez.client_headers" => {
|
"aralez.client_header" => internal.client_headers.get_or_insert_default().push(value.to_string()),
|
||||||
let decoded_bytes = general_purpose::STANDARD.decode(value).unwrap_or_default();
|
"aralez.server_header" => internal.server_headers.get_or_insert_default().push(value.to_string()),
|
||||||
let decoded: Result<Vec<String>, serde_json::Error> = serde_json::from_slice(&decoded_bytes);
|
|
||||||
match decoded {
|
|
||||||
Ok(dd) => internal.client_headers = Some(dd),
|
|
||||||
Err(er) => {
|
|
||||||
warn!("Could not decode client headers: {}", er);
|
|
||||||
internal.client_headers = None
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
"aralez.server_headers" => {
|
|
||||||
let decoded_bytes = general_purpose::STANDARD.decode(value).unwrap_or_default();
|
|
||||||
let decoded: Result<Vec<String>, serde_json::Error> = serde_json::from_slice(&decoded_bytes);
|
|
||||||
match decoded {
|
|
||||||
Ok(dd) => internal.server_headers = Some(dd),
|
|
||||||
Err(er) => {
|
|
||||||
warn!("Could not decode server headers: {}", er);
|
|
||||||
internal.server_headers = None
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
_ => {}
|
_ => {}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -310,15 +310,16 @@ impl ProxyHttp for LB {
|
|||||||
let _ = _upstream_response.append_header("set-cookie", buf.as_str());
|
let _ = _upstream_response.append_header("set-cookie", buf.as_str());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
|
async fn upstream_response_filter(&self, _session: &mut Session, upstream_response: &mut ResponseHeader, ctx: &mut Self::CTX) -> Result<()> {
|
||||||
if let Some(client_headers) = &ctx.client_headers {
|
if let Some(client_headers) = &ctx.client_headers {
|
||||||
for (k, v) in client_headers.iter() {
|
for (k, v) in client_headers.iter() {
|
||||||
_upstream_response.append_header(k.clone(), v.as_ref())?;
|
upstream_response.append_header(k.clone(), v.as_ref())?;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
async fn logging(&self, session: &mut Session, _e: Option<&pingora::Error>, ctx: &mut Self::CTX) {
|
async fn logging(&self, session: &mut Session, _e: Option<&pingora::Error>, ctx: &mut Self::CTX) {
|
||||||
let response_code = session.response_written().map_or(0, |resp| resp.status.as_u16());
|
let response_code = session.response_written().map_or(0, |resp| resp.status.as_u16());
|
||||||
let m = &MetricTypes {
|
let m = &MetricTypes {
|
||||||
|
|||||||
Reference in New Issue
Block a user