Nginx: Node.js 서버에 대한 일부 경로를 프록시할 수 없습니다(dwo docker 컨테이너 사이).

Nginx: Node.js 서버에 대한 일부 경로를 프록시할 수 없습니다(dwo docker 컨테이너 사이).

따라서 현재 설정은 다음과 같습니다. docker(루트 없는 설치)를 사용하고 있으며 사용하고 싶습니다.크립트패드(Nginx를 사용하는) 역방향 프록시로 Nginx를 사용합니다(면책조항: 이전에 Nginx를 사용해본 적이 없습니다). Cryptpad와 Nginx는 모두 별도의 컨테이너에서 실행됩니다. 정적 파일을 제공하기 위해 Cryptpad의 모든 정적 파일이 상주하고 Nginx-Container(읽기 전용)에 마운트되는 볼륨을 만들었습니다. 문제는 일부 콘텐츠가 이런 방식으로 제공될 수 없다는 것입니다. 큰 blob 파일은 Cryptpad-Container에서만 액세스할 수 있는 외부 디렉터리에 저장됩니다(이유는 나름대로 있습니다). 그래서 Nginx에게 이 파일에 대한 요청을 Cryptpad의 Node-Server에 Proxy_pass하도록 지시하려고 했지만 이 리디렉션을 정의하는 방법을 알 수 없습니다.

내 구성:

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

관련 정보