WebServer configuration

The primary focus of CID is on continuous integration and delivery of web projects. Therefore, advanced web server integration is one of primary aspects.

CID is focused on nginx, but the configuration is neutral.

Configuration

Configuration root is .webcfg node of futoin.json.

  • .webcfg.root - web root folder relative to project root.
  • .webcfg.main - default index handler entry point name.
  • .webcfg.mounts - {} - path prefix to details in form of:

    • string - name of related entry point.
    • map - advanced config:

      • .app - name of related entry point,
      • .static = false - try to serve static files, if true,
      • .tune = {} - fine options:

        • .pattern = true - enable other options based on pattern match
        • .staticGzip = true - try to use pre-compressed “*.gz” files
        • .gzip = false - compress in transmission
        • .expires = 'max' - add expires header
        • .autoindex = false - enable auto-indexing
        • .index = 'index.html' - default index file
        • .etag = false - enable ETag

Mount point

In current specification, mount point is assumed to be location as defined in nginx or apache. However, mount point cannot have own file system path.

.static mount point option

This option allows serving static files from .webcfg.root, if they match the mount point.

The default value is true, unless .app is set.

.tune.pattern tune option

Pattern matching automatically configures web server to use proper compression and headers approach for files based on extension type.

.tune.staticGzip tune option

Forcibly enables using pre-compressed *.gz files instead of spending CPU cycles.

.tune.gzip tune option

Controls if gzip compression can be used, if supported by HTTP client.

.tune.expires tune option

Web server specific value to control Expires and cache control headers.

.tune.autoindex tune option

Enables automatic indexing of folders without index file and/or associated entry point.

.tune.index tune option

Sets default index file name.

.tune.etag tune option

Controls ETag and related header support.

Development execution

Previously described cid devserve command almost completely mimics production environment without any need to setup local development web server.

Complex example

This configuration is focused on nginx with some fine lookup optimizations. CID does not enforce routes validation - they are passed to tool configuration as is.

{
  "entryPoints": {
    "backend": {
      "tool": "node",
      "path": "server.js",
      "tune": {
        "internal": true,
        "scalable": false
      }
    },
    "frontend": {
      "tool": "nginx",
      "path": "webroot",
      "tune": {
        "cid": {
          "serveStatic": true
        },
        "config": {
          "http": {
            "server": {
              "rewrite '^/([a-z]{2})/$'": "/index.$1.html last",
              "location = /": {
                "return": "302 /en/"
              }
            }
          }
        }
      }
    }
  },
  "webcfg": {
    "root": "webroot",
    "mounts": {
      "/": {
        "tune": {
          "pattern": false,
          "gzip": true,
          "staticGzip": true
        }
      },
      "^~ /api/": "backend",
      "^~ /img/": {
        "tune": {
          "pattern": false
        }
      },
      "^~ /fonts/": {
        "tune": {
          "pattern": false
        }
      },
      "^~ /icons-": {
        "tune": {
          "pattern": false
        }
      },
      "~ \"^/index\\.[a-z]{2}\\.html$\"": {
        "tune": {
          "pattern": false,
          "gzip": true,
          "staticGzip": true,
          "expires": "epoch"
        }
      }
    }
  }
}