Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

symfony 3 Too Many Redirects when forcing https

Tags:

php

symfony

I have a problem that is similar to other question posted on SO, but none of those solutions have worked.

I'm using Apache built into OSX El Capitan Server, and https works fine when I don't force http traffic onto https via the following directive:

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

But adding this results in the Too Many Redirects error when visiting the local uri for my website is: 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: here are the response headers:

> 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
like image 761
Black Avatar asked Aug 06 '16 02:08

Black


People also ask

What causes too many redirects?

The reason you see the “too many redirects” error is because your website has been set up in a way that keeps redirecting it between different web addresses. When your browser tries to load your site, it goes back and forth between those web addresses in a way that will never complete — a redirect loop.

How many redirects are too many?

Don't use more than 3 redirects in a redirect chain. Google Bot will not follow 301 redirects over multiple hubs. Using too many redirects in a chain is also bad user experience. The page speed will slow down with every redirect you use.


2 Answers

I had the same issue using Symfony behing AWS ELB and Beanstalk. All urls generated by UrlGenerator where with http scheme. And forcing https makes my Symfony confused and running infinite redirect loop.

This has something to do with trusted_proxies variable. I think symfony is doing an infinite loop because for him your scheme is http even if you use https.

Are you behind a varnish proxy, a load balancer?

For me using this answer from totas solved the issue :

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

I've been forced to do this because AWS ELB have dynamic IP. If your proxy or load balancer have a fix IP, you can use truted_proxies var as explained in symfony documentation.

If someone has a better solution in an AWS ELB environment I'm interested.

I hope this will help you.

like image 80
Jean LAMY Avatar answered Oct 20 '22 01:10

Jean LAMY


Simply, Symfony configuration should not be the place where you redirect traffic, for two reasons:

  1. Mantainability
  2. Overhead

If you have mod rewrite enable, and you should have I suppose, you can configure these settings in Apache:

RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{SERVER_NAME}/%$1 [R,L]
like image 2
Michele Carino Avatar answered Oct 20 '22 00:10

Michele Carino