服务器负责接受来自客户端的连接,解析他们的请求,并向他们发送响应。
Default
Droplet会运行一个默认的服务器。
import Vapor
let drop = Droplet()
drop.run()
这个默认的服务器 host:0.0.0.0
,端口号:8080
。
Config
你可以通过Config/servers.json
文件轻松更改主机、端口号甚至开启多个服务器。
{
"default": {
"port": "$PORT:8080",
"host": "0.0.0.0",
"securityLayer": "none"
}
}
上面就是默认的servers.json
。端口号环境变量设置为$PORT
,若$PORT
不存在,则回退为8080
。
Multiple
你可以在一个应用中开启多个服务器,尤其在你需要同时开启HTTP
和HTTPS
服务器时这很有用。
{
"plaintext": {
"port": "80",
"host": "vapor.codes",
"securityLayer": "none"
},
"secure": {
"port": "443",
"host": "vapor.codes",
"securityLayer": "tls",
"tls": {
"certificates": "none",
"signature": "selfSigned"
}
},
}
TLS
TLS(以前称为SSL)可以配置各种不同的证书和签名类型。
Verify
可以禁止验证证书或者主机。默认是需要验证的。
Note:修改这些需要格外谨慎。
"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
下面是一个使用证书文件进行自签名签名和主机验证的servers.json
文件示例:
{
"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
可以不使用配置文件手动配置server。
注意:如果服务器是通过程序配置的,它们将覆盖任何配置文件的设置。
Simple
Droplet的run
方法携带了一个配置信息的字典对象,key
就是server
的名字。
import Vapor
let drop = Droplet()
drop.run(servers: [
"default": (host: "vapor.codes", port: 8080, securityLayer: .none)
]
TLS
TLS也可以手动配置,和上面在servers.json
配置的描述一样。
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)),
])