У нас есть эта проблема в течение недели - у нас есть настройка балансировки нагрузки nginx / haproxy в передней части нашего стека.Nginx отправляет все запросы haproxy, который затем связывает их и отправляет на соответствующий адрес в частной сети.Когда наш сервер example1.com делает запрос к example2.com, у нас есть настройка haproxy для отправки заголовка set-cookie обратно на запрос.Это хорошо работало для нашей промежуточной среды, где example3.com вызывал example3.net, но в процессе работы мы наблюдаем другое поведение.
frontend example_front
bind *:10094
default_backend example_back
backend example_back
mode http
option httpchk get /api/health/check HTTP/1.0\r\nHost:\ site1.example2.com
default-server inter 10s fall 2 rise 2
http-check expect status 204
cookie SERVERID insert indirect nocache domain .example1.com
server ex-1 192.168.12.68:8447 check cookie w1
server ex-2 192.168.22.68:8447 check cookie w2
В консоли разработчика Chrome я вижу, что при запросах, отличных от https / http (в моем случае - wss), заголовок Set-Cookie возвращается, но не устанавливается в браузере,Однако, когда я сверну конечную точку, я всегда вижу возвращение cookie в моих заголовках, поэтому я знаю, что моя логика Haproxy работает.Заголовок Set-Cookie также отправляется обратно на другие запросы в приложении, и, если они находятся от example1.com до example1.com, они установлены правильно.Кажется, он не устанавливается (без каких-либо ошибок или предупреждений), когда сайт example2.com возвращает заголовок Set-Cookie для example1.com.У меня есть клиент, отправляющий запрос с использованием withCredentials, и сервер правильно отвечает всеми правильными заголовками Allow, которые он должен установить.Когда я выполняю такой же тип запроса в нашей промежуточной среде с example3.com на example3.net, он устанавливает cookie-файл.Это привело меня к мысли, что не будет проблемы с CORS, так как эти два домена были разными.
Это привело меня к мысли, что мне может потребоваться привязать любые запросы к этому внешнему интерфейсу к тому же сертификату, на который он будет отвечать, в надежде, что эта проблема связана с прекращением SSL, возникающимдругое происхождение (здесь мои знания по SSL становятся немного размытыми, так что прости меня за любые вопиющие заблуждения, которые у меня есть).Мое решение состоит в том, чтобы добавить следующее:
frontend example_front
bind *:10094 ssl crt-list /etc/haproxy/crt-list.txt
default_backend example_back
Итак, у меня есть несколько вопросов по этому вопросу - во-первых, я на правильном пути, предполагая, что эта проблема возникает из-за того, что example2.com отвечаетна example1.com с заголовком Set-Cookie?(По существу CORS)
Во-вторых, почему example3.com может установить cookie для example3.net?(ни один из них не использует один и тот же подстановочный знак или SNI)
В-третьих, является ли мой подход к добавлению привязки SSL к интерфейсу правильным способом решения этой проблемы?Если нет, то как бы мне, чтобы example2.com отправил cookie-файл на example1.com?
Спасибо!