Nginx:無法代理 Node.js 伺服器的某些路徑(在 dwo docker 容器之間)

Nginx:無法代理 Node.js 伺服器的某些路徑(在 dwo docker 容器之間)

所以我目前的設定如下:我正在使用 docker(無根安裝)並且想要使用密碼墊(使用 Node.js)與 Nginx 作為反向代理(免責聲明:我以前從未使用過 Nginx)。 Cryptpad 和 Nginx 都在單獨的容器中運作。為了提供靜態文件,我建立了一個卷,Cryptpad 中的所有靜態文件都駐留在其中,並安裝在 Nginx 容器中(唯讀)。問題是,某些內容無法以這種方式提供:大型 blob 檔案將保存在只能從 Cryptpad-Container 存取的外部目錄中(我有這樣做的原因)。所以我試圖告訴 Nginx 將此檔案的請求 proxy_pass 到 Cryptpad 的節點伺服器,但我無法弄清楚如何定義此重定向。

我的配置:

  • Nginx 容器的名稱:nginx
  • Cryptpad-Container 的名稱:cryptpad
  • 節點伺服器連接埠: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/;or 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;
}

相關內容