nixos/nginx: fix mkDefaultListenVhost mapping for unix sockets (#371561)

Changed files
+13 -3
nixos
modules
services
web-servers
nginx
tests
+2 -2
nixos/modules/services/web-servers/nginx/default.nix
···
map (
listen:
{
-
port = cfg.defaultSSLListenPort;
ssl = true;
}
// listen
···
map (
listen:
{
-
port = cfg.defaultHTTPListenPort;
ssl = false;
}
// listen
···
map (
listen:
{
+
port = if (hasPrefix "unix:" listen.addr) then null else cfg.defaultSSLListenPort;
ssl = true;
}
// listen
···
map (
listen:
{
+
port = if (hasPrefix "unix:" listen.addr) then null else cfg.defaultHTTPListenPort;
ssl = false;
}
// listen
+11 -1
nixos/tests/nginx-unix-socket.nix
···
{ ... }:
let
nginxSocketPath = "/var/run/nginx/test.sock";
in
{
···
{
services.nginx = {
enable = true;
virtualHosts.localhost = {
serverName = "localhost";
listen = [ { addr = "unix:${nginxSocketPath}"; } ];
···
testScript = ''
webserver.wait_for_unit("nginx")
-
webserver.wait_for_open_unix_socket("${nginxSocketPath}")
webserver.succeed("curl --fail --silent --unix-socket '${nginxSocketPath}' http://localhost/test | grep '^foo$'")
'';
}
···
{ ... }:
let
+
defaultNginxSocketPath = "/var/run/nginx/default-test.sock";
nginxSocketPath = "/var/run/nginx/test.sock";
in
{
···
{
services.nginx = {
enable = true;
+
+
defaultListen = [ { addr = "unix:${defaultNginxSocketPath}"; } ];
+
virtualHosts.defaultLocalhost = {
+
serverName = "defaultLocalhost";
+
locations."/default".return = "200 'bar'";
+
};
+
virtualHosts.localhost = {
serverName = "localhost";
listen = [ { addr = "unix:${nginxSocketPath}"; } ];
···
testScript = ''
webserver.wait_for_unit("nginx")
+
webserver.wait_for_open_unix_socket("${defaultNginxSocketPath}", timeout=1)
+
webserver.wait_for_open_unix_socket("${nginxSocketPath}", timeout=1)
+
webserver.succeed("curl --fail --silent --unix-socket '${defaultNginxSocketPath}' http://defaultLocalhost/default | grep '^bar$'")
webserver.succeed("curl --fail --silent --unix-socket '${nginxSocketPath}' http://localhost/test | grep '^foo$'")
'';
}