diff --git a/jobs/cloud_controller_ng/spec b/jobs/cloud_controller_ng/spec index 3bbbe54954..d05ee4f2b2 100644 --- a/jobs/cloud_controller_ng/spec +++ b/jobs/cloud_controller_ng/spec @@ -1022,6 +1022,10 @@ properties: description: "Configure keep alive timeout for connections to cloud controller. This is a temporary field used for testing." default: 100 + cc.nginx_upstream_keepalive_timeout: + description: "Keepalive timeout in seconds for nginx upstream connections to Puma. Must be less than cc.puma.persistent_timeout (default 20s) to prevent stale keepalive connections causing broken pipe errors." + default: 15 + cc.jobs.local.number_of_workers: default: 2 description: "Number of local cloud_controller_worker workers" diff --git a/jobs/cloud_controller_ng/templates/nginx.conf.erb b/jobs/cloud_controller_ng/templates/nginx.conf.erb index cf3a2a0c08..2a763d8160 100644 --- a/jobs/cloud_controller_ng/templates/nginx.conf.erb +++ b/jobs/cloud_controller_ng/templates/nginx.conf.erb @@ -50,6 +50,8 @@ limit_req_zone $http_authorization zone=<%= zone['name'] %>:10m rate=<%= zone['l upstream cloud_controller { server unix:/var/vcap/data/cloud_controller_ng/cloud_controller.sock; + keepalive <%= p("cc.puma.workers") * p("cc.puma.max_threads") %>; + keepalive_timeout <%= p("cc.nginx_upstream_keepalive_timeout") %>s; } upstream cloud_controller_metrics {