
所以我目前的設定如下:我正在使用 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;
}