Проблема конфигурации Nginx - не удалось подключиться к S3-совместимому хранилищу из тестовой программы NodeJS - PullRequest
0 голосов
/ 18 декабря 2018

Это моя первая очередь в StackOverflow.У меня есть требование предоставить LB и уровень прокси в DMZ, чтобы клиенты могли обращаться к внутреннему S3-совместимому хранилищу для чтения сегментов.Для этого я использую несколько экземпляров Nginx: один экземпляр для LB (узел 1) и два экземпляра (узел 2,3) в качестве обратного прокси.LB (узел 1) прослушивает https 443, имеет сертификат CA, подписанный, и виден в Интернете.Узел 2,3 прослушивает http 80 и отправляет запросы на бэкэнд S3-совместимое хранилище, которое прослушивает https с самозаверяющими сертификатами.

Когда я использую тестовую программу NodeJS из уровня DMZ для непосредственного подключения к S3-совместимому хранилищу, я мог читать и перечислять сегменты, используя клиент AWS, с accessKeyId и secretAccessKey.

Но когда я использую ту же самую тестовую программу NodeJS из Интернета, с тем же accessKeyId и secretAccessKey и пытаюсь подключиться к узлу 1 (в конце концов достигаю хранилища, совместимого с backend S3), я получаю следующую ошибку:

{"message":"The request signature we calculated does not match the signature you provided. 
Check your AWS Secret Access Key and signing method. 
For more information, see REST Authentication and SOAP Authentication for details.",
"code":"SignatureDoesNotMatch",
"region":null,
"time":"2018-12-18T12:34:28.313Z",
"requestId":"2899219037",
"statusCode":403,"retryable":false,
"retryDelay":14.04655267301651}

Я пробовал несколько способов понять и решить это.Похоже, мой конфиг Nginx неправильно передает заголовки http.Но я явно ничего не настраивал, чтобы скрыть заголовки http, и, насколько я понимаю, все заголовки будут проходить, если мы явно не заблокируем их.

Помимо обращения к S3-совместимому внутреннему хранилищу, вызовы проходят через Nginx.Я даже тестировал доступ к другому хосту вместо S3-совместимого хранилища (с самозаверяющим сертификатом), он работал хорошо.

Pl, предложите любое решение.Дайте мне знать любую информацию, которая мне может понадобиться добавить к этому вопросу.

Шринивас

1 Ответ

0 голосов
/ 02 января 2019

Решено.

В моем случае исправлена ​​проблема установки Host в качестве заголовка.

location /something {
    ...
    proxy_set_header Host $http_host;
    ...
}

Насколько я понимаю, Host используется как часть генерации / проверки подписи.Он по умолчанию удаляется Nginx, и его настройка явно разрешает его.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...