Конфигурация обратного прокси-сервера NGINX с подписью AWS

#amazon-web-services #nginx #aws-api-gateway #nginx-reverse-proxy #aws-signature

Вопрос:

Я использую nginx в качестве обратного прокси-сервера для своего шлюза. Он работает с обычными API. Однако он не работает с подписью AWS. Говорит о несоответствии подписи. Я добавил прокси-хост , но он все равно не работает. Пожалуйста, помогите. Проверенные журналы nginx, все заголовки передаются. Проблема с вычислением подписи. Попробовал через почтальона и рабочий код с использованием AWSSign sdk

 location / {                                
                proxy_pass_request_headers on;
                proxy_pass_request_body on;                     
                proxy_pass_header x-api-key;
                proxy_pass_header Authorization;
                proxy_pass_header x-amz-content-sha256;
                proxy_pass_header x-amz-date;
                #proxy_pass_header Host;
                proxy_set_header Host $proxy_host;
                proxy_pass https://<gatewayid>.execute-api.<region-name>.amazonaws.com/<stage>/;
                proxy_http_version  1.1;                        
            }
 

Наблюдая за журналами nginx, я мог видеть, что значение подписи и значение sha256 полностью отличаются от того, что я вижу в почтальоне.

Ответ №1:

Просто небольшое изменение. Он ожидал, что путь начнется со стадии до конца пути api. Поэтому я удалил сценическое имя из proxy_pass и добавил его в фактический URL-адрес, чтобы подпись была рассчитана правильно. Переопределите хост явно в postman с помощью (gatewayid).execute-api. (имя региона).amazonaws.com

 location / {                                
                proxy_pass_request_headers on;
                proxy_pass_request_body on;                                     
                proxy_set_header Host $proxy_host;
                proxy_pass https://(gatewayid).execute-api.(region-name).amazonaws.com/;
                proxy_http_version  1.1;                        
            }