From 65c2203ffcedcf4817c590fe82c213dd45602d47 Mon Sep 17 00:00:00 2001 From: Franz Pletz Date: Sat, 11 Feb 2017 04:11:35 +0100 Subject: [PATCH] nginx module: add option for proxying websocket requests --- nixos/modules/services/web-servers/nginx/default.nix | 10 ++++++++++ .../services/web-servers/nginx/location-options.nix | 9 +++++++++ 2 files changed, 19 insertions(+) diff --git a/nixos/modules/services/web-servers/nginx/default.nix b/nixos/modules/services/web-servers/nginx/default.nix index 1aa8000502f5..e71a9e1885a8 100644 --- a/nixos/modules/services/web-servers/nginx/default.nix +++ b/nixos/modules/services/web-servers/nginx/default.nix @@ -92,6 +92,11 @@ let include ${recommendedProxyConfig}; ''} + # $connection_upgrade is used for websocket proxying + map $http_upgrade $connection_upgrade { + default upgrade; + ''' close; + } client_max_body_size ${cfg.clientMaxBodySize}; server_tokens ${if cfg.serverTokens then "on" else "off"}; @@ -213,6 +218,11 @@ let proxy_pass ${config.proxyPass}; ${optionalString cfg.recommendedProxySettings "include ${recommendedProxyConfig};"} ''} + ${optionalString config.proxyWebsockets '' + proxy_http_version 1.1; + proxy_set_header Upgrade $http_upgrade; + proxy_set_header Connection $connection_upgrade; + ''} ${optionalString (config.index != null) "index ${config.index};"} ${optionalString (config.tryFiles != null) "try_files ${config.tryFiles};"} ${optionalString (config.root != null) "root ${config.root};"} diff --git a/nixos/modules/services/web-servers/nginx/location-options.nix b/nixos/modules/services/web-servers/nginx/location-options.nix index d6f57404f822..4c772734a749 100644 --- a/nixos/modules/services/web-servers/nginx/location-options.nix +++ b/nixos/modules/services/web-servers/nginx/location-options.nix @@ -19,6 +19,15 @@ with lib; ''; }; + proxyWebsockets = mkOption { + type = types.bool; + default = false; + example = true; + description = '' + Whether to supporty proxying websocket connections with HTTP/1.1. + ''; + }; + index = mkOption { type = types.nullOr types.str; default = null;