From 4e4c3824c5233244bdaac5d05d1c3a2e060e3e0f Mon Sep 17 00:00:00 2001 From: Akihiko Horiuchi <12ff5b8@gmail.com> Date: Sat, 21 Sep 2024 15:34:10 +0900 Subject: [PATCH] feat: support nginx custom parameters --- README.md | 19 ++++++++++++++++++- bin/compile | 2 +- conf/app-nginx.conf.sigil | 23 +++++++++++++++++++++-- 3 files changed, 40 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index c652070..4062125 100644 --- a/README.md +++ b/README.md @@ -30,7 +30,7 @@ You can override the nginx root via setting the `NGINX_ROOT` environment variabl # where the app is named `static-app` # and the root dir is _site dokku config:set static-app NGINX_ROOT=_site -```` +``` ### Default to index for history routing @@ -42,6 +42,23 @@ By default, this buildpack will 404 if a requested file is not found. For static dokku config:set static-app NGINX_DEFAULT_REQUEST=index.html ``` +### Custom nginx directives + +You can configure following nginx directives via environment variables. + +- `NGINX_WORKERS` : `worker_processes` directive +- `NGINX_WORKER_CONNECTIONS` : `worker_connections` directive +- `NGINX_CLIENT_BODY_TIMEOUT` : `client_body_timeout` directive +- `NGINX_CLIENT_MAX_BODY_SIZE` : `client_max_body_size` directive (in MB) + +```shell +# where the app is named `static-app` +dokku config:set static-app NGINX_WORKERS=4 \ + NGINX_WORKER_CONNECTIONS=1024 \ + NGINX_CLIENT_BODY_TIMEOUT=5 \ + NGINX_CLIENT_MAX_BODY_SIZE=1 +``` + ### Custom nginx config file You may completely override the built-in nginx config by placing an `app-nginx.conf.sigil` file in the root, modeled after our own [`conf/app-nginx.conf.sigil`](https://github.com/dokku/buildpack-nginx/blob/master/conf/app-nginx.conf.sigil). This will be used inside of the container, and not by the host Dokku instance. See the [sigil project](https://github.com/gliderlabs/sigil) for more information concerning the sigil format. diff --git a/bin/compile b/bin/compile index 1cf67c7..6e318d0 100755 --- a/bin/compile +++ b/bin/compile @@ -174,7 +174,7 @@ cat <"$BUILD_DIR/start_nginx" #!/usr/bin/env bash rm -f /app/nginx/nginx.conf if [[ -f /app/nginx/app-nginx.conf.sigil ]]; then - /app/sigil/sigil -f /app/nginx/app-nginx.conf.sigil NGINX_ROOT="\$NGINX_ROOT" NGINX_DEFAULT_REQUEST="\$NGINX_DEFAULT_REQUEST" PORT="\$PORT" | cat -s > /app/nginx/nginx.conf + /app/sigil/sigil -f /app/nginx/app-nginx.conf.sigil NGINX_ROOT="\$NGINX_ROOT" NGINX_DEFAULT_REQUEST="\$NGINX_DEFAULT_REQUEST" NGINX_WORKERS="\$NGINX_WORKERS" NGINX_WORKER_CONNECTIONS="\$NGINX_WORKER_CONNECTIONS" NGINX_CLIENT_BODY_TIMEOUT="\$NGINX_CLIENT_BODY_TIMEOUT" NGINX_CLIENT_MAX_BODY_SIZE="\$NGINX_CLIENT_MAX_BODY_SIZE" PORT="\$PORT" | cat -s > /app/nginx/nginx.conf else erb /app/nginx/nginx.conf.erb > /app/nginx/nginx.conf fi diff --git a/conf/app-nginx.conf.sigil b/conf/app-nginx.conf.sigil index 9b7976f..c43f1e3 100644 --- a/conf/app-nginx.conf.sigil +++ b/conf/app-nginx.conf.sigil @@ -1,19 +1,38 @@ -worker_processes 1; +{{ if ne $.NGINX_WORKERS "" }} + worker_processes {{ $.NGINX_WORKERS }}; +{{ else }} + worker_processes 1; +{{ end }} error_log stderr; pid nginx.pid; daemon off; events { - worker_connections 768; + {{ if ne $.NGINX_WORKER_CONNECTIONS "" }} + worker_connections {{ $.NGINX_WORKER_CONNECTIONS }}; + {{ else }} + worker_connections 768; + {{ end }} } http { + {{ if ne $.NGINX_CLIENT_BODY_TIMEOUT "" }} + client_body_timeout {{ $.NGINX_CLIENT_BODY_TIMEOUT }}; + {{ else }} + client_body_timeout 5; + {{ end }} types_hash_max_size 2048; include mime.types; charset UTF-8; + server { listen {{ $.PORT }}; server_name _; + {{ if ne $.NGINX_CLIENT_MAX_BODY_SIZE "" }} + client_max_body_size {{ $.NGINX_CLIENT_MAX_BODY_SIZE }}M; + {{ else }} + client_max_body_size 1M; + {{ end }} {{ if ne $.NGINX_ROOT "" }} root /app/www/{{ $.NGINX_ROOT }}; {{ else }}