モジュール ngx_http_grpc_module

設定例
ディレクティブ
     grpc_bind
     grpc_buffer_size
     grpc_connect_timeout
     grpc_hide_header
     grpc_ignore_headers
     grpc_intercept_errors
     grpc_next_upstream
     grpc_next_upstream_timeout
     grpc_next_upstream_tries
     grpc_pass
     grpc_pass_header
     grpc_read_timeout
     grpc_send_timeout
     grpc_set_header
     grpc_socket_keepalive
     grpc_ssl_certificate
     grpc_ssl_certificate_key
     grpc_ssl_ciphers
     grpc_ssl_conf_command
     grpc_ssl_crl
     grpc_ssl_key_log
     grpc_ssl_name
     grpc_ssl_password_file
     grpc_ssl_protocols
     grpc_ssl_server_name
     grpc_ssl_session_reuse
     grpc_ssl_trusted_certificate
     grpc_ssl_verify
     grpc_ssl_verify_depth

ngx_http_grpc_module モジュールは、gRPC サーバー (1.13.10) へのリクエストの転送を可能にします。このモジュールは、ngx_http_v2_module モジュールを必要とします。

設定例

server {
    listen 9000;

    http2 on;

    location / {
        grpc_pass 127.0.0.1:9000;
    }
}

ディレクティブ

構文 grpc_bind アドレス [transparent ] | off;
デフォルト
コンテキスト http, server, location

gRPC サーバーへの発信接続を、指定されたローカル IP アドレスとオプションのポートから発信するようにします。パラメータ値には変数を含めることができます。特別な値 off は、前の設定レベルから継承された grpc_bind ディレクティブの効果をキャンセルし、システムがローカル IP アドレスとポートを自動的に割り当てることを可能にします。

transparent パラメータは、gRPC サーバーへの発信接続を、ローカル以外の IP アドレス、たとえばクライアントの実際の IP アドレスから発信することを可能にします。

grpc_bind $remote_addr transparent;

このパラメータを動作させるには、通常、nginx ワーカープロセスをスーパーユーザー権限で実行する必要があります。Linux では、transparent パラメータが指定されている場合、ワーカープロセスはマスタープロセスから CAP_NET_RAW ケーパビリティを継承するため、これは必要ありません。また、gRPC サーバーからのネットワークトラフィックをインターセプトするようにカーネルルーティングテーブルを設定する必要があります。

構文 grpc_buffer_size サイズ;
デフォルト
grpc_buffer_size 4k|8k;
コンテキスト http, server, location

gRPC サーバーから受信したレスポンスの読み取りに使用するバッファのサイズを設定します。レスポンスは、受信されるとすぐにクライアントに同期的に渡されます。

構文 grpc_connect_timeout 時間;
デフォルト
grpc_connect_timeout 60s;
コンテキスト http, server, location

gRPC サーバーとの接続を確立するためのタイムアウトを定義します。通常、このタイムアウトは 75 秒を超えることはできません。

構文 grpc_hide_header フィールド;
デフォルト
コンテキスト http, server, location

デフォルトでは、nginx は gRPC サーバーのレスポンスからクライアントへのヘッダーフィールド "Date"、"Server"、および "X-Accel-..." を渡しません。 grpc_hide_header ディレクティブは、渡されない追加のフィールドを設定します。逆に、フィールドの受け渡しを許可する必要がある場合は、grpc_pass_header ディレクティブを使用できます。

構文 grpc_ignore_headers フィールド ...;
デフォルト
コンテキスト http, server, location

gRPC サーバーからの特定のレスポンスヘッダーフィールドの処理を無効にします。"X-Accel-Redirect" および "X-Accel-Charset" フィールドを無視できます。

無効にしない場合、これらのヘッダーフィールドの処理には次の効果があります。

構文 grpc_intercept_errors on | off;
デフォルト
grpc_intercept_errors off;
コンテキスト http, server, location

300 以上のコードを持つ gRPC サーバーのレスポンスをクライアントに渡すか、インターセプトして error_page ディレクティブで処理するために nginx にリダイレクトするかを決定します。

構文 grpc_next_upstream error | timeout | invalid_header | http_500 | http_502 | http_503 | http_504 | http_403 | http_404 | http_429 | non_idempotent | off ...;
デフォルト
grpc_next_upstream error timeout;
コンテキスト http, server, location

リクエストを次のサーバーに渡す必要がある場合を指定します。

