BBlack has submitted this change and it was merged.

Change subject: Support optional keepalives and websockets for v4 only
......................................................................


Support optional keepalives and websockets for v4 only

The websockets part requires the request buffering disable in the
earlier commit, I think.

Bug: T134870
Change-Id: Id31596760ee24b14ba93289b489f4529ad1853fa
---
M modules/tlsproxy/manifests/instance.pp
M modules/tlsproxy/manifests/localssl.pp
M modules/tlsproxy/templates/localssl.erb
M modules/tlsproxy/templates/nginx.conf.erb
M modules/varnish/manifests/instance.pp
M modules/varnish/templates/vcl/wikimedia-backend.vcl.erb
M modules/varnish/templates/vcl/wikimedia-common.inc.vcl.erb
M modules/varnish/templates/vcl/wikimedia-frontend.vcl.erb
8 files changed, 56 insertions(+), 6 deletions(-)

Approvals:
  BBlack: Looks good to me, approved
  jenkins-bot: Verified



diff --git a/modules/tlsproxy/manifests/instance.pp 
b/modules/tlsproxy/manifests/instance.pp
index 93ab8cc..bc689c0 100644
--- a/modules/tlsproxy/manifests/instance.pp
+++ b/modules/tlsproxy/manifests/instance.pp
@@ -3,6 +3,8 @@
     # Tune kernel settings
     include base::mysterious_sysctl
 
+    $keepalives_per_worker = 
hiera('tlsproxy::localssl::keepalives_per_worker', 0)
+    $websocket_support = hiera('cache::websocket_support', false)
     $nginx_worker_connections = '32768'
     $nginx_ssl_conf = ssl_ciphersuite('nginx', 'compat')
     $nginx_tune_for_media = hiera('cache::tune_for_media', false)
diff --git a/modules/tlsproxy/manifests/localssl.pp 
b/modules/tlsproxy/manifests/localssl.pp
index e01e6b3..9781bae 100644
--- a/modules/tlsproxy/manifests/localssl.pp
+++ b/modules/tlsproxy/manifests/localssl.pp
@@ -41,6 +41,7 @@
 
     $varnish_version4 = hiera('varnish_version4', false)
     $keepalives_per_worker = 
hiera('tlsproxy::localssl::keepalives_per_worker', 0)
+    $websocket_support = hiera('cache::websocket_support', false)
 
     # Ensure that exactly one definition exists with default_server = true
     # if multiple defines have default_server set to true, this
diff --git a/modules/tlsproxy/templates/localssl.erb 
b/modules/tlsproxy/templates/localssl.erb
index 32ccdc8..ef775dc 100644
--- a/modules/tlsproxy/templates/localssl.erb
+++ b/modules/tlsproxy/templates/localssl.erb
@@ -2,7 +2,7 @@
 # This file is managed by Puppet!
 upstream local_fe_<%= @basename %> {
     server <%= @ipaddress %>:<%= @upstream_port %> max_fails=0;
-<% if @keepalives_per_worker.to_i > 0 -%>
+<% if @varnish_version4 and @keepalives_per_worker.to_i > 0 -%>
     keepalive <%= @keepalives_per_worker %>; # Note: commonly up to 48 workers!
 <% end -%>
 }
@@ -32,13 +32,13 @@
                proxy_pass http://local_fe_<%= @basename %>;
 <% if @varnish_version4 -%>
                proxy_http_version 1.1;
-<% end -%>
-<% if @keepalives_per_worker.to_i > 0 -%>
-<% if not @varnish_version4 -%>
-               proxy_http_version 1.1;
-<% end -%>
+<% if @websocket_support -%>
+               proxy_set_header Upgrade $http_upgrade;
+               proxy_set_header Connection $connection_upgrade;
+<% elsif @keepalives_per_worker.to_i > 0 -%>
                proxy_set_header Connection "";
 <% end -%>
+<% end -%>
 
                # this should be in sync with Varnish's first_byte_timeout
                # and PHP's max_execution_time
diff --git a/modules/tlsproxy/templates/nginx.conf.erb 
b/modules/tlsproxy/templates/nginx.conf.erb
index be5146c..3c5a8b1 100644
--- a/modules/tlsproxy/templates/nginx.conf.erb
+++ b/modules/tlsproxy/templates/nginx.conf.erb
@@ -120,6 +120,17 @@
         '.' '0';
     }
 
