Nginx:无法代理到 Node.js 服务器的某些路径(在 dwo docker 容器之间)

Nginx:无法代理到 Node.js 服务器的某些路径(在 dwo docker 容器之间)

所以我当前的设置如下:我正在使用docker(无根安装)并且想要使用密码本(使用 Node.js)以 Nginx 作为反向代理(免责声明:我之前从未使用过 Nginx)。Cryptpad 和 Nginx 都在单独的容器中运行。为了提供静态文件,我创建了一个卷,Cryptpad 的所有静态文件都驻留在该卷中,该卷安装在 Nginx 容器中(只读)。问题是,某些内容无法以这种方式提供:大型 blob 文件将保存在只能从 Cryptpad 容器访问的外部目录中(我这样做有自己的理由)。因此,我尝试告诉 Nginx 将这些文件的请求通过 proxy_pass 传递到 Cryptpad 的 Node 服务器,但我不知道如何定义此重定向。

我的配置:

  • Nginx-Container 的名称:nginx
  • Cryptpad-Container 的名称:cryptpad
  • Node-Server端口:3000
  • 两个容器都连接到同一个(自定义)桥接网络(因此可以通过其容器名称访问)

服务器的 Nginx-Config(相关部分略;完整代码改编自这里

[...]
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;

但每当访问 /block/ 时,服务器都会返回 409,因此重定向不起作用。我还尝试使用proxy_pass http://cryptpad:3000/$request_uri/;proxy_pass http://cryptpad:3000;(结果为 404) 和try_files @node =409;

那么有谁知道如何使这个内部重定向工作,或者至少知道如何监控两个容器之间的流量?

答案1

经过多次尝试,我找到了一个可行的配置:我只是从示例中复制了 proxy_passes 的其他行,因此 /block/ 的最终定义如下所示

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;
}

相关内容