Рейтинг:1

NGNIX принудительно использует HTTPS

флаг ph

для моего веб-приложения (приложение Angular) мы используем NGNIX в качестве веб-сервера. У меня есть задача, в которой мне нужно убедиться, что все активы/изображения загружаются через HTTPS.

В инструментах Browser Dev я вижу, что запрос отправляется по HTTPS. Однако заголовок местоположения ответа возвращается в виде URL-адреса HTTP (см. снимок экрана ниже).

скриншот из инструментов разработчика браузера

Вот текущие конфигурации NGNIX:

сервер {
    слушать 80;
    имя_сервера локальный хост;
    корень /usr/share/nginx/html;

    # убить кеш
    add_header Последнее изменение $date_gmt;
    add_header Cache-Control 'без хранения, без кеша';
    if_modified_since выключено;
    истекает;
    пометка выключена;

    # Внедрить HSTS
    add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" всегда;

    # Отключить iFrame
    add_header x-frame-options «SAMEORIGIN» всегда;

    # обнаружить и отклонить CRLF
    если ($request_uri ~* "%0A|%0D" ) {
      вернуть 400;
    }

    # Возврат к языку по умолчанию, если браузер не определил предпочтения
    если ($accept_language ~ "^$") {
      установить $accept_language "de";
    }

    # Перенаправить "/" в приложение Angular на предпочитаемом браузером языке
    переписать ^/$ /$accept_language навсегда;

    если ($uri !~ ^/(en-US|de)) {
      вернуть 301 /$accept_language$uri$args;
    }

    # Все в приложении Angular всегда перенаправляется в Angular на правильном языке
    местоположение ~ ^/(en-US|de) {
        try_files $uri$args $uri$args/ /$1/index.html;

      # Добавляем заголовки безопасности из отдельного файла
      # включить /etc/nginx/security-headers.conf;
    }

    местоположение/здоровье {
      доступ_лог выключен;
      вернуть 200;
      add_header Content-Type text/plain;
      # Внедрить HSTS
      add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" всегда;
    }
}

Любая помощь высоко ценится. Спасибо

флаг in
Блок сервера для порта 80 здесь совершенно неуместен, вам нужно опубликовать блок сервера для порта 443.
флаг ph
@GeraldSchneider У нас нет блока сервера для порта 443 - NGNIX работает за балансировщиком нагрузки.
Richard Smith avatar
флаг jp
Либо используйте [`absolute_redirect off;`](http://nginx.org/en/docs/http/ngx_http_core_module.html#absolute_redirect), либо явно укажите `https` в ваших операторах `rewrite` и `return`, как описано в ответ ниже.
Рейтинг:1
флаг cn

Я вижу, что nginx перенаправляет на /en-US/ в твоем случае.

если ($uri !~ ^/(en-US|de)) {
  вернуть 301 /$accept_language$uri$args;
}

Я предполагаю, что, поскольку внутренняя связь (между LB и nginx) происходит через http/80, nginx просто перенаправляет балансировщик нагрузки через http, и поэтому вы видите http в заголовке местоположения.

Я не уверен, что файлы .png действительно доставляются пользователю через http. Можете ли вы получить доступ к файлам .png напрямую с http? Если нет, то доступ фактически предоставляется через https, а HTTP-связь происходит только внутри. Если есть возможность, то следует настроить перенаправление с http на https на стороне балансировщика нагрузки.

Если вы также хотите принудительно использовать https внутри, я бы попробовал это так:

вернуть 301 https://$host/$accept_language$uri$args;

Вы также можете проверить absolute_redirect как упоминал Ричард в комментариях.

флаг ph
Спасибо за ваш проницательный ответ. Я пробовал все их раньше, а также настроил LB для перенаправления HTTP на HTTPS, который также работает нормально. Я только что сделал еще одно открытие: заголовки ответов имеют разные значения местоположения в разных браузерах. Chrome: расположение: http://host/en-US/assets/images/yammer.png FireFox: расположение: https://host/en-US/assets/images/yammer.png Край: местоположение: https://host/en-US/assets/images/yammer.png Любая идея, что может быть причиной такого поведения?
GChuf avatar
флаг cn
Браузеры многое делают по-разному, от интерпретации css до заголовков... Я не могу ответить на ваш вопрос, обычно я просто принимаю тот факт, что разные браузеры ведут себя по-разному. Если вы можете подтвердить (например, с помощью curl), что вы не можете получить доступ к своим файлам через http и что вы перенаправлены, я бы не стал беспокоиться о том, что говорят заголовки.
флаг ph
Завиток ведет себя так, как ожидалось. HTTP-запрос перенаправляется на HTTPS, и я вижу, что перенаправление выполняется LB. Спасибо за вашу поддержку.

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.