Merge pull request #223085 from Izorkin/update-nginx-proxy-cache

nixos/nginx: enable multiple proxyCachePath support
This commit is contained in:
Franz Pletz 2023-04-06 02:52:44 +02:00 committed by GitHub
commit 0e950a1ec7
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 29 additions and 13 deletions

View file

@ -321,6 +321,8 @@ In addition to numerous new and upgraded packages, this release has the followin
- Enabling global redirect in `services.nginx.virtualHosts` now allows one to add exceptions with the `locations` option.
- A new option `proxyCachePath` has been added to `services.nginx`. Learn more about proxy_cache_path: <https://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_cache_path>.
- A new option `recommendedBrotliSettings` has been added to `services.nginx`. Learn more about compression in Brotli format [here](https://github.com/google/ngx_brotli/blob/master/README.md).
- Updated recommended settings in `services.nginx.recommendedGzipSettings`:

View file

@ -102,6 +102,17 @@ let
proxy_set_header X-Forwarded-Server $host;
'';
proxyCachePathConfig = concatStringsSep "\n" (mapAttrsToList (name: proxyCachePath: ''
proxy_cache_path ${concatStringsSep " " [
"/var/cache/nginx/${name}"
"keys_zone=${proxyCachePath.keysZoneName}:${proxyCachePath.keysZoneSize}"
"levels=${proxyCachePath.levels}"
"use_temp_path=${if proxyCachePath.useTempPath then "on" else "off"}"
"inactive=${proxyCachePath.inactive}"
"max_size=${proxyCachePath.maxSize}"
]};
'') (filterAttrs (name: conf: conf.enable) cfg.proxyCachePath));
upstreamConfig = toString (flip mapAttrsToList cfg.upstreams (name: upstream: ''
upstream ${name} {
${toString (flip mapAttrsToList upstream.servers (name: server: ''
@ -241,16 +252,10 @@ let
server_tokens ${if cfg.serverTokens then "on" else "off"};
${optionalString cfg.proxyCache.enable ''
proxy_cache_path /var/cache/nginx keys_zone=${cfg.proxyCache.keysZoneName}:${cfg.proxyCache.keysZoneSize}
levels=${cfg.proxyCache.levels}
use_temp_path=${if cfg.proxyCache.useTempPath then "on" else "off"}
inactive=${cfg.proxyCache.inactive}
max_size=${cfg.proxyCache.maxSize};
''}
${cfg.commonHttpConfig}
${proxyCachePathConfig}
${vhosts}
${optionalString cfg.statusPage ''
@ -808,10 +813,10 @@ in
'';
};
proxyCache = mkOption {
type = types.submodule {
proxyCachePath = mkOption {
type = types.attrsOf (types.submodule ({ ... }: {
options = {
enable = mkEnableOption (lib.mdDoc "Enable proxy cache");
enable = mkEnableOption (lib.mdDoc "this proxy cache path entry");
keysZoneName = mkOption {
type = types.str;
@ -869,9 +874,12 @@ in
description = lib.mdDoc "Set maximum cache size";
};
};
};
}));
default = {};
description = lib.mdDoc "Configure proxy cache";
description = lib.mdDoc ''
Configure a proxy cache path entry.
See <http://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_cache_path> for documentation.
'';
};
resolver = mkOption {
@ -982,6 +990,12 @@ in
The Nginx log directory has been moved to /var/log/nginx, the cache directory
to /var/cache/nginx. The option services.nginx.stateDir has been removed.
'')
(mkRenamedOptionModule [ "services" "nginx" "proxyCache" "inactive" ] [ "services" "nginx" "proxyCachePath" "" "inactive" ])
(mkRenamedOptionModule [ "services" "nginx" "proxyCache" "useTempPath" ] [ "services" "nginx" "proxyCachePath" "" "useTempPath" ])
(mkRenamedOptionModule [ "services" "nginx" "proxyCache" "levels" ] [ "services" "nginx" "proxyCachePath" "" "levels" ])
(mkRenamedOptionModule [ "services" "nginx" "proxyCache" "keysZoneSize" ] [ "services" "nginx" "proxyCachePath" "" "keysZoneSize" ])
(mkRenamedOptionModule [ "services" "nginx" "proxyCache" "keysZoneName" ] [ "services" "nginx" "proxyCachePath" "" "keysZoneName" ])
(mkRenamedOptionModule [ "services" "nginx" "proxyCache" "enable" ] [ "services" "nginx" "proxyCachePath" "" "enable" ])
];
config = mkIf cfg.enable {