Solução para o problema anterior : aumente proxy_read_timeout
ou verifique por que o seu back-end não responde a tempo.
Sua segunda pergunta : existem duas coisas, o cabeçalho Upgrade
e o cabeçalho Connection
.
Ambos precisam ser passados para o backend ao usar websockets e você pode usar um mapa para alterar o valor, dependendo dos cabeçalhos de solicitação originais (ou seja, se for um hashaske de conexão de websocket ou tráfego HTTP padrão). O back-end deve responder ao cabeçalho Upgrade
com HTTP 101
. Em seguida, o nginx entrará em um caso específico em que um túnel é configurado entre a origem da solicitação e o backend.
Tal caso é explicado na documentação oficial :
http { map $http_upgrade $connection_upgrade { default upgrade; '' close; } } server { ... location /foo/ { proxy_pass http://backend; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection $connection_upgrade; } }