У меня есть вышестоящий сервер, который часто устанавливает cookie-файлы, возвращая заголовок ответа «Set-Cookie».
Я бы хотел иметь прокси nginx перед указанным вышестоящим сервером:
Browser => Nginx => Upstream
Если бы запрос Browser => Nginx
имел заголовок X-No-Cookies: true
, я бы хотел, чтобы ответ от Upstream => Nginx => Browser
не содержал заголовок ответа Set-Cookie
.Если бы X-No-Cookies
имел какое-либо другое значение, я бы лежал, чтобы заголовок ответа Set-Cookie
был возвращен без изменений. Я не могу изменить поведение заголовка ответа вышестоящего сервера.
В настоящее время моя конфигурация nginx выглядит следующим образом, обратите особое внимание на использование директивы proxy_hide_header
.Я также повторил переменную $proxy_hide_header
в заголовке ответа X-No-Cookies
.
map $http_x_no_cookies $proxy_hide_header {
default "";
"true" "Set-Cookie";
}
# Homepage
server {
listen 80;
server_name example.com;
location /api {
proxy_pass https://example.com/api;
proxy_hide_header $proxy_hide_header;
add_header "X-No-Cookies" $proxy_hide_header;
}
}
Когда я делаю запрос с помощью cURL:
curl \
http://example.com/api \
-H 'X-No-Cookies: true' \
-I
, я получаю следующие заголовки ответа:
Server: nginx/1.12.2
Date: Thu, 13 Dec 2018 02:26:41 GMT
Content-Type: application/json
Content-Length: 2255
Connection: keep-alive
Access-Control-Allow-Credentials: true
Access-Control-Allow-Headers: DNT,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Accept,Authorization
Access-Control-Allow-Methods: GET, HEAD, POST, PUT, PATCH, DELETE, OPTIONS
Access-Control-Expose-Headers: Content-Length
Set-Cookie: foo=bar; Max-Age=2592000; Expires=Sat, 12 Jan 2019 02:26:41 GMT; Path=/; Domain=example.com; Secure
Strict-Transport-Security: max-age=31536000; includeSubDomains; preload
X-No-Cookies: Set-Cookie
Всякий раз, когда proxy_hide_header
предоставляется переменная nginx в качестве аргумента, это, кажется, не имеет никакого эффекта.Если я поменяю местами переменную ($proxy_hide_header
вместо "Set-Cookie"
), я получу желаемое поведение - заголовок ответа Set-Cookie
опущен.
Редактировать : Я имеюотправил код этого вопроса в GitHub
- Моя оригинальная (нерабочая) реализация здесь
- Решение Ивана Шацкого здесь