forked from mirrors/nixpkgs
Merge pull request #209075 from symphorien/nginx-validate-config-revert
nixos/nginx: revert config validation
This commit is contained in:
commit
04bf8215a9
|
@ -287,16 +287,6 @@
|
|||
<literal>llvmPackages_rocm.clang-unwrapped</literal>.
|
||||
</para>
|
||||
</listitem>
|
||||
<listitem>
|
||||
<para>
|
||||
The Nginx module now validates the syntax of config files at
|
||||
build time. For more complex configurations (using
|
||||
<literal>include</literal> with out-of-store files notably)
|
||||
you may need to disable this check by setting
|
||||
<link linkend="opt-services.nginx.validateConfig">services.nginx.validateConfig</link>
|
||||
to <literal>false</literal>.
|
||||
</para>
|
||||
</listitem>
|
||||
<listitem>
|
||||
<para>
|
||||
The EC2 image module previously detected and automatically
|
||||
|
|
|
@ -73,8 +73,6 @@ In addition to numerous new and upgraded packages, this release has the followin
|
|||
|
||||
- `llvmPackages_rocm.llvm` will not contain `clang` or `compiler-rt`. `llvmPackages_rocm.clang` will not contain `llvm`. `llvmPackages_rocm.clangNoCompilerRt` has been removed in favor of using `llvmPackages_rocm.clang-unwrapped`.
|
||||
|
||||
- The Nginx module now validates the syntax of config files at build time. For more complex configurations (using `include` with out-of-store files notably) you may need to disable this check by setting [services.nginx.validateConfig](#opt-services.nginx.validateConfig) to `false`.
|
||||
|
||||
- The EC2 image module previously detected and automatically mounted ext3-formatted instance store devices and partitions in stage-1 (initramfs), storing `/tmp` on the first discovered device. This behaviour, which only catered to very specific use cases and could not be disabled, has been removed. Users relying on this should provide their own implementation, and probably use ext4 and perform the mount in stage-2.
|
||||
|
||||
- `teleport` has been upgraded to major version 11. Please see upstream [upgrade instructions](https://goteleport.com/docs/setup/operations/upgrading/) and [release notes](https://goteleport.com/docs/changelog/#1100).
|
||||
|
|
|
@ -288,7 +288,7 @@ let
|
|||
|
||||
configPath = if cfg.enableReload
|
||||
then "/etc/nginx/nginx.conf"
|
||||
else finalConfigFile;
|
||||
else configFile;
|
||||
|
||||
execCommand = "${cfg.package}/bin/nginx -c '${configPath}'";
|
||||
|
||||
|
@ -440,38 +440,6 @@ let
|
|||
);
|
||||
|
||||
mkCertOwnershipAssertion = import ../../../security/acme/mk-cert-ownership-assertion.nix;
|
||||
|
||||
snakeOilCert = pkgs.runCommand "nginx-config-validate-cert" { nativeBuildInputs = [ pkgs.openssl.bin ]; } ''
|
||||
mkdir $out
|
||||
openssl genrsa -des3 -passout pass:xxxxx -out server.pass.key 2048
|
||||
openssl rsa -passin pass:xxxxx -in server.pass.key -out $out/server.key
|
||||
openssl req -new -key $out/server.key -out server.csr \
|
||||
-subj "/C=UK/ST=Warwickshire/L=Leamington/O=OrgName/OU=IT Department/CN=example.com"
|
||||
openssl x509 -req -days 1 -in server.csr -signkey $out/server.key -out $out/server.crt
|
||||
'';
|
||||
validatedConfigFile = pkgs.runCommand "validated-nginx.conf" { nativeBuildInputs = [ cfg.package ]; } ''
|
||||
# nginx absolutely wants to read the certificates even when told to only validate config, so let's provide fake certs
|
||||
sed ${configFile} \
|
||||
-e "s|ssl_certificate .*;|ssl_certificate ${snakeOilCert}/server.crt;|g" \
|
||||
-e "s|ssl_trusted_certificate .*;|ssl_trusted_certificate ${snakeOilCert}/server.crt;|g" \
|
||||
-e "s|ssl_certificate_key .*;|ssl_certificate_key ${snakeOilCert}/server.key;|g" \
|
||||
> conf
|
||||
|
||||
LD_PRELOAD=${pkgs.libredirect}/lib/libredirect.so \
|
||||
NIX_REDIRECTS="/etc/resolv.conf=/dev/null" \
|
||||
nginx -t -c $(readlink -f ./conf) > out 2>&1 || true
|
||||
if ! grep -q "syntax is ok" out; then
|
||||
echo nginx config validation failed.
|
||||
echo config was ${configFile}.
|
||||
echo 'in case of false positive, set `services.nginx.validateConfig` to false.'
|
||||
echo nginx output:
|
||||
cat out
|
||||
exit 1
|
||||
fi
|
||||
cp ${configFile} $out
|
||||
'';
|
||||
|
||||
finalConfigFile = if cfg.validateConfig then validatedConfigFile else configFile;
|
||||
in
|
||||
|
||||
{
|
||||
|
@ -580,17 +548,6 @@ in
|
|||
'';
|
||||
};
|
||||
|
||||
validateConfig = mkOption {
|
||||
# FIXME: re-enable if we can make of the configurations work.
|
||||
#default = pkgs.stdenv.hostPlatform == pkgs.stdenv.buildPlatform;
|
||||
default = false;
|
||||
defaultText = literalExpression "pkgs.stdenv.hostPlatform == pkgs.stdenv.buildPlatform";
|
||||
type = types.bool;
|
||||
description = lib.mdDoc ''
|
||||
Validate the generated nginx config at build time. The check is not very robust and can be disabled in case of false positives. This is notably the case when cross-compiling or when using `include` with files outside of the store.
|
||||
'';
|
||||
};
|
||||
|
||||
additionalModules = mkOption {
|
||||
default = [];
|
||||
type = types.listOf (types.attrsOf types.anything);
|
||||
|
@ -1128,7 +1085,7 @@ in
|
|||
};
|
||||
|
||||
environment.etc."nginx/nginx.conf" = mkIf cfg.enableReload {
|
||||
source = finalConfigFile;
|
||||
source = configFile;
|
||||
};
|
||||
|
||||
# This service waits for all certificates to be available
|
||||
|
@ -1147,7 +1104,7 @@ in
|
|||
# certs are updated _after_ config has been reloaded.
|
||||
before = sslTargets;
|
||||
after = sslServices;
|
||||
restartTriggers = optionals cfg.enableReload [ finalConfigFile ];
|
||||
restartTriggers = optionals cfg.enableReload [ configFile ];
|
||||
# Block reloading if not all certs exist yet.
|
||||
# Happens when config changes add new vhosts/certs.
|
||||
unitConfig.ConditionPathExists = optionals (sslServices != []) (map (certName: certs.${certName}.directory + "/fullchain.pem") dependentCertNames);
|
||||
|
|
|
@ -61,7 +61,7 @@ import ./make-test-python.nix ({ pkgs, ... }: {
|
|||
|
||||
specialisation.reloadWithErrorsSystem.configuration = {
|
||||
services.nginx.package = pkgs.nginxMainline;
|
||||
services.nginx.virtualHosts."hello".extraConfig = "access_log /does/not/exist.log;";
|
||||
services.nginx.virtualHosts."!@$$(#*%".locations."~@#*$*!)".proxyPass = ";;;";
|
||||
};
|
||||
};
|
||||
};
|
||||
|
|
Loading…
Reference in a new issue