Nginx: não é possível fazer proxy de alguns caminhos para o servidor Node.js (entre contêineres docker dwo)

Nginx: não é possível fazer proxy de alguns caminhos para o servidor Node.js (entre contêineres docker dwo)

Portanto, minha configuração atual é a seguinte: estou usando o docker (instalação sem root) e quero usarCriptografado(que usa Node.js) com Nginx como proxy reverso (isenção de responsabilidade: nunca trabalhei com Nginx antes). Cryptpad e Nginx estão sendo executados em contêineres separados. Para servir os arquivos estáticos, criei um volume onde residem todos os arquivos estáticos do Cryptpad e que é montado no Nginx-Container (somente leitura). O problema é que alguns conteúdos não podem ser servidos desta forma: os grandes arquivos blob serão salvos em um diretório externo que só pode ser acessado a partir do Cryptpad-Container (tenho minhas razões para isso). Então tentei dizer ao Nginx para proxy_pass a solicitação desses arquivos para o Node-Server do Cryptpad, mas não consigo descobrir como definir esse redirecionamento.

Minha configuração:

  • nome do contêiner Nginx: nginx
  • nome do Cryptpad-Container: cryptpad
  • porta do Node-Server: 3000
  • ambos os contêineres estão conectados à mesma rede de ponte (personalizada) (e, portanto, são acessíveis por seus nomes de contêiner)

O Nginx-Config para o servidor (abreviado para a seção relevante; código completo adaptado deaqui)

[...]
location ^~ /block/ {# modified block location to test proxy (is accessed more easily than blob)
    add_header Cache-Control max-age=0;

    #try_files $uri =404;# original code
    try_files http://cryptpad:3000/$request_uri =409;# arbitrary error code to differentiate from normal errors
}
[...]
location @node {# used to proxy all unhandled locations to node
    proxy_pass http://cryptpad:3000;
}

try_files /www/$uri /www/$uri/index.html /customize/$uri @node;

Mas sempre que /block/ é acessado o servidor retorna 409 então o redirecionamento não funcionou. Eu também tentei com proxy_pass http://cryptpad:3000/$request_uri/;ou proxy_pass http://cryptpad:3000;(que resultou em 404) e try_files @node =409;.

Alguém sabe como fazer esse redirecionamento interno funcionar ou pelo menos uma forma de monitorar o tráfego entre os dois contêineres?

Responder1

Depois de mais algumas tentativas, encontrei uma configuração que funcionou: simplesmente copiei as outras linhas de proxy_passes do exemplo e assim a definição resultante para /block/ se parece com

location ^~ /block/ {
    add_header Cache-Control max-age=0;

    proxy_pass http://cryptpad:3000;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header Host $host;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_hide_header Cross-Origin-Resource-Policy;
    #add_header Cross-Origin-Resource-Policy cross-origin;
    proxy_hide_header Cross-Origin-Embedder-Policy;
    #add_header Cross-Origin-Embedder-Policy require-corp;
}

informação relacionada