nginx не может отправить тело запроса на вышестоящий сервер

#nginx #microservices

#nginx #микросервисы

Вопрос:

я использую nginx в качестве шлюза api. и у меня есть 3 микросервиса,

  • служба аутентификации
  • продукт сервис
  • служба корзины

теперь я использую модуль auth_request для проверки подлинности и отправки токена jwt в микросервис. все работает нормально. но в post-запросе тело запроса не передается микросервисам. мне нужно передать текущее тело запроса в микросервисы.

пример: если я хочу добавить товары в корзину, сначала проверьте аутентификацию с помощью службы аутентификации и новый заголовок jwt, добавленный к запросу, и отправьте его в службу корзины. но тело запроса не отправляется в службу корзины.

 upstream auth-service {
  server 0.0.0.0:8000;
}

upstream products-service {
  server 0.0.0.0:6000;
}

upstream carts-service {
  server 0.0.0.0:7000;
}


server {
    listen 80 default_server;
    include mime.types;
    root /var/www/html;

    add_header Access-Control-Allow-Origin $http_origin;
    add_header Access-Control-Allow-Credentials "true";
    add_header Access-Control-Allow-Methods "GET, POST, PUT, DELETE, OPTIONS";
    add_header Access-Control-Allow-Headers "DNT,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Range";
    add_header Access-Control-Expose-Headers "Content-Length,Content-Range";
    add_header Access-Control-Max-Age 1728000;


    #auth_request /_oauth2_token_introspection;

    location /api/auth {
        proxy_pass http://auth-service;
    }

    location /api/products {
        auth_request /_oauth2_token_introspection;
        auth_request_set $jwt_token $sent_http_jwt;
        proxy_set_header JWT $jwt_token;
        proxy_pass http://products-service;
    }

    location /api/carts {
        auth_request /_oauth2_token_introspection;
        auth_request_set $jwt_token $sent_http_jwt;
        proxy_set_header JWT $jwt_token;
        proxy_pass http://carts-service;
    }

    location = /_oauth2_token_introspection {
        internal;
        proxy_method      GET;
        proxy_set_header  Authorization "$http_authorization";
        proxy_set_header  Content-Type "application/json";
        proxy_pass_request_body off;
        proxy_pass        http://auth-service/api/auth/user-jwt/;
    }
}
  

Комментарии:

1. Дикое предположение — что, если вы явно добавите proxy_pass_request_body on; директиву в location /api/products { ... } location /api/carts { ... } блоки and?

2. @IvanShatsky я добавил, но он не работает