Browse Source

fix: Ignore `VIRTUAL_HOST` set to the empty string

Fixes #2144
Richard Hansen 2 years ago
parent
commit
8346b68a28
3 changed files with 51 additions and 0 deletions
  1. 4 0
      nginx.tmpl
  2. 10 0
      test/test_vhost-empty-string.py
  3. 37 0
      test/test_vhost-empty-string.yml

+ 4 - 0
nginx.tmpl

@@ -271,6 +271,10 @@ server {
 {{- range $host, $containers := groupByMulti $globals.containers "Env.VIRTUAL_HOST" "," }}
 
     {{- $host := trim $host }}
+    {{- if not $host }}
+        {{- /* Ignore containers with VIRTUAL_HOST set to the empty string. */}}
+        {{- continue }}
+    {{- end }}
     {{- $is_regexp := hasPrefix "~" $host }}
     {{- $upstream_name := when (or $is_regexp $globals.sha1_upstream_name) (sha1 $host) $host }}
 

+ 10 - 0
test/test_vhost-empty-string.py

@@ -0,0 +1,10 @@
+import re
+
+
+def test_vhost_empty_string(docker_compose, nginxproxy):
+    conf = nginxproxy.get_conf().decode()
+    assert re.search(r"(?m)^\s*server_name\s+web2\.nginx-proxy\.test\s*;", conf)
+    assert re.search(r"(?m)^\s*server_name\s+web3\.nginx-proxy\.test\s*;", conf)
+    assert re.search(r"(?m)^\s*server_name\s+web4a\.nginx-proxy\.test\s*;", conf)
+    assert re.search(r"(?m)^\s*server_name\s+web4b\.nginx-proxy\.test\s*;", conf)
+    assert not re.search(r"(?m)^\s*server_name\s*;", conf)

+ 37 - 0
test/test_vhost-empty-string.yml

@@ -0,0 +1,37 @@
+services:
+  sut:
+    image: nginxproxy/nginx-proxy:test
+    volumes:
+      - /var/run/docker.sock:/tmp/docker.sock:ro
+  web1:
+    image: web
+    expose:
+      - "81"
+    environment:
+      WEB_PORTS: "81"
+      # The space is intentional (should be trimmed).
+      VIRTUAL_HOST: " "
+  web2:
+    image: web
+    expose:
+      - "82"
+    environment:
+      WEB_PORTS: "82"
+      # The space is intentional (should be trimmed).
+      VIRTUAL_HOST: "web2.nginx-proxy.test ,"
+  web3:
+    image: web
+    expose:
+      - "83"
+    environment:
+      WEB_PORTS: "83"
+      # The space is intentional (should be trimmed).
+      VIRTUAL_HOST: " ,web3.nginx-proxy.test"
+  web4:
+    image: web
+    expose:
+      - "84"
+    environment:
+      WEB_PORTS: "84"
+      # The spaces are intentional (should be trimmed).
+      VIRTUAL_HOST: "web4a.nginx-proxy.test, , web4b.nginx-proxy.test"