From c1a785642f7feeb193eda1c737d0ada5efddce02 Mon Sep 17 00:00:00 2001 From: Weiyan Shao Date: Tue, 29 Jan 2019 10:13:04 +0100 Subject: [PATCH] Stop prefixing redirect target with https:// unless necessary. Also release 1.5.1 --- README.md | 17 +++++++++++++---- fs_overlay/etc/cont-init.d/00-welcome | 2 +- fs_overlay/opt/certs_manager/models/domain.rb | 10 +++++++++- fs_overlay/var/lib/nginx-conf/default.conf.erb | 2 +- .../var/lib/nginx-conf/default.ssl.conf.erb | 2 +- spec/models/domain_spec.rb | 2 ++ 6 files changed, 27 insertions(+), 8 deletions(-) diff --git a/README.md b/README.md index 8e4daac..73c0cd2 100644 --- a/README.md +++ b/README.md @@ -144,15 +144,24 @@ Once you are done testing, you can deploy your application stack to the server. ### Redirections -HTTPS-PORTAL support quick setup for redirections. It is deliberately made to -support https targets only because otherwise it'd be against the idea of this project. +HTTPS-PORTAL support quick setup for redirections. ```yaml https-portal: # ... environment: - STAGE: local - DOMAINS: 'example.com => https://target.example.com/foo/bar' # Notice it's "=>" instead of the normal "->" + DOMAINS: 'example.com => https://target.example.com' # Notice it's "=>" instead of the normal "->" +``` + +All paths will be redirected to the target. E.g. `https://example.com/foo/bar` will be 301 redirected to `https://target.example.com/foo/bar`. + +A common use case is to redirect `www.example.com` to `example.com`: + +```yaml +https-portal: + # ... + environment: + DOMAINS: 'www.example.com => https://example.com' # Notice it's "=>" instead of the normal "->" ``` ### Automatic Container Discovery diff --git a/fs_overlay/etc/cont-init.d/00-welcome b/fs_overlay/etc/cont-init.d/00-welcome index 9bcfb8c..2893622 100644 --- a/fs_overlay/etc/cont-init.d/00-welcome +++ b/fs_overlay/etc/cont-init.d/00-welcome @@ -2,6 +2,6 @@ echo ' ======================================== -HTTPS-PORTAL v1.5.0 +HTTPS-PORTAL v1.5.1 ======================================== ' diff --git a/fs_overlay/opt/certs_manager/models/domain.rb b/fs_overlay/opt/certs_manager/models/domain.rb index 6053ee0..382a2f2 100644 --- a/fs_overlay/opt/certs_manager/models/domain.rb +++ b/fs_overlay/opt/certs_manager/models/domain.rb @@ -77,7 +77,15 @@ def upstream end def redirect_target_url - parsed_descriptor[:upstream] if parsed_descriptor[:mode] == '=>' + return unless parsed_descriptor[:mode] == '=>' + + url = parsed_descriptor[:upstream] + + if url.start_with? "http" + return url + else + return "https://" + url + end end def stage diff --git a/fs_overlay/var/lib/nginx-conf/default.conf.erb b/fs_overlay/var/lib/nginx-conf/default.conf.erb index 34b8ded..b182166 100644 --- a/fs_overlay/var/lib/nginx-conf/default.conf.erb +++ b/fs_overlay/var/lib/nginx-conf/default.conf.erb @@ -4,7 +4,7 @@ server { <% if domain.redirect_target_url %> location / { - return 301 https://<%= domain.redirect_target_url %>$request_uri; + return 301 <%= domain.redirect_target_url %>$request_uri; } <% else %> location / { diff --git a/fs_overlay/var/lib/nginx-conf/default.ssl.conf.erb b/fs_overlay/var/lib/nginx-conf/default.ssl.conf.erb index 34e7a74..95f101f 100644 --- a/fs_overlay/var/lib/nginx-conf/default.ssl.conf.erb +++ b/fs_overlay/var/lib/nginx-conf/default.ssl.conf.erb @@ -52,7 +52,7 @@ server { } <% elsif domain.redirect_target_url %> location / { - return 301 https://<%= domain.redirect_target_url %>$request_uri; + return 301 <%= domain.redirect_target_url %>$request_uri; } <% else %> location / { diff --git a/spec/models/domain_spec.rb b/spec/models/domain_spec.rb index 5854ab4..28df8d5 100644 --- a/spec/models/domain_spec.rb +++ b/spec/models/domain_spec.rb @@ -18,6 +18,8 @@ ["example.com \n-> http://target \n", 'example.com', 'http://target', nil, 'local', nil, nil, nil], ["example.com\n-> http://target ", 'example.com', 'http://target', nil, 'local', nil, nil, nil], ['example.com => http://target', 'example.com', nil, 'http://target', 'local', nil, nil, nil], + ['example.com => https://target', 'example.com', nil, 'https://target', 'local', nil, nil, nil], + ['example.com => target', 'example.com', nil, 'https://target', 'local', nil, nil, nil], ['example.com=>http://target', 'example.com', nil, 'http://target', 'local', nil, nil, nil], ['example.com -> http://target #staging', 'example.com', 'http://target', nil, 'staging', nil, nil, nil], ['example.com => http://target #staging', 'example.com', nil, 'http://target', 'staging', nil, nil, nil],