

# Server

The server is responsible for accepting connections from clients, parsing their requests, and delivering them a response.

## Default

Starting your Droplet with a default server is simple.

    import Vapor

    let drop = try Droplet()
    try drop.run()

The default server will bind to host `0.0.0.0` at port `8080`.

## Config

If you are using a `Config/server.json` file, this is where you can easily change your host and port.

    {
        "port": "$PORT:8080",
        "host": "0.0.0.0",
        "securityLayer": "none"
    }

The default `server.json` is above. The port with try to resolve the environment variable `$PORT` or fallback to `8080`.

## TLS

TLS (formerly SSL) can be configured with a variety of different certificate and signature types.

### Verify

Verificiation of hosts and certificates can be disabled. They are enabled by default.

> Note: Be extremely careful when disabling these options.

    "tls": {
        "verifyHost": false,
        "verifyCertificates": false
    }

### Certificates

#### None

    "tls": {
        "certificates": "none"
    }

#### Chain

    "tls": {
        "certificates": "chain",
        "chainFile": "/path/to/chainfile"
    }

#### Files

    "tls": {
        "certificates": "files",
        "certificateFile": "/path/to/cert.pem",
        "privateKeyFile": "/path/to/key.pem"
    }

#### Certificate Authority

    "tls": {
        "certificates": "ca"
    }

### Signature

#### Self Signed

    "tls": {
        "signature": "selfSigned"
    }

#### Signed File

    "tls": {
        "signature": "signedFile",
        "caCertificateFile": "/path/to/file"
    }

#### Signed Directory

    "tls": {
        "signature": "signedDirectory",
        "caCertificateDirectory": "/path/to/dir"
    }

## Example

Here is an example `server.json` file using certificate files with a self signed signature and host verification redundantly set to `true`.

    {
        "port": "8443",
        "host": "0.0.0.0",
        "securityLayer": "tls",
        "tls": {
            "verifyHost": true,
            "certificates": "files",
            "certificateFile": "/vapor/certs/cert.pem",
            "privateKeyFile": "/vapor/certs/key.pem",
            "signature": "selfSigned"
        }
    }

## Nginx

It is highly recommended that you serve your Vapor project behind Nginx in production. Read more in the deploy Nginx section.