Back to Vapor

Server

docs/advanced/server.ja.md

latest8.1 KB
Original Source

Server

VaporにはSwiftNIO上に構築された高性能で非同期のHTTPサーバーが含まれています。このサーバーはHTTP/1、HTTP/2、およびWebSocketsなどのプロトコルアップグレードをサポートしています。サーバーはTLS(SSL)の有効化もサポートしています。

設定 {#configuration}

VaporのデフォルトHTTPサーバーはapp.http.serverを介して設定できます。

swift
// HTTP/2のみをサポート
app.http.server.configuration.supportVersions = [.two]

HTTPサーバーはいくつかの設定オプションをサポートしています。

ホスト名 {#hostname}

ホスト名は、サーバーが新しい接続を受け入れるアドレスを制御します。デフォルトは127.0.0.1です。

swift
// カスタムホスト名を設定
app.http.server.configuration.hostname = "dev.local"

サーバー設定のホスト名は、serveコマンドに--hostname-H)フラグを渡すか、app.server.start(...)hostnameパラメーターを渡すことでオーバーライドできます。

sh
# 設定されたホスト名をオーバーライド
swift run App serve --hostname dev.local

ポート {#port}

ポートオプションは、指定されたアドレスでサーバーが新しい接続を受け入れるポートを制御します。デフォルトは8080です。

swift
// カスタムポートを設定
app.http.server.configuration.port = 1337

!!! info 1024未満のポートにバインドするにはsudoが必要な場合があります。65535を超えるポートはサポートされていません。

サーバー設定のポートは、serveコマンドに--port-p)フラグを渡すか、app.server.start(...)portパラメーターを渡すことでオーバーライドできます。

sh
# 設定されたポートをオーバーライド
swift run App serve --port 1337

バックログ {#backlog}

backlogパラメーターは、保留中の接続のキューの最大長を定義します。デフォルトは256です。

swift
// カスタムバックログを設定
app.http.server.configuration.backlog = 128

アドレスの再利用 {#reuse-address}

reuseAddressパラメーターは、ローカルアドレスの再利用を許可します。デフォルトはtrueです。

swift
// アドレスの再利用を無効化
app.http.server.configuration.reuseAddress = false

TCP No Delay

tcpNoDelayパラメーターを有効にすると、TCPパケットの遅延を最小限に抑えようとします。デフォルトはtrueです。

swift
// パケットの遅延を最小化
app.http.server.configuration.tcpNoDelay = true

レスポンス圧縮 {#response-compression}

responseCompressionパラメーターは、gzipを使用したHTTPレスポンスの圧縮を制御します。デフォルトは.disabledです。

swift
// HTTPレスポンス圧縮を有効化
app.http.server.configuration.responseCompression = .enabled

初期バッファ容量を指定するには、initialByteBufferCapacityパラメーターを使用します。

swift
.enabled(initialByteBufferCapacity: 1024)

リクエスト解凍 {#request-decompression}

requestDecompressionパラメーターは、gzipを使用したHTTPリクエストの解凍を制御します。デフォルトは.disabledです。

swift
// HTTPリクエスト解凍を有効化
app.http.server.configuration.requestDecompression = .enabled

解凍制限を指定するには、limitパラメーターを使用します。デフォルトは.ratio(10)です。

swift
// 解凍サイズ制限なし
.enabled(limit: .none)

利用可能なオプション:

  • size:バイト単位での最大解凍サイズ
  • ratio:圧縮バイトに対する比率としての最大解凍サイズ
  • none:サイズ制限なし

解凍サイズ制限を設定することで、悪意のある圧縮されたHTTPリクエストが大量のメモリを使用することを防ぐことができます。

パイプライニング {#pipelining}

supportPipeliningパラメーターは、HTTPリクエストとレスポンスのパイプライニングのサポートを有効にします。デフォルトはfalseです。

swift
// HTTPパイプライニングをサポート
app.http.server.configuration.supportPipelining = true

バージョン {#versions}

supportVersionsパラメーターは、サーバーが使用するHTTPバージョンを制御します。デフォルトでは、TLSが有効な場合、VaporはHTTP/1とHTTP/2の両方をサポートします。TLSが無効な場合はHTTP/1のみがサポートされます。

swift
// HTTP/1サポートを無効化
app.http.server.configuration.supportVersions = [.two]

TLS

tlsConfigurationパラメーターは、サーバーでTLS(SSL)が有効かどうかを制御します。デフォルトはnilです。

swift
// 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を依存関係として追加する必要がある場合もあります。

名前 {#name}

serverNameパラメーターは、送信されるHTTPレスポンスのServerヘッダーを制御します。デフォルトはnilです。

swift
// レスポンスに 'Server: vapor' ヘッダーを追加
app.http.server.configuration.serverName = "vapor"

Serveコマンド {#serve-command}

Vaporのサーバーを起動するには、serveコマンドを使用します。他のコマンドが指定されていない場合、このコマンドはデフォルトで実行されます。

swift
swift run App serve

serveコマンドは以下のパラメーターを受け入れます:

  • hostname (-H):設定されたホスト名をオーバーライド
  • port (-p):設定されたポートをオーバーライド
  • bind (-b)::で結合された設定済みホスト名とポートをオーバーライド

--bind-b)フラグを使用した例:

swift
swift run App serve -b 0.0.0.0:80

詳細についてはswift run App serve --helpを使用してください。

serveコマンドは、サーバーを正常にシャットダウンするためにSIGTERMSIGINTをリッスンします。SIGINTシグナルを送信するにはctrl+c^c)を使用します。ログレベルがdebug以下に設定されている場合、正常なシャットダウンのステータスに関する情報がログに記録されます。

手動起動 {#manual-start}

Vaporのサーバーはapp.serverを使用して手動で起動できます。

swift
// Vaporのサーバーを起動
try app.server.start()
// サーバーのシャットダウンをリクエスト
app.server.shutdown()
// サーバーのシャットダウンを待機
try app.server.onShutdown.wait()

サーバー {#servers}

Vaporが使用するサーバーは設定可能です。デフォルトでは、組み込みのHTTPサーバーが使用されます。

swift
app.servers.use(.http)

カスタムサーバー {#custom-server}

Vaporのデフォルトのサーバーは、Serverに準拠する任意の型で置き換えることができます。

swift
import Vapor

final class MyServer: Server {
	...
}

app.servers.use { app in
	MyServer()
}

カスタムサーバーは、先頭ドット構文のためにApplication.Servers.Providerを拡張できます。

swift
extension Application.Servers.Provider {
    static var myServer: Self {
        .init {
            $0.servers.use { app in
            	MyServer()
            }
        }
    }
}

app.servers.use(.myServer)