Move Nginx to services examples, add second reverse proxy example that works path based

This commit is contained in:
Sander van der Burg 2020-04-16 00:05:54 +02:00 committed by Sander van der Burg
parent 064752aa15
commit 41be24eb3f
9 changed files with 123 additions and 16 deletions

View File

@ -2,6 +2,7 @@
, stateDir
, logDir
, runtimeDir
, cacheDir
, tmpDir
, forceDisableUserChange
, processManager
@ -46,4 +47,19 @@ in
jre = pkgs.jre8;
tomcat = pkgs.tomcat9;
};
nginx = import ./nginx.nix {
inherit createManagedProcess stateDir runtimeDir cacheDir forceDisableUserChange;
inherit (pkgs) stdenv nginx;
};
nginxReverseProxyHostBased = import ./nginx-reverse-proxy-hostbased.nix {
inherit createManagedProcess stateDir runtimeDir cacheDir forceDisableUserChange;
inherit (pkgs) stdenv writeTextFile nginx;
};
nginxReverseProxyPathBased = import ./nginx-reverse-proxy-pathbased.nix {
inherit createManagedProcess stateDir runtimeDir cacheDir forceDisableUserChange;
inherit (pkgs) stdenv writeTextFile nginx;
};
}

View File

@ -1,7 +1,7 @@
<!DOCTYPE html>
<html>
<head>
<title>Disnix VirtualHosts example</title>
<title>Error page</title>
</head>
<body>

View File

