Created
April 8, 2017 07:07
-
-
Save danbst/f1e81358d5dd0ba9c763a950e91a25d0 to your computer and use it in GitHub Desktop.
Extending NixOS submodules
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# this example adds an option `.tomcatProxy` in namespace | |
# services.nginx.virtualHosts.*.locations.* | |
# that acts as alternative to specifying actual nginx config in .extraConfig | |
# | |
# execute with | |
/* | |
cat $(grep -o "/nix/store/[a-z0-9]*-nginx.conf" \ | |
$(NIX_PATH=nixos-config=./example.nix:$NIX_PATH \ | |
nix-build --no-out-link -E ' | |
with import <nixpkgs/nixos> {}; | |
config.system.build.toplevel | |
')/etc/systemd/system/nginx.service) | |
*/ | |
# Thanks to @nbp (https://github.com/NixOS/nixpkgs/issues/24653#issuecomment-292684727) | |
{ lib, config, pkgs, ...}: | |
let | |
locationOptions = with lib; { config, ...}: { | |
options.tomcatProxy = mkOption { | |
type = types.bool; | |
default = false; | |
}; | |
config.extraConfig = mkIf config.tomcatProxy '' | |
proxy_set_header Content-Type "application/x-www-form-urlencoded;charset=utf-8"; | |
proxy_set_header X-Real-IP $remote_addr; | |
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; | |
''; | |
}; | |
in { | |
options = with lib; with types; { | |
services.nginx.virtualHosts = mkOption { | |
type = attrsOf (submodule { | |
options.locations = mkOption { | |
type = attrsOf (submodule locationOptions); | |
}; | |
}); | |
}; | |
}; | |
config = { | |
fileSystems."/".device = "nodev"; | |
boot.loader.grub.devices = [ "nodev" ]; | |
services.nginx.enable = true; | |
services.nginx.virtualHosts."example.com" = { | |
locations."/" = { | |
proxyPass = "http://app.container:8080/servlet"; | |
tomcatProxy = true; | |
}; | |
}; | |
}; | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
events { | |
} | |
http { | |
include /nix/store/z5fxncldz06hdq4jsb6xsh3d248r8i4p-nginx-1.10.1/conf/mime.types; | |
include /nix/store/z5fxncldz06hdq4jsb6xsh3d248r8i4p-nginx-1.10.1/conf/fastcgi.conf; | |
ssl_protocols TLSv1.2; | |
ssl_ciphers EECDH+aRSA+AESGCM:EDH+aRSA:EECDH+aRSA:+AES256:+AES128:+SHA1:!CAMELLIA:!SEED:!3DES:!DES:!RC4:!eNULL; | |
client_max_body_size 10m; | |
server_tokens off; | |
server { | |
listen 80; | |
listen [::]:80; | |
server_name example.com ; | |
location / { | |
proxy_pass http://app.container:8080/servlet; | |
proxy_set_header Content-Type "application/x-www-form-urlencoded;charset=utf-8"; | |
proxy_set_header X-Real-IP $remote_addr; | |
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; | |
} | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment