04_webserver.ymlΒΆ

---
# Webserver Configuration

# Effective CPUs (float) across proxy and the current app
WEBSERVER_CPUS_EFFECTIVE: >-
  {{
    [
      (lookup('applications') | resource_filter('svc-prx-openresty',  'cpus', service_name | default(''), RESOURCE_CPUS)) | float,
      (lookup('applications') | resource_filter(application_id,       'cpus', service_name | default(''), RESOURCE_CPUS)) | float
    ] | min
  }}

WEBSERVER_WORKER_PROCESSES: >-
  {{
    1 if (WEBSERVER_CPUS_EFFECTIVE | float) < 1
    else (WEBSERVER_CPUS_EFFECTIVE | float | int)
  }}

# worker_connections from pids_limit (use the smaller one), with correct key/defaults
WEBSERVER_WORKER_CONNECTIONS: >-
  {{
    [
      (lookup('applications') | resource_filter('svc-prx-openresty', 'pids_limit', service_name | default(''), RESOURCE_PIDS_LIMIT)) | int,
      (lookup('applications') | resource_filter(application_id,      'pids_limit', service_name | default(''), RESOURCE_PIDS_LIMIT)) | int
    ] | min
  }}

# Not WEBSERVER_WORKER_*: their application_id is whichever role loaded the shared proxy first, whose limits then cap every vhost.
WEBSERVER_PROXY_WORKER_PROCESSES: >-
  {{
    [
      (lookup('applications') | resource_filter('svc-prx-openresty', 'cpus', '', RESOURCE_CPUS)) | float | int,
      1
    ] | max
  }}

WEBSERVER_PROXY_WORKER_CONNECTIONS: "{{ lookup('config', 'svc-prx-openresty', 'services.openresty.worker_connections') | int }}"

WEBSERVER_PROXY_WORKER_RLIMIT_NOFILE: "{{ (WEBSERVER_PROXY_WORKER_CONNECTIONS | int) * 2 }}"

# Response security headers of every vhost; an app overrides any key under `security_headers` in its meta/server.yml.
WEBSERVER_SECURITY_HEADERS:
  nosniff: false # X-Content-Type-Options: nosniff
  referrer_policy: "" # Referrer-Policy, sent only when the upstream sends none; "" sends none
  permissions_policy: "" # Permissions-Policy on HTML documents; "" sends none
  hsts:
    max_age: 31536000 # Strict-Transport-Security max-age in seconds
    include_subdomains: false # adds includeSubDomains, which covers every subdomain of the vhost
    preload: false # adds preload; requires include_subdomains and a max_age of one year