From ba13e8bb5dce7fae318fa66e2513ba59bd9da4a4 Mon Sep 17 00:00:00 2001
From: mko <code@m-ko-x.de>
Date: Tue, 10 Feb 2015 22:52:04 +0100
Subject: [PATCH 1/6] added rewrite for 'www'-prefixed requests

---
 README.md  |  8 ++++++++
 nginx.tmpl | 10 ++++++++++
 2 files changed, 18 insertions(+)

diff --git a/README.md b/README.md
index d80e828..61fc8e6 100644
--- a/README.md
+++ b/README.md
@@ -1,5 +1,13 @@
 ![nginx 1.7.8](https://img.shields.io/badge/nginx-1.7.8-brightgreen.svg) ![License MIT](https://img.shields.io/badge/license-MIT-blue.svg)
 
+##Modifications
+
+To make Jason's nginx-proxy work for me, I changed:
+
+- added rewrite of 'www'-prefixed domains to 301 without prefix for both https and http protocol
+
+##Original 
+
 nginx-proxy sets up a container running nginx and [docker-gen][1].  docker-gen generates reverse proxy configs for nginx and reloads nginx when containers are started and stopped.
 
 See [Automated Nginx Reverse Proxy for Docker][2] for why you might want to use this.
diff --git a/nginx.tmpl b/nginx.tmpl
index d373ce3..d473290 100644
--- a/nginx.tmpl
+++ b/nginx.tmpl
@@ -83,6 +83,11 @@ upstream {{ $host }} {
 
 {{ if (and (ne $cert "") (exists (printf "/etc/nginx/certs/%s.crt" $cert)) (exists (printf "/etc/nginx/certs/%s.key" $cert))) }}
 
+server {
+    server_name  www.{{ $host }};
+    rewrite ^(.*) https://{{ $host }}$1 permanent;
+}
+
 server {
 	server_name {{ $host }};
 	rewrite ^(.*) https://{{ $host }}$1 permanent;
@@ -114,6 +119,11 @@ server {
 }
 {{ else }}
 
+server {
+    server_name  www.{{ $host }};
+    rewrite ^(.*) http://{{ $host }}$1 permanent;
+}
+
 server {
 	server_name {{ $host }};
 

From 613b517f6ffdc91feea26b400938d0c961dc5443 Mon Sep 17 00:00:00 2001
From: mko <code@m-ko-x.de>
Date: Tue, 17 Feb 2015 22:01:57 +0100
Subject: [PATCH 2/6] Increase client max body size to 10MB

---
 Dockerfile | 7 ++++---
 1 file changed, 4 insertions(+), 3 deletions(-)

diff --git a/Dockerfile b/Dockerfile
index 48a6949..2936e4a 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -1,7 +1,7 @@
 FROM nginx:1.7.8
-MAINTAINER Jason Wilder jwilder@litl.com
+MAINTAINER https://m-ko-x.de Markus Kosmal <code@m-ko-x.de>
 
-# Install wget and install/updates certificates
+# install packages
 RUN apt-get update \
  && apt-get install -y -q --no-install-recommends \
     ca-certificates \
@@ -12,7 +12,8 @@ RUN apt-get update \
 # Configure Nginx and apply fix for very long server names
 RUN echo "daemon off;" >> /etc/nginx/nginx.conf \
  && sed -i 's/^http {/&\n    server_names_hash_bucket_size 128;/g' /etc/nginx/nginx.conf
-
+ && sed -i 's/^http {/&\n    client_max_body_size 10m;/g' /etc/nginx/nginx.conf 
+ 
  # Install Forego
 RUN wget -P /usr/local/bin https://godist.herokuapp.com/projects/ddollar/forego/releases/current/linux-amd64/forego \
  && chmod u+x /usr/local/bin/forego

From b15900b28b640ba6c4a2f700386630f93ccc702a Mon Sep 17 00:00:00 2001
From: mko <code@m-ko-x.de>
Date: Tue, 17 Feb 2015 22:27:18 +0100
Subject: [PATCH 3/6] fix replace

---
 Dockerfile | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/Dockerfile b/Dockerfile
index 2936e4a..6c3d6c4 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -12,7 +12,7 @@ RUN apt-get update \
 # Configure Nginx and apply fix for very long server names
 RUN echo "daemon off;" >> /etc/nginx/nginx.conf \
  && sed -i 's/^http {/&\n    server_names_hash_bucket_size 128;/g' /etc/nginx/nginx.conf
- && sed -i 's/^http {/&\n    client_max_body_size 10m;/g' /etc/nginx/nginx.conf 
+ && sed -i 's/#gzip  on;/&\n    client_max_body_size 10m;/g' /etc/nginx/nginx.conf 
  
  # Install Forego
 RUN wget -P /usr/local/bin https://godist.herokuapp.com/projects/ddollar/forego/releases/current/linux-amd64/forego \

From 4c3122effe1130a3a6ca02d9a568f5b9c713630a Mon Sep 17 00:00:00 2001
From: mko <code@m-ko-x.de>
Date: Tue, 17 Feb 2015 23:00:22 +0100
Subject: [PATCH 4/6] hard coded max size

---
 Dockerfile | 1 -
 nginx.tmpl | 5 +++++
 2 files changed, 5 insertions(+), 1 deletion(-)

diff --git a/Dockerfile b/Dockerfile
index 6c3d6c4..221a0a1 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -12,7 +12,6 @@ RUN apt-get update \
 # Configure Nginx and apply fix for very long server names
 RUN echo "daemon off;" >> /etc/nginx/nginx.conf \
  && sed -i 's/^http {/&\n    server_names_hash_bucket_size 128;/g' /etc/nginx/nginx.conf
- && sed -i 's/#gzip  on;/&\n    client_max_body_size 10m;/g' /etc/nginx/nginx.conf 
  
  # Install Forego
 RUN wget -P /usr/local/bin https://godist.herokuapp.com/projects/ddollar/forego/releases/current/linux-amd64/forego \
diff --git a/nginx.tmpl b/nginx.tmpl
index d473290..9ad9791 100644
--- a/nginx.tmpl
+++ b/nginx.tmpl
@@ -84,16 +84,19 @@ upstream {{ $host }} {
 {{ if (and (ne $cert "") (exists (printf "/etc/nginx/certs/%s.crt" $cert)) (exists (printf "/etc/nginx/certs/%s.key" $cert))) }}
 
 server {
+    client_max_body_size 1000m;
     server_name  www.{{ $host }};
     rewrite ^(.*) https://{{ $host }}$1 permanent;
 }
 
 server {
+    client_max_body_size 1000m;
 	server_name {{ $host }};
 	rewrite ^(.*) https://{{ $host }}$1 permanent;
 }
 
 server {
+    client_max_body_size 1000m;
 	server_name {{ $host }};
 	listen 443 ssl;
 
@@ -120,11 +123,13 @@ server {
 {{ else }}
 
 server {
+    client_max_body_size 1000m;
     server_name  www.{{ $host }};
     rewrite ^(.*) http://{{ $host }}$1 permanent;
 }
 
 server {
+    client_max_body_size 1000m;
 	server_name {{ $host }};
 
 	location / {

From 7984b7a7627ee8f22caee661177131a84406c89c Mon Sep 17 00:00:00 2001
From: mko <code@m-ko-x.de>
Date: Sun, 22 Feb 2015 10:31:23 +0100
Subject: [PATCH 5/6] extended configuration options

Optionally configure via new env vars:
- max client body size
- basic authentication message in prompt
- ssl session timeout
- http no service status code

- auto redirect according to prefixes
- set the prefix to auto aim at
- set redirect direction from prefixed to without-prefix and vice-versa

default behaviour stays as before
---
 Dockerfile | 18 +++++++++++++++++
 nginx.tmpl | 59 +++++++++++++++++++++++++++++++++++++-----------------
 2 files changed, 59 insertions(+), 18 deletions(-)

diff --git a/Dockerfile b/Dockerfile
index 221a0a1..a02c5bc 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -1,6 +1,24 @@
 FROM nginx:1.7.8
 MAINTAINER https://m-ko-x.de Markus Kosmal <code@m-ko-x.de>
 
+# set max size within a body
+ENV GLOB_MAX_BODY_SIZE "10m"
+# set default msg set within basic auth msg
+ENV GLOB_AUTH_MSG "Restricted :"
+# set default session timeout
+ENV GLOB_SSL_SESSION_TIMEOUT "5m"
+# default return code for errors
+ENV GLOB_HTTP_NO_SERVICE "503"
+
+# enable some kind of prefix redirection
+ENV AUTO_REDIRECT_WITH_PREFIX_ENABLED false
+# set prefix to be used for auto redirect
+ENV AUTO_REDIRECT_PREFIX "www"
+# set direction
+# - 0: redirect from prefix to non-prefix
+# - 1: redirect from non-prefix to prefix
+ENV AUTO_REDIRECT_DIRECTION 0
+
 # install packages
 RUN apt-get update \
  && apt-get install -y -q --no-install-recommends \
diff --git a/nginx.tmpl b/nginx.tmpl
index 9ad9791..bf3125e 100644
--- a/nginx.tmpl
+++ b/nginx.tmpl
@@ -21,6 +21,8 @@ log_format vhost '$host $remote_addr - $remote_user [$time_local] '
 access_log /proc/self/fd/1 vhost;
 error_log /proc/self/fd/2;
 
+client_max_body_size {{ "Env.MAX_BODY_SIZE" }};
+
 # HTTP 1.1 support
 proxy_http_version 1.1;
 proxy_buffering off;
@@ -34,7 +36,7 @@ proxy_set_header X-Forwarded-Proto $proxy_x_forwarded_proto;
 server {
 	listen 80 default_server;
 	server_name _; # This is just an invalid value which will never trigger on a real hostname.
-	return 503;
+	return "Env.GLOB_HTTP_NO_SERVICE";
 }
 
 {{ range $host, $containers := groupByMulti $ "Env.VIRTUAL_HOST" "," }}
@@ -83,20 +85,34 @@ upstream {{ $host }} {
 
 {{ if (and (ne $cert "") (exists (printf "/etc/nginx/certs/%s.crt" $cert)) (exists (printf "/etc/nginx/certs/%s.key" $cert))) }}
 
-server {
-    client_max_body_size 1000m;
-    server_name  www.{{ $host }};
-    rewrite ^(.*) https://{{ $host }}$1 permanent;
-}
+
+{{ if (eq "Env.AUTO_REDIRECT_WITH_PREFIX_ENABLED" true) }}
 
 server {
-    client_max_body_size 1000m;
+
+{{ if (eq "Env.AUTO_REDIRECT_DIRECTION" 0) }}
+
+    server_name  {{ "Env.AUTO_REDIRECT_PREFIX" }}.{{ $host }};
+    rewrite ^(.*) https://{{ $host }}$1 permanent;
+    
+{{ else }}
+
+    server_name {{ $host }};
+    rewrite ^(.*) https://{{ "Env.AUTO_REDIRECT_PREFIX" }}.{{ $host }}$1 permanent;
+    
+{{ end }} # AUTO_REDIRECT_DIRECTION end
+
+}
+
+{{ end }} # AUTO_REDIRECT_TARGET end
+
+# enforce ssl if enabled
+server {
 	server_name {{ $host }};
 	rewrite ^(.*) https://{{ $host }}$1 permanent;
 }
 
 server {
-    client_max_body_size 1000m;
 	server_name {{ $host }};
 	listen 443 ssl;
 
@@ -104,7 +120,7 @@ server {
 	ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA;
 
 	ssl_prefer_server_ciphers on;
-	ssl_session_timeout 5m;
+	ssl_session_timeout {{ "Env.GLOB_SSL_SESSION_TIMEOUT" }};
 	ssl_session_cache shared:SSL:50m;
 
 	ssl_certificate /etc/nginx/certs/{{ (printf "%s.crt" $cert) }};
@@ -115,27 +131,34 @@ server {
 	location / {
 		proxy_pass http://{{ $host }};
 		{{ if (exists (printf "/etc/nginx/htpasswd/%s" $host)) }}
-		auth_basic	"Restricted {{ $host }}";
+		auth_basic	'{{ "Env.GLOB_AUTH_MSG" }} {{ $host }}';
 		auth_basic_user_file	{{ (printf "/etc/nginx/htpasswd/%s" $host) }};
 		{{ end }}
 	}
 }
 {{ else }}
 
-server {
-    client_max_body_size 1000m;
-    server_name  www.{{ $host }};
-    rewrite ^(.*) http://{{ $host }}$1 permanent;
-}
+{{ if (eq "Env.AUTO_REDIRECT_WITH_PREFIX_ENABLED" true) }}
+
+server {
+    {{ if (eq "Env.AUTO_REDIRECT_DIRECTION" 0) }}
+    server_name  {{ "Env.AUTO_REDIRECT_PREFIX" }}.{{ $host }};
+    rewrite ^(.*) http://{{ $host }}$1 permanent;
+    {{ else }}
+    server_name {{ $host }};
+    rewrite ^(.*) http://{{ "Env.AUTO_REDIRECT_PREFIX" }}.{{ $host }}$1 permanent;
+    {{ end }} # AUTO_REDIRECT_DIRECTION end
+}
+
+{{ end }} # AUTO_REDIRECT_WITH_PREFIX_ENABLED end
 
 server {
-    client_max_body_size 1000m;
 	server_name {{ $host }};
 
 	location / {
 		proxy_pass http://{{ $host }};
 		{{ if (exists (printf "/etc/nginx/htpasswd/%s" $host)) }}
-		auth_basic	"Restricted {{ $host }}";
+		auth_basic	'{{ "Env.GLOB_AUTH_MSG" }} {{ $host }}';
 		auth_basic_user_file	{{ (printf "/etc/nginx/htpasswd/%s" $host) }};
 		{{ end }}
 	}
@@ -144,7 +167,7 @@ server {
 server {
 	server_name {{ $host }};
 	listen 443 ssl;
-	return 503;
+	return "Env.GLOB_HTTP_NO_SERVICE";
 
 	{{ if (and (exists "/etc/nginx/certs/default.crt") (exists "/etc/nginx/certs/default.key")) }}
 	ssl_certificate /etc/nginx/certs/default.crt;

From b1322d8771fefe3fbc78d9466277b7430e69453c Mon Sep 17 00:00:00 2001
From: mko <code@m-ko-x.de>
Date: Sun, 22 Feb 2015 10:38:06 +0100
Subject: [PATCH 6/6] Revert "extended configuration options"

This reverts commit 7984b7a7627ee8f22caee661177131a84406c89c.
---
 Dockerfile | 18 ------------------
 nginx.tmpl | 47 ++++++++++++-----------------------------------
 2 files changed, 12 insertions(+), 53 deletions(-)

diff --git a/Dockerfile b/Dockerfile
index a02c5bc..221a0a1 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -1,24 +1,6 @@
 FROM nginx:1.7.8
 MAINTAINER https://m-ko-x.de Markus Kosmal <code@m-ko-x.de>
 
-# set max size within a body
-ENV GLOB_MAX_BODY_SIZE "10m"
-# set default msg set within basic auth msg
-ENV GLOB_AUTH_MSG "Restricted :"
-# set default session timeout
-ENV GLOB_SSL_SESSION_TIMEOUT "5m"
-# default return code for errors
-ENV GLOB_HTTP_NO_SERVICE "503"
-
-# enable some kind of prefix redirection
-ENV AUTO_REDIRECT_WITH_PREFIX_ENABLED false
-# set prefix to be used for auto redirect
-ENV AUTO_REDIRECT_PREFIX "www"
-# set direction
-# - 0: redirect from prefix to non-prefix
-# - 1: redirect from non-prefix to prefix
-ENV AUTO_REDIRECT_DIRECTION 0
-
 # install packages
 RUN apt-get update \
  && apt-get install -y -q --no-install-recommends \
diff --git a/nginx.tmpl b/nginx.tmpl
index bf3125e..9ad9791 100644
--- a/nginx.tmpl
+++ b/nginx.tmpl
@@ -21,8 +21,6 @@ log_format vhost '$host $remote_addr - $remote_user [$time_local] '
 access_log /proc/self/fd/1 vhost;
 error_log /proc/self/fd/2;
 
-client_max_body_size {{ "Env.MAX_BODY_SIZE" }};
-
 # HTTP 1.1 support
 proxy_http_version 1.1;
 proxy_buffering off;
@@ -36,7 +34,7 @@ proxy_set_header X-Forwarded-Proto $proxy_x_forwarded_proto;
 server {
 	listen 80 default_server;
 	server_name _; # This is just an invalid value which will never trigger on a real hostname.
-	return "Env.GLOB_HTTP_NO_SERVICE";
+	return 503;
 }
 
 {{ range $host, $containers := groupByMulti $ "Env.VIRTUAL_HOST" "," }}
@@ -85,34 +83,20 @@ upstream {{ $host }} {
 
 {{ if (and (ne $cert "") (exists (printf "/etc/nginx/certs/%s.crt" $cert)) (exists (printf "/etc/nginx/certs/%s.key" $cert))) }}
 
-
-{{ if (eq "Env.AUTO_REDIRECT_WITH_PREFIX_ENABLED" true) }}
-
 server {
-
-{{ if (eq "Env.AUTO_REDIRECT_DIRECTION" 0) }}
-
-    server_name  {{ "Env.AUTO_REDIRECT_PREFIX" }}.{{ $host }};
+    client_max_body_size 1000m;
+    server_name  www.{{ $host }};
     rewrite ^(.*) https://{{ $host }}$1 permanent;
-    
-{{ else }}
-
-    server_name {{ $host }};
-    rewrite ^(.*) https://{{ "Env.AUTO_REDIRECT_PREFIX" }}.{{ $host }}$1 permanent;
-    
-{{ end }} # AUTO_REDIRECT_DIRECTION end
-
 }
 
-{{ end }} # AUTO_REDIRECT_TARGET end
-
-# enforce ssl if enabled
 server {
+    client_max_body_size 1000m;
 	server_name {{ $host }};
 	rewrite ^(.*) https://{{ $host }}$1 permanent;
 }
 
 server {
+    client_max_body_size 1000m;
 	server_name {{ $host }};
 	listen 443 ssl;
 
@@ -120,7 +104,7 @@ server {
 	ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA;
 
 	ssl_prefer_server_ciphers on;
-	ssl_session_timeout {{ "Env.GLOB_SSL_SESSION_TIMEOUT" }};
+	ssl_session_timeout 5m;
 	ssl_session_cache shared:SSL:50m;
 
 	ssl_certificate /etc/nginx/certs/{{ (printf "%s.crt" $cert) }};
@@ -131,34 +115,27 @@ server {
 	location / {
 		proxy_pass http://{{ $host }};
 		{{ if (exists (printf "/etc/nginx/htpasswd/%s" $host)) }}
-		auth_basic	'{{ "Env.GLOB_AUTH_MSG" }} {{ $host }}';
+		auth_basic	"Restricted {{ $host }}";
 		auth_basic_user_file	{{ (printf "/etc/nginx/htpasswd/%s" $host) }};
 		{{ end }}
 	}
 }
 {{ else }}
 
-{{ if (eq "Env.AUTO_REDIRECT_WITH_PREFIX_ENABLED" true) }}
-
 server {
-    {{ if (eq "Env.AUTO_REDIRECT_DIRECTION" 0) }}
-    server_name  {{ "Env.AUTO_REDIRECT_PREFIX" }}.{{ $host }};
+    client_max_body_size 1000m;
+    server_name  www.{{ $host }};
     rewrite ^(.*) http://{{ $host }}$1 permanent;
-    {{ else }}
-    server_name {{ $host }};
-    rewrite ^(.*) http://{{ "Env.AUTO_REDIRECT_PREFIX" }}.{{ $host }}$1 permanent;
-    {{ end }} # AUTO_REDIRECT_DIRECTION end
 }
 
-{{ end }} # AUTO_REDIRECT_WITH_PREFIX_ENABLED end
-
 server {
+    client_max_body_size 1000m;
 	server_name {{ $host }};
 
 	location / {
 		proxy_pass http://{{ $host }};
 		{{ if (exists (printf "/etc/nginx/htpasswd/%s" $host)) }}
-		auth_basic	'{{ "Env.GLOB_AUTH_MSG" }} {{ $host }}';
+		auth_basic	"Restricted {{ $host }}";
 		auth_basic_user_file	{{ (printf "/etc/nginx/htpasswd/%s" $host) }};
 		{{ end }}
 	}
@@ -167,7 +144,7 @@ server {
 server {
 	server_name {{ $host }};
 	listen 443 ssl;
-	return "Env.GLOB_HTTP_NO_SERVICE";
+	return 503;
 
 	{{ if (and (exists "/etc/nginx/certs/default.crt") (exists "/etc/nginx/certs/default.key")) }}
 	ssl_certificate /etc/nginx/certs/default.crt;