Подтвердить что ты не робот

Symfony 3 Слишком много переадресаций при форсировании https

У меня есть проблема, которая похожа на другой вопрос, опубликованный на SO, но ни одно из этих решений не сработало.

Я использую Apache, встроенный в OSX El Capitan Server, и https отлично работает, когда я не заставляю HTTP-трафик на https с помощью следующей директивы:

    access_control:
    - { path: ^/, roles: IS_AUTHENTICATED_ANONYMOUSLY, requires_channel: https, host: mypc\.local$ }

Но добавление этого результата приводит к ошибке слишком много переадресаций при посещении локального uri для моего сайта: https://mypc.local/myproject/web/

full security.yml:

security:
  access_control:
    - { path: ^/, roles: IS_AUTHENTICATED_ANONYMOUSLY, requires_channel: https, host: mypc\.local$ }

  providers:
    our_db_provider:
        entity:
            class: AppBundle:Users
            property: username

  encoders:
    AppBundle\Entity\Users: plaintext   

firewalls:
    # disable authentication for assets and the profiler 
    dev:
        pattern: ^/(_(profiler|wdt)|css|images|js)/
        security: false

    main:
        pattern:    ^/
        http_basic: ~
        provider: our_db_provider

        anonymous: ~
        form_login:
            login_path: /
            check_path: login

        logout:
            path:   /logout
            target: /
            invalidate_session: true 

EDIT: вот заголовки ответов:

> GET /myproject/web/ HTTP/1.1
> Host: mypc.local
> User-Agent: curl/7.43.0
> Accept: */*
> 
< HTTP/1.1 301 Moved Permanently
< Date: Tue, 09 Aug 2016 12:15:00 GMT
< Server: Apache
< X-Powered-By: PHP/5.5.31
< Cache-Control: no-cache
< Location: https://mypc.local/myproject/web/
< MS-Author-Via: DAV
< Content-Length: 396
< Content-Type: text/html; charset=UTF-8
< 
* Ignoring the response-body
* Connection #0 to host mypc.local left intact
* Issue another request to this URL: 'https://mypc.local/myproject/web/'
* Found bundle for host mypc.local: 0x7f89b2d01780
* Re-using existing connection! (#0) with host mypc.local
* Connected to mypc.local (fe80::ea06:88ff:fecf:61c6) port 443 (#0)
> GET /myproject/web/ HTTP/1.1
.... repeated 20 times
4b9b3361

Ответ 1

Просто конфигурация Symfony не должна быть местом, где вы перенаправляете трафик по двум причинам:

  • Mantainability
  • Накладные

Если у вас есть возможность перезаписи мод, и вы должны предположить, что вы можете настроить эти параметры в Apache:

RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{SERVER_NAME}/%$1 [R,L]

Ответ 2

У меня была такая же проблема, когда Symfony выполнял AWS ELB и Beanstalk. Все URL-адреса, созданные UrlGenerator, где с http-схемой. И форсирование https делает мой Symfony запутанным и работает бесконечный цикл перенаправления.

Это имеет какое-то отношение к переменной trusted_proxies. Я думаю, что symfony делает бесконечный цикл, потому что для него ваша схема - http, даже если вы используете https.

Вы находитесь за лаковым прокси-сервером, балансиром нагрузки?

Для меня с помощью этого ответа от totas была решена проблема:

Request::setTrustedProxies(array($request->server->get('REMOTE_ADDR')));

Я был вынужден сделать это, потому что AWS ELB имеет динамический IP. Если у вашего прокси или балансировки нагрузки есть IP-адрес исправления, вы можете использовать truted_proxies var, как описано в документации symfony.

Если у кого-то есть лучшее решение в среде AWB ELB, мне интересно.

Надеюсь, это поможет вам.