Server¶
VaporにはSwiftNIO上に構築された高性能で非同期のHTTPサーバーが含まれています。このサーバーはHTTP/1、HTTP/2、およびWebSocketsなどのプロトコルアップグレードをサポートしています。サーバーはTLS(SSL)の有効化もサポートしています。
設定¶
VaporのデフォルトHTTPサーバーはapp.http.serverを介して設定できます。
// HTTP/2のみをサポート
app.http.server.configuration.supportVersions = [.two]
HTTPサーバーはいくつかの設定オプションをサポートしています。
ホスト名¶
ホスト名は、サーバーが新しい接続を受け入れるアドレスを制御します。デフォルトは127.0.0.1です。
// カスタムホスト名を設定
app.http.server.configuration.hostname = "dev.local"
サーバー設定のホスト名は、serveコマンドに--hostname(-H)フラグを渡すか、app.server.start(...)にhostnameパラメーターを渡すことでオーバーライドできます。
# 設定されたホスト名をオーバーライド
swift run App serve --hostname dev.local
ポート¶
ポートオプションは、指定されたアドレスでサーバーが新しい接続を受け入れるポートを制御します。デフォルトは8080です。
// カスタムポートを設定
app.http.server.configuration.port = 1337
Info
1024未満のポートにバインドするにはsudoが必要な場合があります。65535を超えるポートはサポートされていません。
サーバー設定のポートは、serveコマンドに--port(-p)フラグを渡すか、app.server.start(...)にportパラメーターを渡すことでオーバーライドできます。
# 設定されたポートをオーバーライド
swift run App serve --port 1337
バックログ¶
backlogパラメーターは、保留中の接続のキューの最大長を定義します。デフォルトは256です。
// カスタムバックログを設定
app.http.server.configuration.backlog = 128
アドレスの再利用¶
reuseAddressパラメーターは、ローカルアドレスの再利用を許可します。デフォルトはtrueです。
// アドレスの再利用を無効化
app.http.server.configuration.reuseAddress = false
TCP No Delay¶
tcpNoDelayパラメーターを有効にすると、TCPパケットの遅延を最小限に抑えようとします。デフォルトはtrueです。
// パケットの遅延を最小化
app.http.server.configuration.tcpNoDelay = true
レスポンス圧縮¶
responseCompressionパラメーターは、gzipを使用したHTTPレスポンスの圧縮を制御します。デフォルトは.disabledです。
// HTTPレスポンス圧縮を有効化
app.http.server.configuration.responseCompression = .enabled
初期バッファ容量を指定するには、initialByteBufferCapacityパラメーターを使用します。
.enabled(initialByteBufferCapacity: 1024)
リクエスト解凍¶
requestDecompressionパラメーターは、gzipを使用したHTTPリクエストの解凍を制御します。デフォルトは.disabledです。
// HTTPリクエスト解凍を有効化
app.http.server.configuration.requestDecompression = .enabled
解凍制限を指定するには、limitパラメーターを使用します。デフォルトは.ratio(10)です。
// 解凍サイズ制限なし
.enabled(limit: .none)
利用可能なオプション:
size:バイト単位での最大解凍サイズratio:圧縮バイトに対する比率としての最大解凍サイズnone:サイズ制限なし
解凍サイズ制限を設定することで、悪意のある圧縮されたHTTPリクエストが大量のメモリを使用することを防ぐことができます。
パイプライニング¶
supportPipeliningパラメーターは、HTTPリクエストとレスポンスのパイプライニングのサポートを有効にします。デフォルトはfalseです。
// HTTPパイプライニングをサポート
app.http.server.configuration.supportPipelining = true
バージョン¶
supportVersionsパラメーターは、サーバーが使用するHTTPバージョンを制御します。デフォルトでは、TLSが有効な場合、VaporはHTTP/1とHTTP/2の両方をサポートします。TLSが無効な場合はHTTP/1のみがサポートされます。
// HTTP/1サポートを無効化
app.http.server.configuration.supportVersions = [.two]
TLS¶
tlsConfigurationパラメーターは、サーバーでTLS(SSL)が有効かどうかを制御します。デフォルトはnilです。
// TLSを有効化
app.http.server.configuration.tlsConfiguration = .makeServerConfiguration(
certificateChain: try NIOSSLCertificate.fromPEMFile("/path/to/cert.pem").map { .certificate($0) },
privateKey: .privateKey(try NIOSSLPrivateKey(file: "/path/to/key.pem", format: .pem))
)
この設定をコンパイルするには、設定ファイルの先頭にimport NIOSSLを追加する必要があります。また、Package.swiftファイルにNIOSSLを依存関係として追加する必要がある場合もあります。
名前¶
serverNameパラメーターは、送信されるHTTPレスポンスのServerヘッダーを制御します。デフォルトはnilです。
// レスポンスに 'Server: vapor' ヘッダーを追加
app.http.server.configuration.serverName = "vapor"
Serveコマンド¶
Vaporのサーバーを起動するには、serveコマンドを使用します。他のコマンドが指定されていない場合、このコマンドはデフォルトで実行されます。
swift run App serve
serveコマンドは以下のパラメーターを受け入れます:
hostname(-H):設定されたホスト名をオーバーライドport(-p):設定されたポートをオーバーライドbind(-b)::で結合された設定済みホスト名とポートをオーバーライド
--bind(-b)フラグを使用した例:
swift run App serve -b 0.0.0.0:80
詳細についてはswift run App serve --helpを使用してください。
serveコマンドは、サーバーを正常にシャットダウンするためにSIGTERMとSIGINTをリッスンします。SIGINTシグナルを送信するにはctrl+c(^c)を使用します。ログレベルがdebug以下に設定されている場合、正常なシャットダウンのステータスに関する情報がログに記録されます。
手動起動¶
Vaporのサーバーはapp.serverを使用して手動で起動できます。
// Vaporのサーバーを起動
try app.server.start()
// サーバーのシャットダウンをリクエスト
app.server.shutdown()
// サーバーのシャットダウンを待機
try app.server.onShutdown.wait()
サーバー¶
Vaporが使用するサーバーは設定可能です。デフォルトでは、組み込みのHTTPサーバーが使用されます。
app.servers.use(.http)
カスタムサーバー¶
Vaporのデフォルトのサーバーは、Serverに準拠する任意の型で置き換えることができます。
import Vapor
final class MyServer: Server {
...
}
app.servers.use { app in
MyServer()
}
カスタムサーバーは、先頭ドット構文のためにApplication.Servers.Providerを拡張できます。
extension Application.Servers.Provider {
static var myServer: Self {
.init {
$0.servers.use { app in
MyServer()
}
}
}
}
app.servers.use(.myServer)