aboutsummaryrefslogtreecommitdiff
path: root/nixops/modules/websites/apache/per-server-options.nix
blob: 4bbd041b6e04262137b7f410f1d3f05b8c2eda37 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
# This file defines the options that can be used both for the Apache
# main server configuration, and for the virtual hosts.  (The latter
# has additional options that affect the web server as a whole, like
# the user/group to run under.)

{ forMainServer, lib }:

with lib;

{

  hostName = mkOption {
    type = types.str;
    default = "localhost";
    description = "Canonical hostname for the server.";
  };

  serverAliases = mkOption {
    type = types.listOf types.str;
    default = [];
    example = ["www.example.org" "www.example.org:8080" "example.org"];
    description = ''
      Additional names of virtual hosts served by this virtual host configuration.
    '';
  };

  port = mkOption {
    type = types.int;
    default = 0;
    description = ''
      Port for the server. Option will be removed, use <option>listen</option> instead.
  '';
  };

  listen = mkOption {
     type = types.listOf (types.submodule (
          {
            options = {
              port = mkOption {
                type = types.int;
                description = "port to listen on";
              };
              ip = mkOption {
                type = types.string;
                default = "*";
                description = "Ip to listen on. 0.0.0.0 for ipv4 only, * for all.";
              };
            };
          } ));
    description = ''
      List of { /* ip: "*"; */ port = 80;} to listen on
    '';

    default = [];
  };

  enableSSL = mkOption {
    type = types.bool;
    default = false;
    description = "Whether to enable SSL (https) support.";
  };

  # Note: sslServerCert and sslServerKey can be left empty, but this
  # only makes sense for virtual hosts (they will inherit from the
  # main server).

  sslServerCert = mkOption {
    type = types.nullOr types.path;
    default = null;
    example = "/var/host.cert";
    description = "Path to server SSL certificate.";
  };

  sslServerKey = mkOption {
    type = types.path;
    example = "/var/host.key";
    description = "Path to server SSL certificate key.";
  };

  sslServerChain = mkOption {
    type = types.nullOr types.path;
    default = null;
    example = "/var/ca.pem";
    description = "Path to server SSL chain file.";
  };

  adminAddr = mkOption ({
    type = types.nullOr types.str;
    example = "admin@example.org";
    description = "E-mail address of the server administrator.";
  } // (if forMainServer then {} else {default = null;}));

  documentRoot = mkOption {
    type = types.nullOr types.path;
    default = null;
    example = "/data/webserver/docs";
    description = ''
      The path of Apache's document root directory.  If left undefined,
      an empty directory in the Nix store will be used as root.
    '';
  };

  servedDirs = mkOption {
    type = types.listOf types.attrs;
    default = [];
    example = [
      { urlPath = "/nix";
        dir = "/home/eelco/Dev/nix-homepage";
      }
    ];
    description = ''
      This option provides a simple way to serve static directories.
    '';
  };

  servedFiles = mkOption {
    type = types.listOf types.attrs;
    default = [];
    example = [
      { urlPath = "/foo/bar.png";
        file = "/home/eelco/some-file.png";
      }
    ];
    description = ''
      This option provides a simple way to serve individual, static files.
    '';
  };

  extraConfig = mkOption {
    type = types.lines;
    default = "";
    example = ''
      <Directory /home>
        Options FollowSymlinks
        AllowOverride All
      </Directory>
    '';
    description = ''
      These lines go to httpd.conf verbatim. They will go after
      directories and directory aliases defined by default.
    '';
  };

  extraSubservices = mkOption {
    type = types.listOf types.unspecified;
    default = [];
    description = "Extra subservices to enable in the webserver.";
  };

  enableUserDir = mkOption {
    type = types.bool;
    default = false;
    description = ''
      Whether to enable serving <filename>~/public_html</filename> as
      <literal>/~<replaceable>username</replaceable></literal>.
    '';
  };

  globalRedirect = mkOption {
    type = types.nullOr types.str;
    default = null;
    example = http://newserver.example.org/;
    description = ''
      If set, all requests for this host are redirected permanently to
      the given URL.
    '';
  };

  logFormat = mkOption {
    type = types.str;
    default = "common";
    example = "combined";
    description = ''
      Log format for Apache's log files. Possible values are: combined, common, referer, agent.
    '';
  };

  robotsEntries = mkOption {
    type = types.lines;
    default = "";
    example = "Disallow: /foo/";
    description = ''
      Specification of pages to be ignored by web crawlers. See <link
      xlink:href='http://www.robotstxt.org/'/> for details.
    '';
  };

}