리졸버로 동일한 작업을 수행하고 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
다시 시작할 때 메시지를 보내지 않습니다.