@ -1,4 +1,4 @@
{createManagedProcess, stdenv, writeTextFile, nginx, runtimeDir, stateDir, logDir, forceDisableUserChange}:
{createManagedProcess, stdenv, writeTextFile, nginx, runtimeDir, stateDir, cacheDir, forceDisableUserChange}:
{port ? 80, webapps ? [], instanceSuffix ? ""}:
interDeps:
@ -8,10 +8,11 @@ let
group = instanceName;
nginxStateDir = "${stateDir}/${instanceName}";
nginxLogDir = "${nginxStateDir}/logs";
dependencies = webapps ++ (builtins.attrValues interDeps);
in
import ./nginx.nix {
inherit createManagedProcess stdenv nginx stateDir forceDisableUserChange runtimeDir;
inherit createManagedProcess stdenv nginx stateDir forceDisableUserChange runtimeDir cacheDir;
} {
inherit instanceSuffix;
@ -20,7 +21,7 @@ import ./nginx.nix {
configFile = writeTextFile {
name = "nginx.conf";
text = ''
error_log ${nginxStateDir}/logs/error.log;
error_log ${nginxLogDir}/error.log;
${stdenv.lib.optionalString (!forceDisableUserChange) ''
user ${user} ${group};

View File

@ -0,0 +1,74 @@
{createManagedProcess, stdenv, writeTextFile, nginx, runtimeDir, stateDir, cacheDir, forceDisableUserChange}:
{port ? 80, webapps ? [], instanceSuffix ? "", enableCache ? false}:
interDeps:
let
instanceName = "nginx${instanceSuffix}";
user = instanceName;
group = instanceName;
nginxStateDir = "${stateDir}/${instanceName}";
nginxLogDir = "${nginxStateDir}/logs";
nginxCacheDir = "${cacheDir}/${instanceName}";
dependencies = webapps ++ (builtins.attrValues interDeps);
in
import ./nginx.nix {
inherit createManagedProcess stdenv nginx stateDir forceDisableUserChange runtimeDir cacheDir;
} {
inherit instanceSuffix;
dependencies = map (webapp: builtins.trace ("we have a: ${toString (builtins.toJSON (builtins.functionArgs webapp.pkg))}") webapp.pkg) webapps;# dependencies;
configFile = writeTextFile {
name = "nginx.conf";
text = ''
error_log ${nginxLogDir}/error.log;
${stdenv.lib.optionalString (!forceDisableUserChange) ''
user ${user} ${group};
''}
events {
worker_connections 190000;
}
http {
${stdenv.lib.optionalString enableCache ''
${stdenv.lib.concatMapStrings (dependency:
''
proxy_cache_path ${nginxCacheDir}/${dependency.name} keys_zone=${dependency.name}:8m inactive=5m max_size=128m;
''
) dependencies}
''}
${stdenv.lib.concatMapStrings (dependency:
''
upstream ${dependency.name} {
ip_hash;
${if dependency ? targets
then stdenv.lib.concatMapStrings (target: "server ${target.properties.hostname}:${toString dependency.port};\n") dependency.targets
else "server localhost:${dependency.port};\n"
}
}
''
) dependencies}
server {
${stdenv.lib.concatMapStrings (dependency:
''
location ${dependency.baseURL} {
proxy_pass http://${dependency.name};
${stdenv.lib.optionalString enableCache ''
proxy_cache ${dependency.name};
proxy_cache_key $host$uri$is_args$args;
proxy_cache_valid 200 5m;
proxy_cache_lock on;
''}
}
'') dependencies}
}
}
'';
};
}

View File

@ -1,23 +1,28 @@
{createManagedProcess, stdenv, nginx, stateDir, runtimeDir, forceDisableUserChange}:
{createManagedProcess, stdenv, nginx, stateDir, runtimeDir, cacheDir, forceDisableUserChange}:
{configFile, dependencies ? [], instanceSuffix ? ""}:
let
instanceName = "nginx${instanceSuffix}";
user = instanceName;
group = instanceName;
nginxLogDir = "${stateDir}/${instanceName}/logs";
nginxStateDir = "${stateDir}/${instanceName}";
nginxLogDir = "${nginxStateDir}/logs";
nginxCacheDir = "${cacheDir}/${instanceName}";
in
createManagedProcess {
name = instanceName;
description = "Nginx";
initialize = ''
mkdir -p ${nginxLogDir}
mkdir -p ${nginxCacheDir}
${stdenv.lib.optionalString (!forceDisableUserChange) ''
chown ${user}:${group} ${nginxLogDir}
chown ${user}:${group} ${nginxCacheDir}
''}
'';
process = "${nginx}/bin/nginx";
args = [ "-p" "${stateDir}/${instanceName}" "-c" configFile ];
args = [ "-p" "${nginxStateDir}" "-c" configFile ];
foregroundProcessExtraArgs = [ "-g" "daemon off;" ];
daemonExtraArgs = [ "-g" "pid ${runtimeDir}/${instanceName}.pid;" ];

View File

@ -21,9 +21,4 @@ in
webapp = import webappExpr {
inherit createManagedProcess runtimeDir;
};
nginxReverseProxy = import ./nginx-reverse-proxy.nix {
inherit createManagedProcess stateDir logDir runtimeDir forceDisableUserChange;
inherit (pkgs) stdenv writeTextFile nginx;
};
}

View File

@ -3,6 +3,7 @@
, stateDir ? "/var"
, runtimeDir ? "${stateDir}/run"
, logDir ? "${stateDir}/log"
, cacheDir ? "${stateDir}/cache"
, tmpDir ? (if stateDir == "/var" then "/tmp" else "${stateDir}/tmp")
, forceDisableUserChange ? false
, processManager ? "sysvinit"
@ -10,6 +11,10 @@
}:
let
sharedConstructors = import ../services-agnostic/constructors.nix {
inherit pkgs stateDir runtimeDir logDir cacheDir tmpDir forceDisableUserChange processManager;
};
constructors = import ./constructors.nix {
inherit pkgs stateDir runtimeDir logDir tmpDir forceDisableUserChange processManager webappMode;
};
@ -58,7 +63,7 @@ rec {
nginxReverseProxy = rec {
port = 8080;
pkg = constructors.nginxReverseProxy {
pkg = sharedConstructors.nginxReverseProxyHostBased {
webapps = [ webapp1 webapp2 webapp3 webapp4 ];
inherit port;
} {};
@ -87,7 +92,7 @@ rec {
nginxReverseProxy2 = rec {
port = 8081;
pkg = constructors.nginxReverseProxy {
pkg = sharedConstructors.nginxReverseProxyHostBased {
webapps = [ webapp5 webapp6 ];
inherit port;
instanceSuffix = "2";

View File

@ -3,6 +3,7 @@
, stateDir ? "/var"
, runtimeDir ? "${stateDir}/run"
, logDir ? "${stateDir}/log"
, cacheDir ? "${stateDir}/cache"
, tmpDir ? (if stateDir == "/var" then "/tmp" else "${stateDir}/tmp")
, forceDisableUserChange ? false
, processManager
@ -10,6 +11,10 @@
}:
let
sharedConstructors = import ../services-agnostic/constructors.nix {
inherit pkgs stateDir runtimeDir logDir cacheDir tmpDir forceDisableUserChange processManager;
};
constructors = import ./constructors.nix {
inherit pkgs stateDir runtimeDir logDir tmpDir forceDisableUserChange processManager webappMode;
};
@ -27,7 +32,7 @@ rec {
nginxReverseProxy = rec {
port = 8080;
pkg = constructors.nginxReverseProxy {
pkg = sharedConstructors.nginxReverseProxyHostBased {
webapps = [ webapp ];
inherit port;
} {};

View File

@ -2,12 +2,17 @@
, stateDir ? "/var"
, runtimeDir ? "${stateDir}/run"
, logDir ? "${stateDir}/log"
, cacheDir ? "${stateDir}/cache"
, tmpDir ? (if stateDir == "/var" then "/tmp" else "${stateDir}/tmp")
, forceDisableUserChange ? false
, processManager ? null # "sysvinit"
}:
let
sharedConstructors = import ../services-agnostic/constructors.nix {
inherit pkgs stateDir runtimeDir logDir cacheDir tmpDir forceDisableUserChange processManager;
};
constructors = import ./constructors.nix {
inherit pkgs stateDir runtimeDir logDir tmpDir forceDisableUserChange processManager;
webappMode = null;
@ -20,6 +25,7 @@ let
else if processManager == "supervisord" then "supervisord-program"
else if processManager == "bsdrc" then "bsdrc-script"
else if processManager == "cygrunsrv" then "cygrunsrv-service"
else if processManager == "launchd" then "launchd-daemon"
else throw "Unknown process manager: ${processManager}";
in
rec {
@ -36,7 +42,7 @@ rec {
nginxReverseProxy = rec {
name = "nginxReverseProxy";
port = 8080;
pkg = constructors.nginxReverseProxy {
pkg = sharedConstructors.nginxReverseProxyHostBased {
inherit port;
};
dependsOn = {