From 148c97078e9d138fb2b102bbb497fdacf253a0d4 Mon Sep 17 00:00:00 2001 From: Jens Giessmann <jg@handcode.de> Date: Wed, 11 Apr 2018 21:03:17 +0200 Subject: [PATCH] optionally define different status code for POST requests, cherry picked from https://github.com/schmunk42/docker-nginx-redirect/pull/8 --- README.md | 10 +++++++--- default.conf | 5 +++++ docker-compose.yml | 5 ++++- run.sh | 4 ++++ 4 files changed, 20 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 8820d33..f78516c 100644 --- a/README.md +++ b/README.md @@ -12,14 +12,18 @@ A very simple container to redirect HTTP traffic to another server, based on `ng - `SERVER_REDIRECT` - server to redirect to, eg. `www.example.com` - `SERVER_NAME` - optionally define the server name to listen on eg. `~^www.(?<subdomain>.+).example.com` - useful for capturing variable to use in server_redirect. + - useful for capturing variable to use in server_redirect. - `SERVER_REDIRECT_PATH` - optionally define path to redirect all requests eg. `/landingpage` - if not set nginx var `$request_uri` is used + - if not set nginx var `$request_uri` is used - `SERVER_REDIRECT_SCHEME` - optionally define scheme to redirect to - if not set nginx var `$scheme` is used + - if not set nginx var `$scheme` is used - `SERVER_REDIRECT_CODE` - optionally define the http status code to use for redirection - if not set or not in list of allowed codes 301 is used as default - allowed Codes are: 301, 302, 303, 307, 308 + - `SERVER_REDIRECT_POST_CODE` - optionally define the http code to use for POST redirection + - useful if client should not change the request method from POST to GET + - if not set or not in allowed Codes `SERVER_REDIRECT_CODE` is used + - so per default all requests will be redirected with the same status code See also `docker-compose.yml` file. diff --git a/default.conf b/default.conf index 6e0b0d6..a02eed7 100644 --- a/default.conf +++ b/default.conf @@ -2,6 +2,11 @@ server { listen 80; server_name ${SERVER_NAME}; + # cherry picked from https://github.com/schmunk42/docker-nginx-redirect/pull/8 + if ($request_method = POST) { + return ${SERVER_REDIRECT_POST_CODE} ${SERVER_REDIRECT_SCHEME}://${SERVER_REDIRECT}${SERVER_REDIRECT_PATH}; + } + return ${SERVER_REDIRECT_CODE} ${SERVER_REDIRECT_SCHEME}://${SERVER_REDIRECT}${SERVER_REDIRECT_PATH}; # redirect server error pages to the static page /50x.html diff --git a/docker-compose.yml b/docker-compose.yml index 31f0501..15e2b17 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -12,4 +12,7 @@ to: #- SERVER_REDIRECT_SCHEME=https # optionally define the http code to use for redirection # allowed Codes are: 301, 302, 303, 307, 308, default is 301 - #- SERVER_REDIRECT_CODE=302 + #- SERVER_REDIRECT_CODE=301 + # optionally define the http code to redirect POST requests + # if not set or not in allowed Codes, SERVER_REDIRECT_CODE will be used + #- SERVER_REDIRECT_POST_CODE= diff --git a/run.sh b/run.sh index a366e5e..20a3ee9 100644 --- a/run.sh +++ b/run.sh @@ -14,6 +14,9 @@ fi # allowed Status Codes are: 301, 302, 303, 307, 308 expr match "$SERVER_REDIRECT_CODE" '30[12378]$' > /dev/null || SERVER_REDIRECT_CODE='301' +# set redirect code from optional ENV var for POST requests +expr match "$SERVER_REDIRECT_POST_CODE" '30[012378]$' > /dev/null || SERVER_REDIRECT_POST_CODE=$SERVER_REDIRECT_CODE + # set redirect path from optional ENV var if [ ! -n "$SERVER_REDIRECT_PATH" ] ; then SERVER_REDIRECT_PATH='$request_uri' @@ -27,6 +30,7 @@ fi sed -i "s|\${SERVER_REDIRECT}|${SERVER_REDIRECT}|" /etc/nginx/conf.d/default.conf sed -i "s|\${SERVER_NAME}|${SERVER_NAME}|" /etc/nginx/conf.d/default.conf sed -i "s|\${SERVER_REDIRECT_CODE}|${SERVER_REDIRECT_CODE}|" /etc/nginx/conf.d/default.conf +sed -i "s|\${SERVER_REDIRECT_POST_CODE}|${SERVER_REDIRECT_POST_CODE}|" /etc/nginx/conf.d/default.conf sed -i "s|\${SERVER_REDIRECT_PATH}|${SERVER_REDIRECT_PATH}|" /etc/nginx/conf.d/default.conf sed -i "s|\${SERVER_REDIRECT_SCHEME}|${SERVER_REDIRECT_SCHEME}|" /etc/nginx/conf.d/default.conf -- GitLab