Я использую простой экземпляр nginx для прокси-вызовов REST на другой сервер. Цель моего прокси - разрешить использование файлов cookie для аутентификации. У меня все работает, кроме одной проблемы. Сервер, предоставляющий службу REST, отправляет заголовок Access-Control-Allow-Origin *
. Этот заголовок слишком допустим для аутентификации на основе файлов cookie. Мне нужно заменить этот заголовок на более строгий.
Вот подмножество моей конфигурации nginx:
map $http_origin $cors_header {
default "";
"~^https?://[^/]+\.mydomain\.com(:[0-9]+)?$" $http_origin;
}
server {
location / {
proxy_pass https://myrestserver.com/api;
add_header Access-Control-Allow-Origin $cors_header;
add_header Access-Control-Allow-Credentials true;
}
}
Моя проблема в том, что у меня остается два Access-Control-Allow-Origin
заголовки присутствуют в моем ответе. Как я могу заменить заголовок, возвращаемый сервером REST, чтобы в окончательном ответе присутствовала только моя версия заголовка?
это работает без дополнительных модулей nginx
proxy_hide_header 'access-control-allow-origin';
add_header 'access-control-allow-origin' '*';
Лучше всего было бы изменить ответ на стороне сервера REST, но, если у вас нет контроля над сервером REST, существует модуль для Nginx, который может изменять заголовки под названием ngx_headers_more: https://github.com/openresty/headers-more-nginx-module
Вам нужно будет установить модуль (это, вероятно, потребует сборки nginx из исходного кода и добавления модуля в ./configure, как описано в readme github). Для вашей конкретной проблемы после ее установки вы можете добавить эту директиву в любой блок
more_set_headers "Access-Control-Allow-Origin: $cors_header"