Я пытаюсь настроить балансировщик нагрузки для нескольких служб. У каждой службы есть собственный внешний ELB. Я не хочу использовать поддомены для service1, service2... из-за CORS и хочу избавиться от запроса OPTIONS.
Для этого я использую CloudFront и Behaviors. Веб-сайт — это СПА.
https://beta.myapp.com - main page → S3
https://beta.myapp.com/api/service1/v1/* → service1 ELB
https://beta.myapp.com/api/service2/v1/* → service2 ELB
Когда я настраиваю поведение для службы 1 без какой-либо переадресации, я получаю сообщение об ошибке от моей службы - 401 Unauthorized. Потому что он полагается на куки для неавторизации.
После того, как я установил Forward Cookies
- All
или Whitelist
myapp-api-token*
- я начинаю получать ошибку 404 и переключаюсь на свою статическую страницу с ошибкой. Я не вижу в журналах обслуживания, что моя услуга была запрошена.
Остальные опции вроде Cache Based on Selected Request Headers
и Query String Forwarding and Caching
вообще ни на что не влияют.
Может быть важно упомянуть, что файл cookie защищен и доступен только по протоколу HttpOnly.
Пример куки:
cookie: myapp-api-token=eyJraWQiOiJyRlZYTGpCRVJJRDZ6MVVpSVpDaENVQVczNlRua0FMb3dDQzlHMnBmcG1VPSIsImFsZyI6IlJTMjU2In0.eyJzdWIiOiJiZGYzNjNiOC1jMWM3LTQzNDMtOTc2My0zOTk3ZDFiNTYxZWQiLCJjdXN0b206a2V5U3BlYyI6IkFFU18yNTYiLCJpc3MiOiJodHRwczpcL1wvY29nbml0by1pZHAudXMtZWFzdC0xLmFtYXpvbmF3cy5jb21cL3VzLWVhc3QtMV9FRzlwSjRsb0giLCJjdXN0b206ZW5jcnlwdGVkUGFzc3dvcmQiOiJBUUVDQUhqa3BxM0pmUzNId0c1XC92cTNicHY4TUdjaWhJZ0hReVFsQk1OY09Ea1JZOHdBQUFIb3dlQVlKS29aSWh2Y05BUWNHb0dzd2FRSUJBREJrQmdrcWhraUc5dzBCQndFd0hnWUpZSVpJQVdVREJBRXVNQkVFREo5b2hwYSt2WnNMdXBQXC9sQUlCRUlBM3RCOUFrRWhjR0hJSFhiSitnXC9DRUZ3REljc3EzaEpBTVlxTVZmS2g1ZmZIVW9BMGp2YzU2NzJGcEpjK3BWbzdTMytZXC9nWVdqMnc9PSIsImNvZ25pdG86dXNlcm5hbWUiOiJDTE9VREZMT1ctdXMtZWFzdC0xOjAxNDE4ZDJhLWJlZGYtNDgzYy05NjFlLWE0YjQ5MjRhNjhkZCIsInByZWZlcnJlZF91c2VybmFtZSI6IkNMT1VERkxPVy11cy1lYXN0LTE6M2VmZjBmYWItN2RiZC00YjhjLTk0YmMtMjZkZDIyODIyY2IyIiwiYXVkIjoiM3A5aHMxc2VrOGo0OXNwbjY2MjNmbWFuMGIiLCJldmVudF9pZCI6IjZiMmEyY2RkLTU3MTAtMTFlOS1hNmU1LTliYTBlYmUzYTkyMCIsInRva2VuX3VzZSI6ImlkIiwiYXV0aF90aW1lIjoxNTU0NDA2MzY0LCJuYW1lIjoiRGVuaXMgTGlnZXIiLCJjdXN0b206ZW5jcnlwdGVkRGF0YUtleSI6IkFRRURBSGprcHEzSmZTM0h3RzVcL3ZxM2JwdjhNR2NpaElnSFF5UWxCTU5jT0RrUlk4d0FBQUg0d2ZBWUpLb1pJaHZjTkFRY0dvRzh3YlFJQkFEQm9CZ2txaGtpRzl3MEJCd0V3SGdZSllJWklBV1VEQkFFdU1CRUVES081SUZocFwva3UzTjhneXpnSUJFSUE3dm1XdTlnVlg2K0IrdDIrQVppSmFcL0FXVFwvSnZPWEFWMXBGNVhXdFRzVjluaDhWa2ZEQXk5S3BZTGY3bWR0TVkxZGRhSlVyVFJ1ZDhzYTFzPSIsImV4cCI6MTU1NDg1NTQ2MiwiaWF0IjoxNTU0ODUxODYyLCJlbWFpbCI6ImxpZ2RlbmlzQGFtYXpvbi5jb20ifQ.bfFCwH6nN3mAXxwDuwyE7yZMqVwMKnOISP0jwLWZGodZ--oUepPPTvpxWskqxEqpL-Jy_rAki_g319d3opnDKaGVq0FJZjW9EneRxjPHsziUoJHysRSJrj0joCWtYGVzXB7UA6VOlO1CiqGK1i9SMG8k3i6b5EbsDWr84c_wvlVi8yy8M33oJfTLRIbFeDDYwexdT9ZDK9_rcLxnDLL3XjIqlKLj9rCsKOrEIznwZLsCfrBjQBZE8mq9VHUaajFpochyaM1rjL9J8q9-tZTcHnE1ryrLNLvW_vtS1WLic1WVTw9TkCQJCc1HT3KyI-mmqc4fg7Vyw7_RC3DcbiV7Rw
Я предполагаю, что вы используете «Поведение кэша» с «Шаблон пути» для маршрутизации запроса пользователя в Origin? Если это так, проверьте порядок своего поведения, как указано в вашем вопросе, вы помещаете шаблон * в первый порядок, что означает, что весь запрос будет направлен на S3, что вызовет ошибку 404 не найден, поскольку ваш сайт S3 не иметь этот путь URL.
да. Мой путь узора на первом месте. Он перестает работать только тогда, когда я по какой-то причине начинаю пересылать куки.... =(
Я не думаю, что проблема в CloudFront или самом файле cookie... но мне интересно, действительно ли ваш ELB ожидает полный путь, который вы отправляете, например.
/api/service1/v1/...
. По умолчанию CloudFront устанавливает исходящий путь к источнику так же, как его отправил браузер. Настроенный шаблон пути не удаляется. Это потенциальная проблема?