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 = Droplet()
drop.run()
The default server will bind to host 0.0.0.0 at port 8080.
Config#
If you are using a Config/servers.json file, this is where you can easily change your host and port or even boot multiple servers.
{
"default": {
"port": "$PORT:8080",
"host": "0.0.0.0",
"securityLayer": "none"
}
}
The default servers.json is above. The port with try to resolve the environment variable $PORT or fallback to 8080.
Multiple#
You can start multiple servers in the same application. This is especially useful if you want to boot an HTTP and HTTPS server side by side.
{
"plaintext": {
"port": "80",
"host": "vapor.codes",
"securityLayer": "none"
},
"secure": {
"port": "443",
"host": "vapor.codes",
"securityLayer": "tls",
"tls": {
"certificates": "none",
"signature": "selfSigned"
}
},
}
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 servers.json file using certificate files with a self signed signature and host verification redundantly set to true.
{
"secure": {
"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"
}
}
}
Manual#
Servers can also be configured manually, without configuration files.
Note: If servers are configured programatically, they override any config settings.
Simple#
The run method on the Droplet takes a dictionary of server configuration objects. The key is the name of the server.
import Vapor
let drop = Droplet()
drop.run(servers: [
"default": (host: "vapor.codes", port: 8080, securityLayer: .none)
]
TLS#
TLS can also be configured manually, and works similarly to the servers.json config files described above.
import Vapor
import TLS
let drop = Droplet()
let config = try TLS.Config(
mode: .server,
certificates: .files(
certificateFile: "/Users/tanner/Desktop/certs/cert.pem",
privateKeyFile: "/Users/tanner/Desktop/certs/key.pem",
signature: .selfSigned
),
verifyHost: true,
verifyCertificates: true
)
drop.run(servers: [
"plaintext": ("vapor.codes", 8080, .none),
"secure": ("vapor.codes", 8443, .tls(config)),
])