Commit graph

352 commits

Author SHA1 Message Date
stuebinm 6afb255d97 nixos: remove all uses of lib.mdDoc
these changes were generated with nixq 0.0.2, by running

  nixq ">> lib.mdDoc[remove] Argument[keep]" --batchmode nixos/**.nix
  nixq ">> mdDoc[remove] Argument[keep]" --batchmode nixos/**.nix
  nixq ">> Inherit >> mdDoc[remove]" --batchmode nixos/**.nix

two mentions of the mdDoc function remain in nixos/, both of which
are inside of comments.

Since lib.mdDoc is already defined as just id, this commit is a no-op as
far as Nix (and the built manual) is concerned.
2024-04-13 10:07:35 -07:00
Robert Schütz 1dd5f2b1f9 nixos/nginx: turn auth_request off for ACME challenge
This is e.g. necessary when using tailscale-nginx-auth.
2024-02-05 00:33:33 -08:00
Ryan Lahfa 6d8630efda
Merge pull request #270270 from SuperSandro2000/nginx-fastopen
nixos/nginx: filter more options when listening has quic
2024-01-12 20:01:29 +01:00
Ryan Lahfa 3287441158
Merge pull request #275484 from Izorkin/update-nginx-http3
nixos/nginx: disable automatic advertise of HTTP/3 protocol support
2024-01-12 19:49:18 +01:00
Peder Bergebakken Sundt f489e99576
Merge pull request #277925 from Izorkin/update-nginx-http2
nixos/nginx: use new variant of http2 option for angie package
2024-01-12 01:40:18 +01:00
Izorkin 10c06cb060
nginx: enable ktls support by default 2024-01-01 12:02:57 +03:00
Izorkin 2fb0b52c50
nixos/nginx: disable automatic advertise of HTTP/3 protocol support
Automatic advertise in the `http` block about support of HTTP/3
protocol makes it difficult to automatically configure services
to work with it.
HTTP/3 availability must be manually advertised, preferably in
each location block.
2024-01-01 02:29:01 +03:00
Izorkin d11fe979a2
nixos/nginx: use new variant of http2 option for angie package 2023-12-31 16:52:08 +03:00
Izorkin ae5c0c1521
nixos/nginx: skip adding a comment to acmeLocation in nginx configuration 2023-12-30 23:50:02 +03:00
Izorkin 7f1b6d45af
nixos/nginx: change position acmeLocation in nginx configuration 2023-12-30 23:49:58 +03:00
Sandro Jäckel 157256f9dd
nixos/nginx: filter more options when listening has quic 2023-12-23 02:20:48 +01:00
Izorkin 86efccfa45
angie: init at 1.4.0 2023-12-17 22:43:13 +03:00
Ryan Lahfa 3bb93fb2cd
Merge pull request #271506 from Misterio77/nginx-redirect-status-code 2023-12-12 14:05:33 +01:00
Gabriel Fontes a3c60d2ddc
nixos/nginx: make redirect status code configurable
Add an option to configure which code globalRedirect and forceSSL use.
It previously was always 301 with no easy way to override.
2023-12-11 11:09:02 -03:00
Sandro Jäckel 78541e68eb
nixos/nginx: allow return to be an int 2023-12-08 15:04:27 +01:00
phaer c40f706dc4 nixos/nginx/tailscale-auth: init module 2023-12-06 20:57:38 +01:00
Anthony Roussel e30f48be94
treewide: fix redirected and broken URLs
Using the script in maintainers/scripts/update-redirected-urls.sh
2023-11-11 10:49:01 +01:00
Artturi 61f2bd3178
Merge pull request #254386 from erikarvstedt/nginx-js-mime-type 2023-10-27 23:32:20 +03:00
Sandro f4d631c3d1
nixos/nginx: document implicit default port 80 2023-10-22 21:32:50 +02:00
Carl Dong e5c2c71280 nixos/nginx: Allow empty port for listen directive
When listening on unix sockets, it doesn't make sense to specify a port
for nginx's listen directive.

Since nginx defaults to port 80 when the port isn't specified (but the
address is), we can change the default for the option to null as well
without changing any behaviour.
2023-10-09 21:16:03 -04:00
Marek Beyer ea1eb4ee0f
nixos/nginx: add systemd-tmpfiles exclusion of temporary directories
Directories used by nginx in the tmp path are only created upon startup and
must not be deleted while nginx is running.
2023-10-06 14:26:37 +02:00
Izorkin 64fe8c9292
nixos/nginx: allow enabling QUIC packet routing using eBPF 2023-09-19 16:16:34 +03:00
Erik Arvstedt 7ce5fa1a82
nixos/nginx: add application/javascript to compressMimeTypes
Although deprecated, this MIME type is still used by various
applications and web frameworks which are potentially proxied by nginx.

Examples:
- Apps based on ASP.NET Core
- Apps based on http.server (Python)
2023-09-10 13:56:23 +02:00
Sandro c6af5494aa
nixos/nginx: fix services.nginx.defaultListen description 2023-09-03 16:45:10 +02:00
Izorkin cf7cea3287
nixos/nginx: using new variant of http2 directive 2023-08-03 07:09:02 +03:00
Ryan Lahfa 899b60de3f
Merge pull request #245893 from h7x4/move-nginx-status-page-declaration 2023-07-29 20:22:58 +02:00
h7x4 d803f78e7c
nixos/nginx: move status page config to services.nginx 2023-07-28 20:29:09 +02:00
oddlama cbdaab0f17
nixos/nginx: remove unnecessary acme locations to allow double proxied setups 2023-07-27 15:30:38 +02:00
Joe Edmonds f87892b50b nixos/modules/web-servers/nginx/default.nix: fix minor typo 2023-06-06 21:55:15 -07:00
Raito Bezarius 69bb0f94de nixos/nginx: first-class PROXY protocol support
PROXY protocol is a convenient way to carry information about the
originating address/port of a TCP connection across multiple layers of
proxies/NAT, etc.

Currently, it is possible to make use of it in NGINX's NixOS module, but
is painful when we want to enable it "globally".
Technically, this is achieved by reworking the defaultListen options and
the objective is to have a coherent way to specify default listeners in
the current API design.
See `mkDefaultListenVhost` and `defaultListen` for the details.

It adds a safeguard against running a NGINX with no HTTP listeners (e.g.
only PROXY listeners) while asking for ACME certificates over HTTP-01.

An interesting usecase of PROXY protocol is to enable seamless IPv4 to
IPv6 proxy with origin IPv4 address for IPv6-only NGINX servers, it is
demonstrated how to achieve this in the tests, using sniproxy.

Finally, the tests covers:

- NGINX `defaultListen` mechanisms are not broken by these changes;
- NGINX PROXY protocol listeners are working in a final usecase
  (sniproxy);
- uses snakeoil TLS certs from ACME setup with wildcard certificates;

In the future, it is desirable to spoof-attack NGINX in this scenario to
ascertain that `set_real_ip_from` and all the layers are working as
intended and preventing any user from setting their origin IP address to
any arbitrary, opening up the NixOS module to bad™ vulnerabilities.

For now, it is quite hard to achieve while being minimalistic about the
tests dependencies.
2023-05-26 19:48:26 +02:00
Izorkin 2809915f19
nixos/nginx: allow arbitrary parameters in upstream servers
Adds a `freeformType` to `services.nginx.upstreams.<name>.servers` to
allow setting arbitrary parameters.
2023-05-07 11:17:49 +02:00
sandydoo 2086b377cf
nixos/nginx: serve the status page on localhost servers
The status page is inaccessible by default, unless a virtual host is
added with a `server_name` that's not `localhost`.

This commit moves the status page configuration, so that
it's matched before the main server blocks.
2023-04-28 07:20:36 +00:00
Jan Tojnar e25dc4a95e nixos/nginx: Fix listen string generation
This regressed in 327b0cff7a breaking nixosTests.php, among other things.
2023-04-21 17:18:45 +02:00
Artturi b83db86a9e
Merge pull request #222080 from Stunkymonkey/nixos-optionalString 2023-04-20 16:07:30 +03:00
K900 c29ccca1a3
Merge pull request #222923 from oddlama/fix-nginx-duplicate-mime
nixos/nginx: fix warning about duplicate mime entry
2023-04-09 14:58:39 +03:00
Felix Buehler 327b0cff7a treewide: use more lib.optionalString 2023-04-07 13:38:33 +02:00
Franz Pletz 0e950a1ec7
Merge pull request #223085 from Izorkin/update-nginx-proxy-cache
nixos/nginx: enable multiple proxyCachePath support
2023-04-06 02:52:44 +02:00
Sandro 44bdb9ce9f
Merge pull request #223091 from Izorkin/update-nginx-compression 2023-04-02 00:32:47 +02:00
Izorkin 427ae14373
nixos/nginx: update description in compression modules 2023-04-01 13:56:26 +03:00
Izorkin 8a289bcc79
nixos/nginx: enable multiple proxyCachePath support 2023-04-01 13:55:56 +03:00
Izorkin 77d6fd36cf
nixos/nginx: update quic configuration 2023-04-01 13:09:49 +03:00
oddlama ba0a1611fc
nixos/nginx: fix warning about duplicate mime entry 2023-03-24 19:44:00 +01:00
Sandro 995f9d1c95
Merge pull request #213874 from SuperSandro2000/nginx-zstd
nixos/nginx: add recommendedZstdSettings
2023-03-23 14:11:35 +01:00
Izorkin 5eb5d881a4
nixos/nginx: add defaultMimeTypes option 2023-03-07 19:37:18 +03:00
Sandro Jäckel 5e5a84b193
nixos/nginx: add recommendedZstdSettings 2023-02-22 13:59:53 +01:00
Sandro 6cdec6d1b8
nixos/nginx: add comment about clearing Connection header (#214211) 2023-02-06 23:37:38 +01:00
Nick Cao 4840ca34f4
Merge pull request #213626 from jamesreprise/entries-typo
nginx: fix typo in commonHttpConfig
2023-02-02 09:12:32 +08:00
Sandro 600adcfdcc
Merge pull request #187994 from Izorkin/update-nginx-gzip 2023-01-31 20:41:59 +01:00
Izorkin d178a1d7a1
nixos/nginx: update recommended brotli settings 2023-01-30 23:13:12 +03:00
Izorkin ee7e096c48
nixos/nginx: update recommended gzip settings 2023-01-30 23:03:01 +03:00
Sandro Jäckel 2d3efd3301
nixos/nginx: clear clients Connection headers 2023-01-30 20:25:22 +01:00
James Williams 18ab2268cd
fix: typo (enries -> entries) 2023-01-30 19:08:30 +00:00
Guillaume Girol cb73862665 Revert "nixos/nginx: validate syntax of config file at build time"
This reverts commit a768871934.

This is too fragile, it breaks at least on:
* ssl dh params
* hostnames in proxypass and upstreams are resolved in the sandbox
2023-01-20 20:10:19 +01:00
Guillaume Girol ecb06398e7 Revert "nixos/nginx: disable configuration validation for now"
This reverts commit 7ef58bce9d.
2023-01-20 20:07:47 +01:00
Sandro Jäckel b973513d04
nixos/nginx: cleanup, remove old todo 2023-01-09 22:04:06 +01:00
Kevin Cox c930fd9517
Merge pull request #207874 from kevincox/nginx-unique
nixos/nginx: Deduplicate modules.
2023-01-03 13:07:43 -05:00
Izorkin 4a7d0140a0
nixos/nginx: add recommended brotli settings 2022-12-29 18:14:35 +03:00
Kevin Cox 487b51e77c
nixos/nginx: Deduplicate modules.
In most places in NixOS defining an option multiple places just merges the result together. This is particularly useful if you have two modules that both need an option, you don't want to have problems when they both set it. This makes the nginx `additionalModules` option follow this pattern.
2022-12-26 15:47:51 -05:00
Jörg Thalheim 7ef58bce9d nixos/nginx: disable configuration validation for now
There still seem a lot of breakages not addressed yet:

https://github.com/NixOS/nixpkgs/pull/205561
2022-12-24 09:25:43 +01:00
Guillaume Girol 92dbac3199
Merge pull request #205561 from symphorien/nginx-conf-validate
nixos/nginx: validate config at build time
2022-12-19 19:52:33 +00:00
Valentin Gagarin f782da699e
Merge pull request #206646 from figsoda/typos 2022-12-18 18:27:57 +01:00
Vincent Bernat fc39b5ecc8 nginx: make global redirect vhost option accept exceptions
By moving the return into a location directive, one can provide
exceptions by adding locations. This is similar to what the forceSSL
option does.
2022-12-18 12:21:27 +01:00
figsoda 6bb0dbf91f nixos: fix typos 2022-12-17 19:31:14 -05:00
Guillaume Girol a768871934 nixos/nginx: validate syntax of config file at build time
Shamelessly stolen from nixcloud-webservices:
https://github.com/nixcloud/nixcloud-webservices/blob/master/modules/web/webserver/lib/nginx_check_config.nix

The nixos test testing the behavior of nginx in case of faulty config
would not build with this change (on purpose), so I modified it so that
the failure is not syntactic.
2022-12-10 23:04:57 +01:00
Daniel Nagy ad866e565d
treewide: switch to port type for nixos modules 2022-12-08 00:00:00 +01:00
Alexander Bantyev df85dda331
Merge pull request #198314 from Izorkin/update-nginx-cache
nixos/nginx: add proxyCache options
2022-11-27 18:51:09 +04:00
Pierre Bourdon 4ac2dbfec5
Merge pull request #201329 from jqqqqqqqqqq/master
nixos/nginx: fix default listen port options
2022-11-15 17:57:51 +01:00
Curtis Jiang f7bed8cd44 nixos/nginx: fix default listen port options 2022-11-15 15:11:52 +00:00
Franz Pletz f0609d6c05
Merge pull request #198529 from jqqqqqqqqqq/master 2022-11-15 04:58:47 +01:00
Curtis Jiang 81cd6b06f9 nixos/nginx: add default listen port options 2022-11-15 02:00:03 +00:00
Bryan Richter e3fc19b301
nixos/nginx: docs: Update formatting
* Capitalize ACME
* Use bold instead of ALL CAPS
* Tweak sentence structure
2022-11-14 12:24:17 +02:00
Bryan Richter fd9eed5bf3
nixos/nginx: Extend acmeFallbackHost documentation
This extra example would have saved me a lot of uncertainty and doubt.
2022-11-14 11:54:33 +02:00
Izorkin c09fd120cc
nixos/nginx: add proxyCache options 2022-11-01 10:07:38 +03:00
Dave Nicponski 1a73877305 Tweak nginx config for Let's Encrypt ACME challenges
Currently, this is using a "URI prefix match", but per nginx docs,

```
[...] the location with the longest matching prefix is selected and remembered. Then regular expressions are checked, in the order of their appearance in the configuration file. The search of regular expressions terminates on the first match, and the corresponding configuration is used. If no match with a regular expression is found then the configuration of the prefix location remembered earlier is used.
```
which means a config like this (from wordpress service) will override that
```
locations = {
          "~ /\\." = {
            priority = 800;
            extraConfig = "deny all;";
          };
};
```
😱
Luckily, from nginx docs:
```
If the longest matching prefix location has the “^~” modifier then regular expressions are not checked.
```

Whew!
2022-10-20 10:59:28 -04:00
pennae 1d41cff3dc nixos/*: convert straggler options to MD 2022-08-31 17:27:38 +02:00
pennae ef176dcf7e nixos/*: automatically convert option descriptions
conversions were done using https://github.com/pennae/nix-doc-munge
using (probably) rev f34e145 running

    nix-doc-munge nixos/**/*.nix
    nix-doc-munge --import nixos/**/*.nix

