Subject: [PATCH] services: nginx: Replace 'http-port' and 'https-port' with 'listen'.

From: Clément Lassieur <[email-masked]>
Date: Sat, 9 Dec 2017 20:35:49 +0100

* doc/guix.texi (Web Services, Version Control Services): Update accordingly.
* gnu/services/certbot.scm (certbot-nginx-server-configurations): Likewise.
* gnu/services/version-control.scm (%cgit-configuration-nginx): Likewise.
* gnu/services/web.scm (<nginx-server-configuration>,
emit-nginx-server-config): Likewise.
* gnu/tests/version-control.scm (%cgit-configuration-nginx,
%git-nginx-configuration): Likewise.
* gnu/tests/web.scm (%nginx-servers): Likewise.
---
 doc/guix.texi                    | 28 +++++++++++++---------------
 gnu/services/certbot.scm         |  4 ++--
 gnu/services/version-control.scm |  3 ++-
 gnu/services/web.scm             | 16 ++++++----------
 gnu/tests/version-control.scm    |  7 +++----
 gnu/tests/web.scm                |  4 ++--
 6 files changed, 28 insertions(+), 34 deletions(-)

diff --git a/doc/guix.texi b/doc/guix.texi
index c14df7fcd..ab1e5d057 100644
--- a/doc/guix.texi
+++ b/doc/guix.texi
@@ -14814,7 +14814,7 @@ A simple example configuration is given below.
              (list (nginx-server-configuration
                      (server-name '("www.example.com"))
                      (root "/srv/http/www.example.com")
-                     (https-port #f)
+                     (listen '("80"))
                      (ssl-certificate #f)
                      (ssl-certificate-key #f))))))
 @end example
@@ -14826,7 +14826,7 @@ blocks, as in this example:
 @example
 (simple-service 'my-extra-server nginx-service-type
                 (list (nginx-server-configuration
-                        (https-port #f)
+                        (listen '("80"))
                         (ssl-certificate #f)
                         (ssl-certificate-key #f)
                         (root "/srv/http/extra-website")
@@ -14874,7 +14874,7 @@ HTTPS.
              (list (nginx-server-configuration
                      (server-name '("www.example.com"))
                      (root "/srv/http/www.example.com")
-                     (https-port #f)
+                     (listen '("80"))
                      (ssl-certificate #f)
                      (ssl-certificate-key #f))))))
 @end example
@@ -14899,7 +14899,7 @@ requests with two servers.
       (list (nginx-server-configuration
               (server-name '("www.example.com"))
               (root "/srv/http/www.example.com")
-              (https-port #f)
+              (listen '("80"))
               (ssl-certificate #f)
               (ssl-certificate-key #f)
               (locations
@@ -14933,17 +14933,15 @@ Data type representing the configuration of an nginx server block.
 This type has the following parameters:
 
 @table @asis
-@item @code{http-port} (default: @code{80})
-Nginx will listen for HTTP connection on this port.  Set it at @code{#f} if
-nginx should not listen for HTTP (non secure) connection for this
-@dfn{server block}.
+@item @code{listen} (default: @code{'("80" "443 ssl")})
+Each @code{listen} directive sets the address and port for IP, or the
+path for a UNIX-domain socket on which the server will accept requests.
+Both address and port, or only address or only port can be specified.
+An address may also be a hostname, for example:
 
-@item @code{https-port} (default: @code{443})
-Nginx will listen for HTTPS connection on this port.  Set it at @code{#f} if
-nginx should not listen for HTTPS (secure) connection for this @dfn{server block}.
-
-Note that nginx can listen for HTTP and HTTPS connections in the same
-@dfn{server block}.
+@example
+'("127.0.0.1:8000" "127.0.0.1" "8000" "*:8000" "localhost:8000")
+@end example
 
 @item @code{server-name} (default: @code{(list 'default)})
 A list of server names this server represents. @code{'default} represents the
@@ -17545,7 +17543,7 @@ serve the default @file{/srv/git} over HTTPS might be:
           (server-blocks
            (list
             (nginx-server-configuration
-             (http-port #f)
+             (listen '("443 ssl"))
              (server-name "git.my-host.org")
              (ssl-certificate
               "/etc/letsencrypt/live/git.my-host.org/fullchain.pem")
diff --git a/gnu/services/certbot.scm b/gnu/services/certbot.scm
index dc072ea8d..fe7afe135 100644
--- a/gnu/services/certbot.scm
+++ b/gnu/services/certbot.scm
@@ -1,6 +1,7 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2016 ng0 <[email-masked]>
 ;;; Copyright © 2016 Sou Bunnbu <[email-masked]>
+;;; Copyright © 2017 Clément Lassieur <[email-masked]>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -97,8 +98,7 @@
      (map
       (lambda (host)
         (nginx-server-configuration
-         (http-port 80)
-         (https-port #f)
+         (listen '("80"))
          (ssl-certificate #f)
          (ssl-certificate-key #f)
          (server-name (list host))
diff --git a/gnu/services/version-control.scm b/gnu/services/version-control.scm
index fce2ce1c2..6bf656949 100644
--- a/gnu/services/version-control.scm
+++ b/gnu/services/version-control.scm
@@ -2,6 +2,7 @@
 ;;; Copyright © 2016 ng0 <[email-masked]>
 ;;; Copyright © 2016 Sou Bunnbu <[email-masked]>
 ;;; Copyright © 2017 Oleg Pykhalov <[email-masked]>
+;;; Copyright © 2017 Clément Lassieur <[email-masked]>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -231,7 +232,7 @@ access to exported repositories under @file{/srv/git}."
                "fastcgi_param HTTP_HOST $server_name;"
                "fastcgi_pass 127.0.0.1:9000;")))))
     (try-files (list "$uri" "@cgit"))
-    (https-port #f)
+    (listen '("80"))
     (ssl-certificate #f)
     (ssl-certificate-key #f))))
 
diff --git a/gnu/services/web.scm b/gnu/services/web.scm
index 9d713003c..7373d5671 100644
--- a/gnu/services/web.scm
+++ b/gnu/services/web.scm
@@ -4,6 +4,7 @@
 ;;; Copyright © 2016 ng0 <[email-masked]>
 ;;; Copyright © 2016, 2017 Julien Lepiller <[email-masked]>
 ;;; Copyright © 2017 Christopher Baines <[email-masked]>
+;;; Copyright © 2017 Clément Lassieur <[email-masked]>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -43,8 +44,7 @@
             <nginx-server-configuration>
             nginx-server-configuration
             nginx-server-configuration?
-            nginx-server-configuration-http-port
-            nginx-server-configuartion-https-port
+            nginx-server-configuration-listen
             nginx-server-configuration-server-name
             nginx-server-configuration-root
             nginx-server-configuration-locations
@@ -87,10 +87,8 @@
 (define-record-type* <nginx-server-configuration>
   nginx-server-configuration make-nginx-server-configuration
   nginx-server-configuration?
-  (http-port           nginx-server-configuration-http-port
-                       (default 80))
-  (https-port          nginx-server-configuration-https-port
-                       (default 443))
+  (listen              nginx-server-configuration-listen
+                       (default '("80" "443 ssl")))
   (server-name         nginx-server-configuration-server-name
                        (default (list 'default)))
   (root                nginx-server-configuration-root
@@ -173,8 +171,7 @@ of index files."
       "      }\n"))))
 
 (define (emit-nginx-server-config server)
-  (let ((http-port (nginx-server-configuration-http-port server))
-        (https-port (nginx-server-configuration-https-port server))
+  (let ((listen (nginx-server-configuration-listen server))
         (server-name (nginx-server-configuration-server-name server))
         (ssl-certificate (nginx-server-configuration-ssl-certificate server))
         (ssl-certificate-key
@@ -203,8 +200,7 @@ of index files."
        ("ssl-certificate-key" . ,ssl-certificate-key)))
     (list
      "    server {\n"
-     (and/l http-port  "      listen " (number->string <>) ";\n")
-     (and/l https-port "      listen " (number->string <>) " ssl;\n")
+     (map (lambda (directive) (list "      listen " directive ";\n")) listen)
      "      server_name " (config-domain-strings server-name) ";\n"
      (and/l ssl-certificate     "      ssl_certificate " <> ";\n")
      (and/l ssl-certificate-key "      ssl_certificate_key " <> ";\n")
diff --git a/gnu/tests/version-control.scm b/gnu/tests/version-control.scm
index 2cbacf0ef..7367861b0 100644
--- a/gnu/tests/version-control.scm
+++ b/gnu/tests/version-control.scm
@@ -1,6 +1,7 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2017 Oleg Pykhalov <[email-masked]>
 ;;; Copyright © 2017 Ludovic Courtès <[email-masked]>
+;;; Copyright © 2017 Clément Lassieur <[email-masked]>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -78,8 +79,7 @@
                "fastcgi_param HTTP_HOST $server_name;"
                "fastcgi_pass 127.0.0.1:9000;")))))
     (try-files (list "$uri" "@cgit"))
-    (http-port 19418)
-    (https-port #f)
+    (listen '("19418"))
     (ssl-certificate #f)
     (ssl-certificate-key #f))))
 
@@ -211,8 +211,7 @@ HTTP-PORT."
    (server-blocks
     (list
      (nginx-server-configuration
-      (http-port 19418)
-      (https-port #f)
+      (listen '("19418"))
       (ssl-certificate #f)
       (ssl-certificate-key #f)
       (locations
diff --git a/gnu/tests/web.scm b/gnu/tests/web.scm
index 3fa272c67..4c6614dc4 100644
--- a/gnu/tests/web.scm
+++ b/gnu/tests/web.scm
@@ -1,5 +1,6 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2017 Ludovic Courtès <[email-masked]>
+;;; Copyright © 2017 Clément Lassieur <[email-masked]>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -45,8 +46,7 @@
   ;; Server blocks.
   (list (nginx-server-configuration
          (root "/srv")
-         (http-port 8042)
-         (https-port #f)
+         (listen '("8042"))
          (ssl-certificate #f)
          (ssl-certificate-key #f))))
 
-- 
2.15.1