61 Commits

Author SHA1 Message Date
Jose Diaz-Gonzalez
465de6cc71 refactor: consolidate nginx.conf.sigil server blocks
The default nginx template rendered four near-identical server blocks per app, so the same listen, access_log, error_log, ssl_*, error_page, and proxy chain had to be maintained across http, https, grpc, and grpcs branches. Merging http and https into a single branch keyed on an `is_ssl` boolean, and likewise grpc and grpcs, removes the duplicate proxy_set_header chain and error-page locations and brings the structure in line with the openresty proxy template. Output is preserved up to whitespace and the existing `cat -s` pass already squashes the leftover blank lines. Adds plugins/nginx-vhosts/template_test.go exercising the rendered output via sigil as a Go library across HTTP-only, HTTPS, HTTP-to-HTTPS redirect, no-listeners 502 fallback, gRPC, gRPCs, gRPC-without-listeners skip, IPv4 bind, upstream blocks with and without keepalive, the access_log `off` short-circuit, the X-Forwarded-Ssl toggle, the http2 listen-parameter vs directive split, http2_push_preload conditional emission, and the nginx.conf.d/*.conf include in every code path; and tests/unit/nginx-vhosts_16.bats covering deploy plus `nginx -t` end-to-end for both HTTP and HTTPS apps.
2026-04-30 16:36:45 -04:00
Jose Diaz-Gonzalez
2993fa800c feat(nginx): generate 502 config for apps without web listeners
When an app has no web listeners (not yet deployed, no web process type,
or web processes not running), generate a minimal nginx config that
returns 502 Bad Gateway instead of having no config at all. This ensures
domains resolve, monitoring tools detect non-200 status codes, and SSL
certificate provisioning tools like letsencrypt can function.
2026-04-24 02:10:30 -04:00
chemicalkosek
a0fb569151 Add application/graphql-response+json to nginx gzip_types
GraphQL servers like Yoga v5 and Apollo Server 4 use the application/graphql-response+json content type per the GraphQL-over-HTTP spec (IANA registered). Without this in gzip_types, nginx silently skips compression for all GraphQL responses, sending megabytes of uncompressed JSON over the wire.
2026-04-02 11:27:47 +02:00
Ostap Brehin
675529cb6f Add proxy-keepalive to Nginx properties 2025-12-27 20:27:29 +00:00
Jose Diaz-Gonzalez
05bd2913dd chore: remove conditionals for variables that always have values 2025-11-21 22:15:48 -05:00
Jose Diaz-Gonzalez
6bb20e9b27 chore: remove nginx checks for functionality that always exists
TLS 1.3, HTTP2 and GRPC are now standard in all operating systems where Dokku is supported.
2025-11-21 22:05:20 -05:00
Jose Diaz-Gonzalez
933a174dfd fix: use updated http2 directive for setting http2 support
Closes #7997
2025-10-19 23:51:17 -04:00
Jose Diaz-Gonzalez
8bed755ab9 feat: allow usage of newer nginx.conf.sigil on older versions of dokku
Folks might mistakenly pull the latest template file - which introduces new variables - causing deployment failures.

This change allows them to use the newer template by checking if the variables are set before using them.

Closes #7277
2024-10-17 12:27:28 -04:00
Jose Diaz-Gonzalez
4d7f779c28 feat: add support for various timeout-related functions to nginx, openresty and k3s plugins
Closes #7267
2024-10-16 00:51:01 -04:00
Jose Diaz-Gonzalez
b99c25f090 feat: add support for setting underscores-in-headers for nginx, openresty, and k3s
Closes #6627
2024-02-27 13:49:44 -05:00
Igor Loskutov
bdf0b6c509 Add application/wasm to nginx.conf.sigil gzip 2023-08-05 10:58:57 -04:00
Jose Diaz-Gonzalez
ca1ab188fe chore: drop SPDY
This hasn't been supported by browsers in quite a while and nginx will set a warning as of Ubuntu 20.04 when the header is referenced.
2022-12-29 01:59:54 -05:00
Isao Sugimoto
51547b7688 fix duplicate syntax for nginx.conf 2022-07-31 15:38:53 +00:00
chrisjdixon
a8a9bc93ab moved "include {{ $.DOKKU_ROOT }}/{{ $.APP }}/nginx.conf.d/*.conf" after default error pages 2022-07-18 17:29:19 +10:00
Jose Diaz-Gonzalez
f4a0dca15b fix: scope return 301 in nginx config to allow proper letsencrypt usage 2021-04-13 13:26:49 -04:00
Jose Diaz-Gonzalez
f7e218637e feat: add ability to specify X-Forwarded-Ssl header for proxied requests
Closes #4401
2021-02-20 00:03:25 -05:00
Jose Diaz-Gonzalez
277e9691e1 feat: add ability to set client max body size via nginx:set
This simplifies increasing upload size by making it a property, and is backwards compatible with installations that have set that in a custom file.
2021-01-21 01:41:34 -05:00
Bjorn Post
a6062d4ab4 feat: make feature more generic, also add support for setting -port and -proto values via nginx:set, refs #4339 2021-01-19 21:40:47 +01:00
Bjorn Post
7cd6f7666c feat: configure trust x-forwarded-for headers via nginx:set iso trust by default, refs #4339 2021-01-18 21:09:00 +01:00
Bjorn Post
2cdfa1cae1 feat: trust proxy_add_x_forwarded_for iso resetting to remote_addr, refs #4339 2021-01-18 20:07:55 +01:00
Andrew Kane
c0581a0e37 feat: add ability to change the access log format 2020-11-30 21:59:36 -08:00
Yihao
30414cbd0c feat: Allow controlling nginx proxy-buffer-size, proxy-buffering, proxy-buffers, proxy-busy-buffers-size 2020-09-19 09:51:55 +09:30
Yihao
9cbe771123 Fix proxy-read-timeout is not set for HTTPS 2020-07-30 18:39:23 +09:30
Jose Diaz-Gonzalez
42122a7540 feat: allow controlling proxy-read-timeout
Closes #4042
2020-07-01 19:08:15 -04:00
Jose Diaz-Gonzalez
62caa85423 feat: add ability to change or disable the access/error log path
Closes #3911
2020-04-01 12:21:52 -04:00
Jose Diaz-Gonzalez
38a13ecd39 feat: expose network listeners to nginx templates for all process types
This change allows users to specify a custom nginx.conf.sigil that can expose non-web process types to the outside world in addition to the web process type.

Closes #3258
2020-03-11 12:34:38 -04:00
Jose Diaz-Gonzalez
6b431378a1 feat: add ability to set the ipv4/ipv6 bind address for an app
This allows users to handle mulitple interfaces separately or even ensure applications remain accessible only on a local network.

Closes #3805
2019-12-21 18:54:54 -05:00
Jose Diaz-Gonzalez
9dae004651 fix: require nginx 1.13+ in order to enable tls1.3
Closes #3711
2019-10-14 11:47:43 -04:00
Jose Diaz-Gonzalez
6e3fddb544 feat: add proper openresty support
This change allows supporting the openresty package as installed on Ubuntu 18.04 from the official openresty package repository, while also returning general nginx support.

Closes #3675
2019-09-16 03:05:35 -04:00
Jose Diaz-Gonzalez
5f80cd3c20 feat: follow updated intermediate recommendations from the Mozilla SSL Config Generator 2019-09-15 22:24:37 -04:00
fzerorubigd
377166d822 nginx-vhost: add support for grpc/grpcs port forward 2019-08-22 21:57:21 +02:00
Jose Diaz-Gonzalez
f3e191988d Merge pull request #3602 from alexymik/master
Create a 502 error page to automatically refresh if backend status changes
2019-07-01 17:21:56 -04:00
Alexy Mikhailichenko
b35235f1e9 Change 502 error page to automatically refresh if backend status changes 2019-07-01 14:14:34 -04:00
JakeAngell
4e4e256a27 Update nginx.conf.sigil 2019-06-17 21:21:10 +01:00
Alessio
cb16cae09b fix nginx template with Connection header to http_connection 2019-04-22 22:08:28 +01:00
Jose Diaz-Gonzalez
136c868904 chore: move http2_push logic into single line
[ci skip]
2018-05-19 02:14:37 -04:00
malixsys
5da8bcc3b5 Adding support for http2_push_preload to nginx 1.13.9+ configuration 2018-05-01 12:58:16 -04:00
Alexis Tyler
7095eac052 migrate env for NGINX_* to PROXY_* 2018-04-02 00:24:43 -04:00
Cosmin Stroe
0b2bea3fa9 Use upstream port in nginx.conf template 2017-08-04 12:26:35 -05:00
Cosmin Stroe
9156dea8b7 Revert "Fix upstream ports configuration."
This reverts commit 1f93169c43.
2017-08-04 12:20:35 -05:00
Cosmin Stroe
1f93169c43 Fix upstream ports configuration. 2017-08-04 02:21:31 -05:00
Cosmin Stroe
65990068cb Revert "Use correct port number for the upstream."
This reverts commit 52b45d74cb.
2017-08-04 00:24:12 -05:00
Cosmin Stroe
52b45d74cb Use correct port number for the upstream. 2017-08-03 22:24:14 -05:00
Jose Diaz-Gonzalez
02aca5aac5 Merge pull request #2739 from dokku/2676-listener-port
Use listener_port in nginx.conf.sigil
2017-04-24 09:31:37 -06:00
Jose Diaz-Gonzalez
e719da300f Merge pull request #2642 from chiedo/error-pages
Added better default nginx error pages
2017-04-22 20:27:41 -06:00
Jose Diaz-Gonzalez
dea195df26 fix: Use listener_port in nginx.conf.sigil
Closes #2676
2017-04-22 15:17:15 -06:00
Jose Diaz-Gonzalez
18957dcf39 Merge pull request #2678 from callahad/modern-tls
Update the default cipher suite
2017-04-22 14:42:19 -06:00
Jose Diaz-Gonzalez
4abad29b3a feat: set prefer_server_ciphers to on by default
[ci skip]
2017-04-20 20:14:10 -06:00
Dan Callahan
a939296981 Prefer HTTP2 to SPDY in nginx-vhosts
1.  SPDY has been deprecated and removed from modern browsers:
    http://caniuse.com/#feat=spdy

2.  HTTP/2 is present in all modern browsers:
    http://caniuse.com/#feat=http2

3.  SPDY and HTTP/2 are mutually exclusive in port-based `listen` directives:
    http://nginx.org/en/docs/http/ngx_http_core_module.html#listen

Caniuse suggests that 74% of global users have a browser that supports
HTTP/2, while only 27% have a browser that supports SPDY. Only IE11 and
Safari support both.

Therefore, when both are available, Dokku should choose HTTP/2 to
maximize the benefit to users.
2017-03-23 15:23:57 -05:00
Dan Callahan
071e746c45 Update the default cipher suite
This is the Modern preset from:
https://mozilla.github.io/server-side-tls/ssl-config-generator/
2017-03-23 15:11:57 -05:00