guix-commits
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

01/02: services: web: Add support for configuring the nginx server names


From: Christopher Baines
Subject: 01/02: services: web: Add support for configuring the nginx server names hash.
Date: Mon, 11 Dec 2017 15:58:54 -0500 (EST)

cbaines pushed a commit to branch master
in repository guix.

commit 2881f85220c05809527d2f2a8b8d71b7a67bc604
Author: Christopher Baines <address@hidden>
Date:   Sat Nov 25 11:57:37 2017 +0000

    services: web: Add support for configuring the nginx server names hash.
    
    The nginx service can fail to start if the server names hash bucket size is
    too small, which can happen on some systems, and when using QEMU, depending 
on
    the CPU.
    
    * gnu/services/web.scm (<nginx-configuration>): Add
      server-names-hash-bucket-size and server-names-hash-bucket-max-size.
      (default-nginx-config): Add support for the new hash bucket size 
parameters.
      (nginx-service, nginx-activation): Pass the new hash bucket size 
parameters
      through to the default-nginx-config procedure.
    * doc/guix.texi (Web Services): Document the new hash bucket size 
parameters.
---
 doc/guix.texi        |  7 +++++++
 gnu/services/web.scm | 36 +++++++++++++++++++++++++++++++-----
 2 files changed, 38 insertions(+), 5 deletions(-)

diff --git a/doc/guix.texi b/doc/guix.texi
index 35f895b..592cae5 100644
--- a/doc/guix.texi
+++ b/doc/guix.texi
@@ -14913,6 +14913,13 @@ This can be useful if you have an existing 
configuration file, or it's
 not possible to do what is required through the other parts of the
 nginx-configuration record.
 
address@hidden @code{server-names-hash-bucket-size} (default: @code{#f})
+Bucket size for the server names hash tables, defaults to @code{#f} to
+use the size of the processors cache line.
+
address@hidden @code{server-names-hash-bucket-max-size} (default: @code{#f})
+Maximum bucket size for the server names hash tables.
+
 @end table
 @end deffn
 
diff --git a/gnu/services/web.scm b/gnu/services/web.scm
index 51cd9da..9692084 100644
--- a/gnu/services/web.scm
+++ b/gnu/services/web.scm
@@ -38,6 +38,8 @@
             nginx-configuration-run-directory
             nginx-configuration-server-blocks
             nginx-configuration-upstream-blocks
+            nginx-configuration-server-names-hash-bucket-size
+            nginx-configuration-server-names-hash-bucket-max-size
             nginx-configuration-file
 
             <nginx-server-configuration>
@@ -141,6 +143,10 @@
                  (default '()))          ;list of <nginx-server-configuration>
   (upstream-blocks nginx-configuration-upstream-blocks
                    (default '()))      ;list of <nginx-upstream-configuration>
+  (server-names-hash-bucket-size 
nginx-configuration-server-names-hash-bucket-size
+                                 (default #f))
+  (server-names-hash-bucket-max-size 
nginx-configuration-server-names-hash-bucket-max-size
+                                     (default #f))
   (file          nginx-configuration-file         ;#f | string | file-like
                  (default #f)))
 
@@ -225,7 +231,9 @@ of index files."
         (cons head out)))
   (fold-right flatten1 '() lst))
 
-(define (default-nginx-config nginx log-directory run-directory server-list 
upstream-list)
+(define (default-nginx-config nginx log-directory run-directory server-list
+                              upstream-list server-names-hash-bucket-size
+                              server-names-hash-bucket-max-size)
   (apply mixed-text-file "nginx.conf"
          (flatten
           "user nginx nginx;\n"
@@ -239,6 +247,18 @@ of index files."
           "    scgi_temp_path " run-directory "/scgi_temp;\n"
           "    access_log " log-directory "/access.log;\n"
           "    include " nginx "/share/nginx/conf/mime.types;\n"
+          (if server-names-hash-bucket-size
+              (string-append
+               "    server_names_hash_bucket_size "
+               (number->string server-names-hash-bucket-size)
+               ";\n")
+              "")
+          (if server-names-hash-bucket-max-size
+              (string-append
+               "    server_names_hash_bucket_max_size "
+               (number->string server-names-hash-bucket-max-size)
+               ";\n")
+              "")
           "\n"
           (map emit-nginx-upstream-config upstream-list)
           (map emit-nginx-server-config server-list)
@@ -258,7 +278,8 @@ of index files."
 (define nginx-activation
   (match-lambda
     (($ <nginx-configuration> nginx log-directory run-directory server-blocks
-                              upstream-blocks file)
+                              upstream-blocks server-names-hash-bucket-size
+                              server-names-hash-bucket-max-size file)
      #~(begin
          (use-modules (guix build utils))
 
@@ -279,13 +300,16 @@ of index files."
          (system* (string-append #$nginx "/sbin/nginx")
                   "-c" #$(or file
                              (default-nginx-config nginx log-directory
-                               run-directory server-blocks upstream-blocks))
+                               run-directory server-blocks upstream-blocks
+                               server-names-hash-bucket-size
+                               server-names-hash-bucket-max-size))
                   "-t")))))
 
 (define nginx-shepherd-service
   (match-lambda
     (($ <nginx-configuration> nginx log-directory run-directory server-blocks
-                              upstream-blocks file)
+                              upstream-blocks server-names-hash-bucket-size
+                              server-names-hash-bucket-max-size file)
      (let* ((nginx-binary (file-append nginx "/sbin/nginx"))
             (nginx-action
              (lambda args
@@ -294,7 +318,9 @@ of index files."
                     (system* #$nginx-binary "-c"
                              #$(or file
                                    (default-nginx-config nginx log-directory
-                                     run-directory server-blocks 
upstream-blocks))
+                                     run-directory server-blocks 
upstream-blocks
+                                     server-names-hash-bucket-size
+                                     server-names-hash-bucket-max-size))
                              address@hidden))))))
 
        ;; TODO: Add 'reload' action.



reply via email to

[Prev in Thread] Current Thread [Next in Thread]