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)