4

I try to connect from api user to my hyperledger fabric network via nginx server. I have next settings in my *.conf files:

  • first file
upstream rca-org1 {
    server XXXX:7054;
}

upstream couchdb {
    server XXXX:5984;
}


server {
    
    listen XXXX:80 default_server;

    listen [::]:80;

    server_name XXXX;

    access_log path/to/nginx/access.log;

location / {

    root /app/build;

    index index.html;

    try_files $uri /index.html;

}

location /api {
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto $scheme;
    proxy_set_header Host $http_host;
    proxy_redirect off;
    proxy_pass http://rca-org1;
}

location /wallet {
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto $scheme;
    proxy_set_header Host $http_host;
    proxy_redirect off;
    proxy_pass http://couchdb;
}
  • second file
upstream network {
    server XXXX:7051;
}

server {

    listen 80 http2;

    listen [::]:80;

    server_name XXXX;

    access_log /path/to/nginx/access.log;

location /channels {
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto $scheme;
    proxy_set_header Host $http_host;
    proxy_redirect off;
    grpc_pass grpc://network;

}

    location ~/(static|media)/ {

        root /app/build/;

    }
 }

When I try to execute connect request from k8s claster (there are store my node.js api and my hf network in k8s cluster) to nginx, I receive this output:

Error: 13 INTERNAL: Received RST_STREAM with code 2 triggered by internal client error: Protocol error        at Object.callErrorFromStatus (/path/to/node_modules/fabric-protos/node_modules/@grpc/grpc-js/build/src/call.js:31:19)        at Object.onReceiveStatus (/path/to/node_modules/fabric-protos/node_modules/@grpc/grpc-js/build/src/client.js:190:52)        at Object.onReceiveStatus (/path/to/node_modules/fabric-protos/node_modules/@grpc/grpc-js/build/src/client-interceptors.js:365:141)        at Object.onReceiveStatus (/path/to/node_modules/fabric-protos/node_modules/@grpc/grpc-js/build/src/client-interceptors.js:328:181)        at /path/to/node_modules/fabric-protos/node_modules/@grpc/grpc-js/build/src/call-stream.js:188:78        at processTicksAndRejections (internal/process/task_queues.js:77:11)    for call at        at ServiceClientImpl.makeUnaryRequest (/path/to/node_modules/fabric-protos/node_modules/@grpc/grpc-js/build/src/client.js:160:30)        at ServiceClientImpl.<anonymous> (/path/to/node_modules/fabric-protos/node_modules/@grpc/grpc-js/build/src/make-client.js:105:19)        at /path/to/node_modules/fabric-common/lib/Discoverer.js:73:17        at new Promise (<anonymous>)        at Discoverer.sendDiscovery (/path/to/node_modules/fabric-common/lib/Discoverer.js:54:10)        at DiscoveryService.send (/path/to/node_modules/fabric-common/lib/DiscoveryService.js:318:30)        at processTicksAndRejections (internal/process/task_queues.js:95:5)        at async NetworkImpl._initializeInternalChannel (/path/to/node_modules/fabric-network/lib/network.js:300:13)        at async NetworkImpl._initialize (/path/to/node_modules/fabric-network/lib/network.js:250:9)        at async Gateway.getNetwork (/path/to/node_modules/fabric-network/lib/gateway.js:350:9)        at async fabricConnectorForUser (/path/to/custom_policies/fabricConnectorForUser/index.js:28:23)

My access.log:

10.39.22.45 - - [29/Sep/2022:16:57:52 +0300] "PRI * HTTP/2.0" 400 157 "-" "-"

My error.log:

2022/09/29 16:57:21 [warn] 5810#5810: conflicting server name "XXXX" on [::]:80, ignored

Ivan
  • 303
  • 3
  • 13
  • "Protocol error" generally indicates that the client got something other than a valid HTTP/2 response from the server or proxy that it was interacting with. – murgatroid99 Oct 05 '22 at 22:32
  • Has anyone solved this problem ? It's very frustrating because there is no info about what could possible be the solution. – Alex MAN Feb 16 '23 at 18:02

1 Answers1

0

I received the same error, can't guarantee it was the same exact issue because I don't use nginx as a proxy. My setup was - nodejs and the fabric-network library and running it locally with the fabric-samples/test-network. My issue was the connection_file I was using no longer matched the organization connection file you get when spinning up a test network.

So if you have the same setup as I did, copy the fabric-samples/test-network/organizations/peerOrganizations/org{something}.example.com/connection-org{somemthing}.json file to the connection file you're using to setup your node connection (would be defined in the config.json file in the root of your backend). Basically, your TLS validation is failing when trying to connect to your peer node. You can also look at logs coming from the peer node for more information.

Nate Nolan
  • 31
  • 4