error
サーバーとの接続の確立、サーバーへのリクエストの送信、またはレスポンスヘッダーの読み取り中にエラーが発生しました。
timeout
サーバーとの接続の確立、サーバーへのリクエストの送信、またはレスポンスヘッダーの読み取り中にタイムアウトが発生しました。
invalid_header
サーバーが空または無効なレスポンスを返しました。
http_500
サーバーがコード 500 のレスポンスを返しました。
http_502
サーバーがコード 502 のレスポンスを返しました。
http_503
サーバーがコード 503 のレスポンスを返しました。
http_504
サーバーがコード 504 のレスポンスを返しました。
http_403
サーバーがコード 403 のレスポンスを返しました。
http_404
サーバーがコード 404 のレスポンスを返しました。
http_429
サーバーがコード 429 のレスポンスを返しました。
non_idempotent
通常、冪等でないメソッド (POSTLOCKPATCH) を使用したリクエストは、アップストリームサーバーにリクエストが送信されている場合、次のサーバーに渡されません。このオプションを有効にすると、そのようなリクエストを明示的に再試行できます。
off
リクエストを次のサーバーに渡すことを無効にします。

リクエストを次のサーバーに渡すことができるのは、クライアントにまだ何も送信されていない場合のみであることに注意してください。つまり、レスポンスの転送中にエラーまたはタイムアウトが発生した場合、これを修正することはできません。

このディレクティブは、サーバーとの通信の失敗した試行と見なされるものも定義します。 errortimeout、および invalid_header の場合は、ディレクティブで指定されていない場合でも、常に失敗した試行と見なされます。 http_500http_502http_503http_504、および http_429 の場合は、ディレクティブで指定されている場合にのみ失敗した試行と見なされます。 http_403 および http_404 の場合は、失敗した試行とは見なされません。

リクエストを次のサーバーに渡すことは、試行回数時間によって制限できます。

構文 grpc_next_upstream_timeout 時間;
デフォルト
grpc_next_upstream_timeout 0;
コンテキスト http, server, location

リクエストを次のサーバーに渡すことができる時間を制限します。 0 値は、この制限をオフにします。

構文 grpc_next_upstream_tries 回数;
デフォルト
grpc_next_upstream_tries 0;
コンテキスト http, server, location

リクエストを次のサーバーに渡すことができる試行回数を制限します。 0 値は、この制限をオフにします。

構文 grpc_pass アドレス;
デフォルト
コンテキスト location, if in location

gRPC サーバーのアドレスを設定します。アドレスは、ドメイン名または IP アドレスとポートとして指定できます。

grpc_pass localhost:9000;

または、UNIX ドメインソケットパスとして指定できます。

grpc_pass unix:/tmp/grpc.socket;

あるいは、"grpc://" スキームを使用できます。

grpc_pass grpc://127.0.0.1:9000;

SSL 経由で gRPC を使用するには、"grpcs://" スキームを使用する必要があります。

grpc_pass grpcs://127.0.0.1:443;

ドメイン名が複数のアドレスに解決される場合、それらはすべてラウンドロビン方式で使用されます。さらに、アドレスはサーバーグループとして指定できます。

パラメータ値には変数を含めることができます (1.17.8)。この場合、アドレスがドメイン名として指定されている場合、名前は記述されているサーバーグループの中から検索され、見つからない場合はリゾルバーを使用して決定されます。

構文 grpc_pass_header フィールド;
デフォルト
コンテキスト http, server, location

そうでなければ無効になっているヘッダーフィールドを gRPC サーバーからクライアントに渡すことを許可します。

構文 grpc_read_timeout 時間;
デフォルト
grpc_read_timeout 60s;
コンテキスト http, server, location

gRPC サーバーからのレスポンスを読み取るためのタイムアウトを定義します。タイムアウトは、レスポンス全体の送信ではなく、2 つの連続した読み取り操作の間にのみ設定されます。 gRPC サーバーがこの時間内に何も送信しない場合、接続は閉じられます。

構文 grpc_send_timeout 時間;
デフォルト
grpc_send_timeout 60s;
コンテキスト http, server, location

gRPC サーバーにリクエストを送信するためのタイムアウトを設定します。タイムアウトは、リクエスト全体の送信ではなく、2 つの連続した書き込み操作の間にのみ設定されます。 gRPC サーバーがこの時間内に何も受信しない場合、接続は閉じられます。

構文 grpc_set_header フィールド ;
デフォルト
grpc_set_header Content-Length $content_length;
コンテキスト http, server, location

gRPC サーバーに渡されるリクエストヘッダーのフィールドを再定義または追加することを可能にします。 には、テキスト、変数、およびそれらの組み合わせを含めることができます。これらのディレクティブは、現在のレベルで grpc_set_header ディレクティブが定義されていない場合にのみ、前の設定レベルから継承されます。

ヘッダーフィールドの値が空の文字列の場合、このフィールドは gRPC サーバーに渡されません。

grpc_set_header Accept-Encoding "";

構文 grpc_socket_keepalive on | off;
デフォルト
grpc_socket_keepalive off;
コンテキスト http, server, location

このディレクティブはバージョン 1.15.6 で登場しました。

gRPC サーバーへの発信接続の「TCP キープアライブ」動作を構成します。デフォルトでは、ソケットにはオペレーティングシステムの設定が有効です。ディレクティブが "on" に設定されている場合、ソケットの SO_KEEPALIVE ソケットオプションがオンになります。

