![Nginx:无法代理到 Node.js 服务器的某些路径(在 dwo docker 容器之间)](https://linux22.com/image/768759/Nginx%EF%BC%9A%E6%97%A0%E6%B3%95%E4%BB%A3%E7%90%86%E5%88%B0%20Node.js%20%E6%9C%8D%E5%8A%A1%E5%99%A8%E7%9A%84%E6%9F%90%E4%BA%9B%E8%B7%AF%E5%BE%84%EF%BC%88%E5%9C%A8%20dwo%20docker%20%E5%AE%B9%E5%99%A8%E4%B9%8B%E9%97%B4%EF%BC%89.png)
所以我当前的设置如下:我正在使用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;
}