Как форсировать HTTPS или HTTP для разных URL

Дата обновления перевода 2023-09-26

Как форсировать HTTPS или HTTP для разных URL

Tip

Наилучшей политикой является принудительное использование https для всех URL, что можно сделать через конфигурацию вашего веб-сервера или access_control.

Вы можете заставить части вашего сайта использовать HTTPS-протокол в конфигурации безопасности. Это делается через правила access_control, используя опцию requires_channel. Например, если вы хотите заставить все URL, начинающиеся с /secure, использовать HTTPS, то вы можете использовать следующую конфигурацию:

1
2
3
4
5
6
7
8
9
# config/packages/security.yaml
security:
    # ...

    access_control:
        - { path: '^/secure', roles: ROLE_ADMIN, requires_channel: https }
        - { path: '^/login', roles: PUBLIC_ACCESS, requires_channel: https }
        # поймать все другие URL
        - { path: '^/', roles: PUBLIC_ACCESS, requires_channel: https }

Чтобы облегчить жизнь во время разработки, вы также можете использовать переменную окружения, например, requires_channel: '%env(SECURE_SCHEME)%'. В вашем файле .env установите SECURE_SCHEME в значение http по умолчанию, но переопределите его на https в производстве.

Смотрите Как работает безопасность access_control? для более подробной информации об access_control. в целом.

Note

Альтернативным способом принудительного использования HTTP или HTTPS является использование опции схемы маршрута или группы маршрутов.

Note

Форсирование HTTPS при использовании обратного прокси или балансировщика нагрузки требует правильной конфигурации, чтобы избежать бесконечных циклов перенаправления; смотрите Как сконфигурировать Symfony, чтобы она работала за распределителем нагрузки или обратным прокси для более подробной информации.