summaryrefslogtreecommitdiff
path: root/gnu/services/web.scm
diff options
context:
space:
mode:
authorChristopher Baines <mail@cbaines.net>2017-01-18 08:08:07 +0000
committerLudovic Courtès <ludo@gnu.org>2017-01-19 14:44:59 +0100
commit9c557a69aebe49bba12009a01cfaabf88ec3f665 (patch)
treef03c3ab465fde7d50182f6cfb5c2e15afb6bdaa0 /gnu/services/web.scm
parentcb341293fa22cdbc4ffb869b9b2a94a0d8c8798b (diff)
downloadpatches-9c557a69aebe49bba12009a01cfaabf88ec3f665.tar
patches-9c557a69aebe49bba12009a01cfaabf88ec3f665.tar.gz
services: nginx: Add support for 'location' blocks.
* gnu/services/web.scm (<nginx-server-configuration>): Add field 'locations'. (<nginx-location-configuration>): New record type. (<nginx-named-location-configuration>): New record type. (nginx-location-config): New function. (default-nginx-server-config): Include locations. * doc/guix.texi (Web Services): Document the new nginx-location-configuration and nginx-named-location-configuration data types, as well as the changes to the nginx-server-configuration. Signed-off-by: Ludovic Courtès <ludo@gnu.org>
Diffstat (limited to 'gnu/services/web.scm')
-rw-r--r--gnu/services/web.scm39
1 files changed, 38 insertions, 1 deletions
diff --git a/gnu/services/web.scm b/gnu/services/web.scm
index 1477bf88d6..ec308976d7 100644
--- a/gnu/services/web.scm
+++ b/gnu/services/web.scm
@@ -36,6 +36,10 @@
nginx-server-configuration?
nginx-upstream-configuration
nginx-upstream-configuration?
+ nginx-location-configuration
+ nginx-location-configuration?
+ nginx-named-location-configuration
+ nginx-named-location-configuration?
nginx-service
nginx-service-type))
@@ -56,6 +60,8 @@
(default (list 'default)))
(root nginx-server-configuration-root
(default "/srv/http"))
+ (locations nginx-server-configuration-locations
+ (default '()))
(index nginx-server-configuration-index
(default (list "index.html")))
(ssl-certificate nginx-server-configuration-ssl-certificate
@@ -71,6 +77,20 @@
(name nginx-upstream-configuration-name)
(servers nginx-upstream-configuration-servers))
+(define-record-type* <nginx-location-configuration>
+ nginx-location-configuration make-nginx-location-configuration
+ nginx-location-configuration?
+ (uri nginx-location-configuration-uri
+ (default #f))
+ (body nginx-location-configuration-body))
+
+(define-record-type* <nginx-named-location-configuration>
+ nginx-named-location-configuration make-nginx-named-location-configuration
+ nginx-named-location-configuration?
+ (name nginx-named-location-configuration-name
+ (default #f))
+ (body nginx-named-location-configuration-body))
+
(define-record-type* <nginx-configuration>
nginx-configuration make-nginx-configuration
nginx-configuration?
@@ -98,6 +118,19 @@ of index files."
((? string? str) (string-append str " ")))
names)))
+(define nginx-location-config
+ (match-lambda
+ (($ <nginx-location-configuration> uri body)
+ (string-append
+ " location " uri " {\n"
+ " " (string-join body "\n ") "\n"
+ " }\n"))
+ (($ <nginx-named-location-configuration> name body)
+ (string-append
+ " location @" name " {\n"
+ " " (string-join body "\n ") "\n"
+ " }\n"))))
+
(define (default-nginx-server-config server)
(string-append
" server {\n"
@@ -126,7 +159,11 @@ of index files."
" index " (config-index-strings (nginx-server-configuration-index server)) ";\n"
" server_tokens " (if (nginx-server-configuration-server-tokens? server)
"on" "off") ";\n"
- " }\n"))
+ "\n"
+ (string-join
+ (map nginx-location-config (nginx-server-configuration-locations server))
+ "\n")
+ " }\n"))
(define (nginx-upstream-config upstream)
(string-append