Рейтинг:0

Nginx: невозможно проксировать некоторые пути к серверу Node.js (между двумя док-контейнерами)

флаг us

Итак, моя текущая настройка выглядит следующим образом: я использую докер (установка без рута) и хочу использовать Криптпад (который использует Node.js) с Nginx в качестве обратного прокси-сервера (отказ от ответственности: я никогда раньше не работал с Nginx). Cryptpad и Nginx работают в отдельных контейнерах. Для обслуживания статических файлов я создал том, в котором находятся все статические файлы из Cryptpad и который смонтирован в контейнере Nginx (только для чтения). Проблема в том, что некоторое содержимое не может быть обслужено таким образом: большие blob-файлы будут сохранены во внешнем каталоге, который доступен только из Cryptpad-Container (у меня на это есть свои причины). Поэтому я попытался сказать Nginx, чтобы proxy_pass запросил эти файлы на Node-Server Cryptpad, но я не могу понять, как определить это перенаправление.

Моя конфигурация:

  • имя контейнера Nginx: nginx
  • имя Cryptpad-Container: cryptpad
  • порт Node-Server: 3000
  • оба контейнера подключены к одной и той же (настраиваемой) мостовой сети (и поэтому доступны по своим именам контейнеров)

Nginx-Config для сервера (сокращенно до соответствующего раздела; полный код адаптирован из здесь)

[...]
location ^~ /block/ {# измененное местоположение блока для проверки прокси-сервера (доступ к нему проще, чем к большому двоичному объекту)
    add_header Cache-Control max-age=0;

    #try_files $uri =404;# оригинальный код
    try_files http://cryptpad:3000/$request_uri =409;# произвольный код ошибки для отличия от обычных ошибок
}
[...]
location @node {# используется для проксирования всех необработанных местоположений к узлу
    прокси_пароль http://cryptpad:3000;
}

try_files /www/$uri /www/$uri/index.html /customize/$uri @node;

Но всякий раз, когда осуществляется доступ к /block/, сервер возвращает 409, поэтому перенаправление не работает. Я также пробовал это с proxy_pass http://cryptpad:3000/$request_uri/; или же прокси_пароль http://cryptpad:3000; (что привело к 404) и try_files @node = 409;.

Итак, кто-нибудь знает, как заставить это внутреннее перенаправление работать или, по крайней мере, как отслеживать трафик между двумя контейнерами?

Michael Hampton avatar
флаг cz
Вы должны начать с примера конфигурации. Вы сейчас очень далеки от этого.
Max.-F. avatar
флаг us
@MichaelHampton Я не сильно изменился, самое большое изменение — это описанные дополнительные прокси для обеспечения межконтейнерной связи.
Рейтинг:0
флаг us

После еще нескольких попыток я нашел сработавшую конфигурацию: я просто скопировал другие строки из proxy_passes из примера, и поэтому результирующее определение для /block/ выглядит так:

расположение ^~ /блок/ {
    add_header Cache-Control max-age=0;

    прокси_пароль http://cryptpad:3000;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header Хост $host;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_hide_header Политика кросс-происхождения ресурсов;
    #add_header Cross-Origin-Resource-Policy;
    proxy_hide_header Cross-Origin-Embedder-Policy;
    #add_header Cross-Origin-Embedder-Policy require-corp;
}

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.