Merge pull request #23279 from mbbx6spp/make-nginx-module-less-gross

nginx service: add commonHttpConfig option

Changed files
+62
nixos
modules
services
web-servers
nginx
tests
+20
nixos/modules/services/web-servers/nginx/default.nix
···
server_tokens ${if cfg.serverTokens then "on" else "off"};
${vhosts}
${optionalString cfg.statusPage ''
···
can be specified more than once and it's value will be
concatenated (contrary to <option>config</option> which
can be set only once).
'';
};
···
server_tokens ${if cfg.serverTokens then "on" else "off"};
+
${cfg.commonHttpConfig}
+
${vhosts}
${optionalString cfg.statusPage ''
···
can be specified more than once and it's value will be
concatenated (contrary to <option>config</option> which
can be set only once).
+
'';
+
};
+
+
commonHttpConfig = mkOption {
+
type = types.lines;
+
default = "";
+
example = ''
+
resolver 127.0.0.1 valid=5s;
+
+
log_format myformat '$remote_addr - $remote_user [$time_local] '
+
'"$request" $status $body_bytes_sent '
+
'"$http_referer" "$http_user_agent"';
+
'';
+
description = ''
+
With nginx you must provide common http context definitions before
+
they are used, e.g. log_format, resolver, etc. inside of server
+
or location contexts. Use this attribute to set these definitions
+
at the appropriate location.
'';
};
+42
nixos/tests/nginx.nix
···
···
+
# verifies:
+
# 1. nginx generates config file with shared http context definitions above
+
# generated virtual hosts config.
+
+
import ./make-test.nix ({ pkgs, ...} : {
+
name = "jenkins";
+
meta = with pkgs.stdenv.lib.maintainers; {
+
maintainers = [ mbbx6spp ];
+
};
+
+
nodes = {
+
webserver =
+
{ config, pkgs, ... }:
+
{ services.nginx.enable = true;
+
services.nginx.commonHttpConfig = ''
+
log_format ceeformat '@cee: {"status":"$status",'
+
'"request_time":$request_time,'
+
'"upstream_response_time":$upstream_response_time,'
+
'"pipe":"$pipe","bytes_sent":$bytes_sent,'
+
'"connection":"$connection",'
+
'"remote_addr":"$remote_addr",'
+
'"host":"$host",'
+
'"timestamp":"$time_iso8601",'
+
'"request":"$request",'
+
'"http_referer":"$http_referer",'
+
'"upstream_addr":"$upstream_addr"}';
+
'';
+
services.nginx.virtualHosts."0.my.test" = {
+
extraConfig = ''
+
access_log syslog:server=unix:/dev/log,facility=user,tag=mytag,severity=info ceeformat;
+
'';
+
};
+
};
+
};
+
+
testScript = ''
+
startAll;
+
+
$webserver->waitForUnit("nginx");
+
$webserver->waitForOpenPort("80");
+
'';
+
})