Warning
This section may contain outdated information.
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.
```swift 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)), ]) ````