From 1bf47f4dbf2870db0102c154916c87fa595cf5a9 Mon Sep 17 00:00:00 2001 From: SilverFire - Dmitry Naumenko Date: Thu, 21 Apr 2022 17:33:45 +0300 Subject: [PATCH] Add X-Forwarded-Host header passing --- nginx.tmpl | 8 ++++++++ test/test_headers/test_http.py | 12 ++++++++++++ 2 files changed, 20 insertions(+) diff --git a/nginx.tmpl b/nginx.tmpl index 3ac52f8..70123c6 100644 --- a/nginx.tmpl +++ b/nginx.tmpl @@ -79,6 +79,13 @@ map $http_x_forwarded_port $proxy_x_forwarded_port { '' $server_port; } +# If we receive X-Forwarded-Host, pass it through; otherwise, pass along the +# host the client connected to +map $http_x_forwarded_host $proxy_x_forwarded_host { + default $http_x_forwarded_host; + '' $http_host; +} + # If we receive Upgrade, set Connection to "upgrade"; otherwise, delete any # Connection header that may have been passed to this server map $http_upgrade $proxy_connection { @@ -127,6 +134,7 @@ proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection $proxy_connection; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; +proxy_set_header X-Forwarded-Host $proxy_x_forwarded_host; proxy_set_header X-Forwarded-Proto $proxy_x_forwarded_proto; proxy_set_header X-Forwarded-Ssl $proxy_x_forwarded_ssl; proxy_set_header X-Forwarded-Port $proxy_x_forwarded_port; diff --git a/test/test_headers/test_http.py b/test/test_headers/test_http.py index 2799262..0b767b3 100644 --- a/test/test_headers/test_http.py +++ b/test/test_headers/test_http.py @@ -57,6 +57,18 @@ def test_X_Forwarded_Ssl_is_overwritten(docker_compose, nginxproxy): assert r.status_code == 200 assert "X-Forwarded-Ssl: off\n" in r.text +##### Testing the handling of X-Forwarded-Host ##### + +def test_X_Forwarded_Host_is_generated(docker_compose, nginxproxy): + r = nginxproxy.get("http://web.nginx-proxy.tld/headers") + assert r.status_code == 200 + assert "X-Forwarded-Host: web.nginx-proxy.tld\n" in r.text + +def test_X_Forwarded_Host_is_overwritten(docker_compose, nginxproxy): + r = nginxproxy.get("http://web.nginx-proxy.tld/headers", headers={'X-Forwarded-Host': 'foo.bar.baz'}) + assert r.status_code == 200 + assert "X-Forwarded-Host: web.nginx-proxy.tld\n" in r.text + ##### Other headers