the tool ensures that only changes that could affect the generated
manual *but don't* are committed, other changes require manual review
and are discarded.
2022-08-31 16:32:53 +02:00
pennae c915b915b5 nixos/*: md-convert options with unordered lists
mostly no rendering changes. some lists (like simplelist) don't have an
exact translation to markdown, so we use a comma-separated list of
literals instead.
2022-08-31 16:32:53 +02:00
pennae 6039648c50 nixos/*: automatically convert option docs 2022-08-19 22:40:58 +02:00
pennae 7e7d68a250 nixos/*: mark pre-existing markdown descriptions as mdDoc 2022-08-19 22:40:58 +02:00
pennae b51f8036c2 nixos/*: use properly indented strings for option docs
using regular strings works well for docbook because docbook is not as
whitespace-sensitive as markdown. markdown would render all of these as
code blocks when given the chance.
2022-08-19 22:40:58 +02:00
pennae 72b507d5a2 nixos/*: convert some markdown in docbook to tags
a lot of markdown syntax has already snuck into option docs, many of it
predating the intent to migrate to markdown. we don't convert all of it
here, just that which is accompanied by docbook tags as well. the rest
can be converted by simply adding the mdDoc marker.
2022-08-19 22:40:58 +02:00
pennae 087472b1e5 nixos/*: automatically convert option docs 2022-08-06 20:39:12 +02:00
pennae 3aebb4a2be nixos/*: normalize link format
make (almost) all links appear on only a single line, with no
unnecessary whitespace, using double quotes for attributes. this lets us
automatically convert them to markdown easily.

the few remaining links are extremely long link in a gnome module, we'll
come back to those at a later date.
2022-08-03 21:57:46 +02:00
pennae 2e751c0772 treewide: automatically md-convert option descriptions
the conversion procedure is simple:

 - find all things that look like options, ie calls to either `mkOption`
   or `lib.mkOption` that take an attrset. remember the attrset as the
   option
 - for all options, find a `description` attribute who's value is not a
   call to `mdDoc` or `lib.mdDoc`
 - textually convert the entire value of the attribute to MD with a few
   simple regexes (the set from mdize-module.sh)
 - if the change produced a change in the manual output, discard
 - if the change kept the manual unchanged, add some text to the
   description to make sure we've actually found an option. if the
   manual changes this time, keep the converted description

this procedure converts 80% of nixos options to markdown. around 2000
options remain to be inspected, but most of those fail the "does not
change the manual output check": currently the MD conversion process
does not faithfully convert docbook tags like <code> and <package>, so
any option using such tags will not be converted at all.
2022-07-30 15:16:34 +02:00
Luflosi 320e4dbcc3
nixos/nginx: fix broken listenAddresses example
When using the example without the square brackets, nginx fails to start:
```
nginx-pre-start: nginx: [emerg] invalid port in "::1:80" of the "listen" directive in /nix/store/xyz-nginx.conf:29
nginx-pre-start: nginx: configuration file /nix/store/xyz-nginx.conf test failed
```
2022-07-04 19:46:18 +02:00
Winter 6c53004840 nixos/nginx: allow recommended proxy settings to be enabled per location 2022-06-12 19:52:35 -04:00
ajs124 30186896ee nixos/nginx: fix SystemCallFilter for openresty 2022-05-30 11:58:28 +02:00
Izorkin e87240e216 nixos/nginx: add extraParameters to http3 protocol 2022-04-11 22:33:12 +02:00
Izorkin c508da303b nixos/nginx: add reuseport option 2022-04-11 22:33:12 +02:00
Izorkin 660a36f173 nixos/nginx: fix http3 configuration 2022-04-11 22:33:12 +02:00
Dominique Martinet b0a04e4105 nginx/logrotate: run logrotate as nginx user 2022-04-01 07:09:27 +09:00
Dominique Martinet e92c05349c nixos/logrotate: convert to freeform
using freeform is the new standard way of using modules and should replace
extraConfig.
In particular, this will allow us to place a condition on mails
2022-04-01 07:09:26 +09:00
Izorkin b672e4dd2c
nginxModules: add option disableIPC
The disableIPC option is required to checking enabled nginxModules
and disable the SystemCallFilter IPC filter.
2022-03-08 14:37:11 +03:00
Janne Heß e5823f77b3
Merge pull request #159187 from martinetd/logrotate
logrotate service enhancements
2022-02-23 11:24:17 +01:00
Dominique Martinet c7618fbd9b nginx: add logrotate rule for nginx logs 2022-02-11 21:07:37 +09:00
Sandro Jäckel ae66e2d5ec
treewide: use configured nginx package 2022-02-08 12:13:30 +01:00
Jörg Thalheim fd382c011a
Merge branch 'master' into nginx 2022-01-31 05:44:42 +01:00
Jörg Thalheim 26ea046ed7
Update nixos/modules/services/web-servers/nginx/default.nix 2022-01-31 05:43:53 +01:00
Daniel Olsen ab7e6995ac nixos/nginx: Add defaultListenAddresses option
Lets you specify the default listen address if none are listed in the vhost configuration.

Useful for hosts with more than one ip
2022-01-24 02:20:30 +01:00
Winter b52607f43b nixos/acme: ensure web servers using certs can access them 2022-01-08 15:05:34 -05:00