#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 я добавил, но он не работает