diff --git a/nixos/modules/services/web-servers/nginx/default.nix b/nixos/modules/services/web-servers/nginx/default.nix
index 389911ffcce8..51c2f3febdc7 100644
--- a/nixos/modules/services/web-servers/nginx/default.nix
+++ b/nixos/modules/services/web-servers/nginx/default.nix
@@ -249,7 +249,15 @@ let
+ optionalString (ssl && vhost.http2) "http2 "
+ optionalString vhost.default "default_server "
+ optionalString (extraParameters != []) (concatStringsSep " " extraParameters)
- + ";";
+ + ";"
+ + (if ssl && vhost.http3 then ''
+ # UDP listener for **QUIC+HTTP/3
+ listen ${addr}:${toString port} http3 reuseport;
+ # Advertise that HTTP/3 is available
+ add_header Alt-Svc 'h3=":443"';
+ # Sent when QUIC was used
+ add_header QUIC-Status $quic;
+ '' else "");
redirectListen = filter (x: !x.ssl) defaultListen;
diff --git a/nixos/modules/services/web-servers/nginx/vhost-options.nix b/nixos/modules/services/web-servers/nginx/vhost-options.nix
index cf211ea9a71b..1f5fe6a368c1 100644
--- a/nixos/modules/services/web-servers/nginx/vhost-options.nix
+++ b/nixos/modules/services/web-servers/nginx/vhost-options.nix
@@ -151,6 +151,19 @@ with lib;
'';
};
+ http3 = mkOption {
+ type = types.bool;
+ default = false;
+ description = ''
+ Whether to enable HTTP 3.
+ This requires using pkgs.nginxQuic package
+ which can be achived by setting services.nginx.package = pkgs.nginxQuic;.
+ Note that HTTP 3 support is experimental and
+ *not* yet recommended for production.
+ Read more at https://quic.nginx.org/
+ '';
+ };
+
root = mkOption {
type = types.nullOr types.path;
default = null;