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다시 시작할 때 메시지를 보내지 않습니다.

관련 정보