Перенаправляйте весь трафік HTTP на HTTPS під час використання балансирувача завантаження HTTP (S) в Google Compute Engine


18

У мене налаштовано балансування завантаження HTTP / HTTPS в Google Compute Engine з двома глобальними правилами переадресації (HTTP та HTTPS). Кожне правило вказує на бек-енд-сервіс із протоколом HTTP.

Я хочу, щоб усі прохання http://*зверталися https://*.

Коли балансир навантаження спілкується з бек-енд-сервісами через HTTP, я не думаю, що я можу отримати nginx на бек-енд-сервісі для надсилання назад 301.

Я спробував десяток невеликих перетворень на обчисленні google, і всі вони закінчуються поверненням обчислювача Google 502.

Я впевнений, що хтось інший це налаштував раніше. Будь-які поради чи вказівки в правильному напрямку високо оцінені.


Перенаправлення HTTP на HTTPS (за допомогою SSL) наразі не підтримується через балансир завантаження HTTP / HTTPS. Перенаправлення потрібно налаштувати на вашому веб-сервері (apache, nginx тощо). Зважаючи на це, будь ласка, не соромтеся подавати запит на функцію для цього в трекер загальнодоступних проблем Compute Engine ( code.google.com/p/google-compute-engine/isissue/list ).
Faizan

Дякую; відкрив випуск: code.google.com/p/google-compute-engine/isissue/…
Ryan Leckey

Добре ідеально, я передав запит на функцію інженерії.
Faizan

@Faizan - чи існує часова шкала, коли ця функція буде доступна? Минуло 2 роки з моменту, коли цю функцію запросили. Вирішення проблеми незграбне.
талонкс

Нове посилання на цей запит - issueetracker.google.com/isissue/35904733 (хоча старе все ще переспрямовується).
Даніель Комптон

Відповіді:


19

У нас є аналогічне налаштування за допомогою балансира навантаження HTTP / HTTPS, і нам вдалося застосувати HTTPS. Це неможливо безпосередньо з балансира завантаження, але ви можете налаштувати його за допомогою сервісу резервного копіювання. Балансир завантаження Google Cloud встановить заголовок X-Forwarded-Proto http зі значенням http або https. Ви перевіряєте цей заголовок у своїй сервісі заходу (у нашому випадку Varnish, але це також можна зробити в Nginx), і якщо значення http, то ви надсилаєте назад 301.


8
Спасибі! Заради нащадків: if ($http_x_forwarded_proto = "http") { return 301 https://$host$request_uri; }
Райан Лекі

Вам слід скористатися 426заголовком оновлення HTTP, а не 301. Детальніше: stackoverflow.com/questions/17873247/…
Vikram Tiwari

3
Я не згоден з Vikram, ви повинні використовувати 301 для цілей SEO. Якщо ви повернете сімейний код 4xx, ваша сторінка не буде переходити від посилань, що вказують на старий http до https. 301 - очікуваний код, принаймні, якщо ви дбаєте про SEO на своєму сайті.
кирилиця

1
@VikramTiwari, у відповіді на пошту фактично йдеться: "Йдеться навіть не про оновлення з http: // до https: // взагалі"
Rambatino

1

Я зіткнувся з цією проблемою сьогодні і зміг її вирішити за допомогою балансування навантаження TCP. Якщо вам не потрібні специфічні для HTTP / HTTPS параметри балансування навантаження, можливо, ви можете використовувати балансир завантаження TCP (без SSL) для отримання трафіку на порт 80 і 443. Для трафіку з порту 80 ви можете відправити назад 301.


1
Балансування навантаження tcp заборонено для порту 80 doc > TCP Proxy Load Balancing підтримує такі порти: 25, 43, 110, 143, 195, 443, 465, 587, 700, 993, 995, 1883, 5222
Giovanni Toraldo
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.