当我对解析器执行相同操作并设置 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 维护的任何堆栈都可以从可用堆栈中清除,并且 nginxhost not found in upstream
在重新启动时不会发送消息