mirror of
https://github.com/fosrl/pangolin.git
synced 2025-08-28 21:58:15 +02:00
Fix traefik config merge
This commit is contained in:
parent
7bf98c0c40
commit
f07cd8aee3
1 changed files with 81 additions and 268 deletions
|
@ -299,194 +299,7 @@ export async function getTraefikConfig(exitNodeId: number): Promise<any> {
|
||||||
middlewares: [redirectHttpsMiddlewareName],
|
middlewares: [redirectHttpsMiddlewareName],
|
||||||
service: serviceName,
|
service: serviceName,
|
||||||
rule: `Host(\`${fullDomain}\`)`,
|
rule: `Host(\`${fullDomain}\`)`,
|
||||||
<<<<<<< HEAD
|
|
||||||
priority: 100
|
priority: 100
|
||||||
=======
|
|
||||||
priority: 100,
|
|
||||||
...(resource.ssl ? { tls } : {})
|
|
||||||
};
|
|
||||||
|
|
||||||
if (resource.ssl) {
|
|
||||||
config_output.http.routers![routerName + "-redirect"] = {
|
|
||||||
entryPoints: [
|
|
||||||
config.getRawConfig().traefik.http_entrypoint
|
|
||||||
],
|
|
||||||
middlewares: [redirectHttpsMiddlewareName],
|
|
||||||
service: serviceName,
|
|
||||||
rule: `Host(\`${fullDomain}\`)`,
|
|
||||||
priority: 100
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
config_output.http.services![serviceName] = {
|
|
||||||
loadBalancer: {
|
|
||||||
servers: targets
|
|
||||||
.filter((target: TargetWithSite) => {
|
|
||||||
if (!target.enabled) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
if (
|
|
||||||
target.site.type === "local" ||
|
|
||||||
target.site.type === "wireguard"
|
|
||||||
) {
|
|
||||||
if (
|
|
||||||
!target.ip ||
|
|
||||||
!target.port ||
|
|
||||||
!target.method
|
|
||||||
) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
} else if (target.site.type === "newt") {
|
|
||||||
if (
|
|
||||||
!target.internalPort ||
|
|
||||||
!target.method ||
|
|
||||||
!target.site.subnet
|
|
||||||
) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
})
|
|
||||||
.map((target: TargetWithSite) => {
|
|
||||||
if (
|
|
||||||
target.site.type === "local" ||
|
|
||||||
target.site.type === "wireguard"
|
|
||||||
) {
|
|
||||||
return {
|
|
||||||
url: `${target.method}://${target.ip}:${target.port}`
|
|
||||||
};
|
|
||||||
} else if (target.site.type === "newt") {
|
|
||||||
const ip = target.site.subnet!.split("/")[0];
|
|
||||||
return {
|
|
||||||
url: `${target.method}://${ip}:${target.internalPort}`
|
|
||||||
};
|
|
||||||
}
|
|
||||||
}),
|
|
||||||
...(resource.stickySession
|
|
||||||
? {
|
|
||||||
sticky: {
|
|
||||||
cookie: {
|
|
||||||
name: "p_sticky", // TODO: make this configurable via config.yml like other cookies
|
|
||||||
secure: resource.ssl,
|
|
||||||
httpOnly: true
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
: {})
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
// Add the serversTransport if TLS server name is provided
|
|
||||||
if (resource.tlsServerName) {
|
|
||||||
if (!config_output.http.serversTransports) {
|
|
||||||
config_output.http.serversTransports = {};
|
|
||||||
}
|
|
||||||
config_output.http.serversTransports![transportName] = {
|
|
||||||
serverName: resource.tlsServerName,
|
|
||||||
//unfortunately the following needs to be set. traefik doesn't merge the default serverTransport settings
|
|
||||||
// if defined in the static config and here. if not set, self-signed certs won't work
|
|
||||||
insecureSkipVerify: true
|
|
||||||
};
|
|
||||||
config_output.http.services![
|
|
||||||
serviceName
|
|
||||||
].loadBalancer.serversTransport = transportName;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Add the host header middleware
|
|
||||||
if (resource.setHostHeader) {
|
|
||||||
if (!config_output.http.middlewares) {
|
|
||||||
config_output.http.middlewares = {};
|
|
||||||
}
|
|
||||||
config_output.http.middlewares[hostHeaderMiddlewareName] = {
|
|
||||||
headers: {
|
|
||||||
customRequestHeaders: {
|
|
||||||
Host: resource.setHostHeader
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
if (!config_output.http.routers![routerName].middlewares) {
|
|
||||||
config_output.http.routers![routerName].middlewares =
|
|
||||||
[];
|
|
||||||
}
|
|
||||||
config_output.http.routers![routerName].middlewares = [
|
|
||||||
...config_output.http.routers![routerName].middlewares,
|
|
||||||
hostHeaderMiddlewareName
|
|
||||||
];
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
// Non-HTTP (TCP/UDP) configuration
|
|
||||||
if (!resource.enableProxy) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
const protocol = resource.protocol.toLowerCase();
|
|
||||||
const port = resource.proxyPort;
|
|
||||||
|
|
||||||
if (!port) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!config_output[protocol]) {
|
|
||||||
config_output[protocol] = {
|
|
||||||
routers: {},
|
|
||||||
services: {}
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
config_output[protocol].routers[routerName] = {
|
|
||||||
entryPoints: [`${protocol}-${port}`],
|
|
||||||
service: serviceName,
|
|
||||||
...(protocol === "tcp" ? { rule: "HostSNI(`*`)" } : {})
|
|
||||||
};
|
|
||||||
|
|
||||||
config_output[protocol].services[serviceName] = {
|
|
||||||
loadBalancer: {
|
|
||||||
servers: targets
|
|
||||||
.filter((target: TargetWithSite) => {
|
|
||||||
if (!target.enabled) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
if (
|
|
||||||
target.site.type === "local" ||
|
|
||||||
target.site.type === "wireguard"
|
|
||||||
) {
|
|
||||||
if (!target.ip || !target.port) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
} else if (target.site.type === "newt") {
|
|
||||||
if (!target.internalPort || !target.site.subnet) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
})
|
|
||||||
.map((target: TargetWithSite) => {
|
|
||||||
if (
|
|
||||||
target.site.type === "local" ||
|
|
||||||
target.site.type === "wireguard"
|
|
||||||
) {
|
|
||||||
return {
|
|
||||||
address: `${target.ip}:${target.port}`
|
|
||||||
};
|
|
||||||
} else if (target.site.type === "newt") {
|
|
||||||
const ip = target.site.subnet!.split("/")[0];
|
|
||||||
return {
|
|
||||||
address: `${ip}:${target.internalPort}`
|
|
||||||
};
|
|
||||||
}
|
|
||||||
}),
|
|
||||||
...(resource.stickySession
|
|
||||||
? {
|
|
||||||
sticky: {
|
|
||||||
ipStrategy: {
|
|
||||||
depth: 0,
|
|
||||||
sourcePort: true
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
: {})
|
|
||||||
}
|
|
||||||
>>>>>>> dev
|
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue