У меня есть установка, состоящая из двух экземпляров nginx, подключенных один за другим. Первый на одном сервере (A)
а второй находится на втором сервере (B)
:
user <-> nginx (A) <-> nginx (B) <-> api frontend (B)
<-> api backend (B)
Сервер (A)
защищен SSL, а затем перенаправляет запросы на сервер (B)
с помощью proxy_pass
. Это из конфигурации A:
location / {
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $http_host;
proxy_pass http://B;
}
И подобные вещи происходят (B)
, чтобы передать все запросы фактическому приложению (есть и другие директивы местоположения, но это актуальная):
location / {
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $http_host;
proxy_pass http://api_frontend;
}
У меня проблемы с файлами cookie сеанса. Приложение (интерфейс api) правильно устанавливает файлы cookie, и я могу видеть их с помощью инспектора браузера. Однако когда приложение читает файлы cookie, оно получает только некоторые файлы cookie, но не сеансовый. Думаю, есть какая-то проблема с двойной конфигурацией nginx.
По какой-то причине cookie был передан из nginx (A) в nginx (B), но не в приложение. Я не знаю, почему это так, но я решил свою проблему с помощью следующего дополнения к телу местоположения:
proxy_set_header Cookie "session=$cookie_session"
где session
имя интересующего файла cookie.