+<% if @varnish_version4 and @websocket_support -%>
+    map $http_upgrade $connection_upgrade {
+        default upgrade;
+<% if @keepalives_per_worker.to_i > 0 -%>
+        ''      '';
+<% else -%>
+        ''      close;
+<% end -%>
+    }
+<% end -%>
+
     <%= @nginx_ssl_conf.join("\n")  %>
 
     include /etc/nginx/conf.d/*.conf;
diff --git a/modules/varnish/manifests/instance.pp 
b/modules/varnish/manifests/instance.pp
index 18593b0..a0612f1 100644
--- a/modules/varnish/manifests/instance.pp
+++ b/modules/varnish/manifests/instance.pp
@@ -24,6 +24,8 @@
         $extraopts = "-n ${name}"
     }
 
+    $websocket_support = hiera('cache::websocket_support', false)
+
     # $varnish_version4 is used to distinguish between v4 and v3 versions of
     # VCL code, as well as to pass the right parameters to varnishd. See
     # varnish.systemd.erb
diff --git a/modules/varnish/templates/vcl/wikimedia-backend.vcl.erb 
b/modules/varnish/templates/vcl/wikimedia-backend.vcl.erb
index 1faded1..51509e4 100644
--- a/modules/varnish/templates/vcl/wikimedia-backend.vcl.erb
+++ b/modules/varnish/templates/vcl/wikimedia-backend.vcl.erb
@@ -36,6 +36,10 @@
        <% end -%>
 <% end -%>
 
+<% if @varnish_version4 and @websocket_support -%>
+       call wm_common_websocket_recv;
+<% end -%>
+
        call wm_common_recv_grace;
 
        call cluster_be_recv_pre_purge;
@@ -89,6 +93,12 @@
        return (<%= @fetch_pass %>); // no default VCL (which is just "return 
(<%= @fetch_pass %>)" anyways)
 }
 
+<% if @varnish_version4 and @websocket_support -%>
+sub vcl_pipe {
+       call wm_common_websocket_pipe;
+}
+<% end -%>
+
 <% if @varnish_version4 -%>
 sub vcl_backend_response {
 <% else -%>
diff --git a/modules/varnish/templates/vcl/wikimedia-common.inc.vcl.erb 
b/modules/varnish/templates/vcl/wikimedia-common.inc.vcl.erb
index b1dfd63..b0fe971 100644
--- a/modules/varnish/templates/vcl/wikimedia-common.inc.vcl.erb
+++ b/modules/varnish/templates/vcl/wikimedia-common.inc.vcl.erb
@@ -401,3 +401,17 @@
        }
 }
 <% end -%>
+
+<% if @varnish_version4 and @websocket_support -%>
+sub wm_common_websocket_recv {
+       if (req.http.upgrade ~ "(?i)websocket") {
+               return (pipe);
+       }
+}
+
+sub wm_common_websocket_pipe {
+       if (req.http.upgrade) {
+               set bereq.http.upgrade = req.http.upgrade;
+       }
+}
+<% end -%>
diff --git a/modules/varnish/templates/vcl/wikimedia-frontend.vcl.erb 
b/modules/varnish/templates/vcl/wikimedia-frontend.vcl.erb
index f3588c3..5fb0c62 100644
--- a/modules/varnish/templates/vcl/wikimedia-frontend.vcl.erb
+++ b/modules/varnish/templates/vcl/wikimedia-frontend.vcl.erb
@@ -256,6 +256,10 @@
        set req.backend = cache_local;
 <% end -%>
 
+<% if @varnish_version4 and @websocket_support -%>
+       call wm_common_websocket_recv;
+<% end -%>
+
        call wm_common_recv_grace;
 
        if (<%= @req_method %> != "PURGE") {
@@ -324,6 +328,12 @@
        return (<%= @fetch_pass %>); // no default VCL (which is just "return 
(<%= @fetch_pass %>)" anyways)
 }
 
+<% if @varnish_version4 and @websocket_support -%>
+sub vcl_pipe {
+       call wm_common_websocket_pipe;
+}
+<% end -%>
+
 <% if @varnish_version4 -%>
 sub vcl_backend_response {
 <% else -%>

-- 
To view, visit https://gerrit.wikimedia.org/r/287941
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings

Gerrit-MessageType: merged
Gerrit-Change-Id: Id31596760ee24b14ba93289b489f4529ad1853fa
Gerrit-PatchSet: 5
Gerrit-Project: operations/puppet
Gerrit-Branch: production
Gerrit-Owner: BBlack <[email protected]>
Gerrit-Reviewer: BBlack <[email protected]>
Gerrit-Reviewer: Ema <[email protected]>
Gerrit-Reviewer: Faidon Liambotis <[email protected]>
Gerrit-Reviewer: jenkins-bot <>

_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to