grpc_pass nginx 設定

grpc_pass nginx 設定

リゾルバで同じことを実行し、grpc_pass を設定すると失敗します。

    `server {
        listen 443 http2:
        server _name opc.org.com;
        ssl....;
        location / {
            resolver 127.0.0.11 valid=30s;
            set $https_webui https://dev_webui;
            proxy_pass $https_webui;
        }  
        location /App.Room.Api.Contract.ApiService/UpdateOpcDaTags {
            resolver 127.0.0.11 valid=30s;
            set $grpc_webui grpcs://dev_webui;
            grpc_pass $grpc_webui;
        }`

grpc-client で発生するエラーは次のとおりです:

    `[Microsoft.Extensions.Hosting.Internal.Host)
    [BackgroundServiceFaulted status   BackgroundServledGrpc.Co.RpcException
    (StatusCode="Unknown", Detail="Bad gRPC response. HTTP status code: 500")`

このような構成(例)の場合、

        `location /App.Room.Api.Contract.ApiService/UpdateOpcDaTags {
         grpc_pass grpcs://dev_webui;
         }`

バージョン nginx; nginx version: nginx/1.23.2

答え1

材料とテストを長期間検討した結果、エラーが発見されました。

variables構成で使用する場合、grpc_passこの grpc をリッスンできるポートが必要です。この例では、https と grpcs はポート 443 を使用します。

したがって、私にとっての作業構成は次のとおりです。

`server {
    listen 443 http2:
    server _name opc.org.com;
    ssl....;
    location / {
        resolver 127.0.0.11 valid=30s;
        set $https_webui https://dev_webui;
        proxy_pass $https_webui;
    }  
    location /App.Room.Api.Contract.ApiService/UpdateOpcDaTags {
        resolver 127.0.0.11 valid=30s;
        set $grpc_webui grpcs://dev_webui:443;
        grpc_pass $grpc_webui;
    }`

興味深いことに、proxy_passではポートを指定する必要はありません。https://が示されているためだと思います。

この設定により、nginxが維持するスタックは利用可能なスタックから消去され、nginxはhost not found in upstream再起動時にメッセージを送信しなくなります。

関連情報