構文 grpc_ssl_certificate ファイル;
デフォルト
コンテキスト http, server, location

gRPC SSL サーバーへの認証に使用される PEM 形式の証明書を含むファイルを指定します。

バージョン 1.21.0 以降、ファイル名に変数を使用できます。

構文 grpc_ssl_certificate_key ファイル;
デフォルト
コンテキスト http, server, location

gRPC SSL サーバーへの認証に使用される PEM 形式の秘密鍵を含むファイルを指定します。

ファイルの代わりに値 engine:名前:ID を指定できます。これは、指定された ID の秘密鍵を OpenSSL エンジン 名前 からロードします。

バージョン 1.21.0 以降、ファイル名に変数を使用できます。

構文 grpc_ssl_ciphers 暗号;
デフォルト
grpc_ssl_ciphers DEFAULT;
コンテキスト http, server, location

gRPC SSL サーバーへのリクエストに対して有効な暗号を指定します。暗号は、OpenSSL ライブラリで理解される形式で指定されます。

完全なリストは、"openssl ciphers" コマンドを使用して表示できます。

構文 grpc_ssl_conf_command 名前 ;
デフォルト
コンテキスト http, server, location

このディレクティブはバージョン 1.19.4 で登場しました。

gRPC SSL サーバーとの接続を確立するときに、任意の OpenSSL 設定コマンドを設定します。

このディレクティブは、OpenSSL 1.0.2 以降を使用する場合にサポートされます。

同じレベルで複数の grpc_ssl_conf_command ディレクティブを指定できます。これらのディレクティブは、現在のレベルで grpc_ssl_conf_command ディレクティブが定義されていない場合にのみ、前の設定レベルから継承されます。

OpenSSL を直接設定すると、予期しない動作が発生する可能性があることに注意してください。

構文 grpc_ssl_crl ファイル;
デフォルト
コンテキスト http, server, location

gRPC SSL サーバーの証明書を検証するために使用される、PEM 形式の失効した証明書 (CRL) を含むファイルを指定します。

構文 grpc_ssl_key_log パス;
デフォルト
コンテキスト http, server, location

このディレクティブはバージョン 1.27.2 で登場しました。

gRPC SSL サーバー接続 SSL 鍵のログ記録を有効にし、鍵ログファイルへのパスを指定します。鍵は、Wireshark と互換性のある SSLKEYLOGFILE 形式でログに記録されます。

このディレクティブは、商用サブスクリプションの一部として利用できます。

構文 grpc_ssl_name 名前;
デフォルト
grpc_ssl_name host from grpc_pass;
コンテキスト http, server, location

gRPC SSL サーバーの証明書を検証するために使用されるサーバー名と、gRPC SSL サーバーとの接続を確立するときにSNI 経由で渡されるサーバー名を上書きすることを可能にします。

デフォルトでは、grpc_pass のホスト部分が使用されます。

構文 grpc_ssl_password_file ファイル;
デフォルト
コンテキスト http, server, location

秘密鍵(secret keys)のパスフレーズを指定したfileを指定します。各パスフレーズは別々の行に指定します。キーの読み込み時にパスフレーズは順番に試行されます。

構文 grpc_ssl_protocols [SSLv2] [SSLv3] [TLSv1] [TLSv1.1] [TLSv1.2] [TLSv1.3];
デフォルト
grpc_ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3;
コンテキスト http, server, location

gRPC SSL サーバーへのリクエストに対して、指定されたプロトコルを有効にします。

TLSv1.3 パラメータは、1.23.4 以降デフォルトで使用されます。

構文 grpc_ssl_server_name on | off;
デフォルト
grpc_ssl_server_name off;
コンテキスト http, server, location

gRPC SSL サーバーとの接続確立時に、TLS Server Name Indication 拡張 (SNI, RFC 6066) を介したサーバー名の受け渡しを有効または無効にします。

構文 grpc_ssl_session_reuse on | off;
デフォルト
grpc_ssl_session_reuse on;
コンテキスト http, server, location

gRPC サーバーとの通信時に SSL セッションを再利用できるかどうかを決定します。ログに "SSL3_GET_FINISHED:digest check failed" というエラーが表示される場合は、セッションの再利用を無効にしてみてください。

構文 grpc_ssl_trusted_certificate file;
デフォルト
コンテキスト http, server, location

gRPC SSL サーバーの証明書の検証に使用する、信頼できる CA 証明書が PEM 形式で記述されたfileを指定します。

構文 grpc_ssl_verify on | off;
デフォルト
grpc_ssl_verify off;
コンテキスト http, server, location

gRPC SSL サーバー証明書の検証を有効または無効にします。

構文 grpc_ssl_verify_depth number;
デフォルト
grpc_ssl_verify_depth 1;
コンテキスト http, server, location

gRPC SSL サーバー証明書チェーンの検証深度を設定します。