diff --git a/modules/module-list.nix b/modules/module-list.nix index 40e9765cd3e5..b2d81358a90d 100644 --- a/modules/module-list.nix +++ b/modules/module-list.nix @@ -179,6 +179,7 @@ ./services/ttys/agetty.nix ./services/web-servers/apache-httpd/default.nix ./services/web-servers/jboss/default.nix + ./services/web-servers/nginx/default.nix ./services/web-servers/tomcat.nix ./services/x11/desktop-managers/default.nix ./services/x11/display-managers/auto.nix diff --git a/modules/services/web-servers/nginx/default.nix b/modules/services/web-servers/nginx/default.nix new file mode 100644 index 000000000000..628572f7bf3b --- /dev/null +++ b/modules/services/web-servers/nginx/default.nix @@ -0,0 +1,65 @@ +{ config, pkgs, ... }: + +with pkgs.lib; + +let + cfg = config.services.nginx; + configFile = pkgs.writeText "nginx.conf" '' + ${cfg.config} + ''; +in + +{ + options = { + services.nginx = { + enable = mkOption { + default = false; + description = " + Enable the nginx Web Server. + "; + }; + + config = mkOption { + default = ""; + description = " + Verbatim nginx.conf configuration. + "; + }; + + stateDir = mkOption { + default = "/var/spool/nginx"; + description = " + Directory holding all state for nginx to run. + "; + }; + }; + + }; + + config = mkIf cfg.enable { + environment.systemPackages = [ pkgs.nginx ]; + + # TODO: test user supplied config file pases syntax test + + systemd.services.nginx = { + description = "Nginx Web Server"; + after = [ "network.target" ]; + wantedBy = [ "multi-user.target" ]; + path = [ pkgs.nginx ]; + preStart = + '' + mkdir -p ${cfg.stateDir}/logs + chown -R nginx:nginx ${cfg.stateDir} + ''; + serviceConfig = { + ExecStart = "${pkgs.nginx}/bin/nginx -c ${configFile} -p ${cfg.stateDir}"; + }; + }; + + users.extraUsers.nginx = { + group = "nginx"; + }; + + users.extraGroups.nginx = {}; + }; +}