Laravel routes behind reverse proxy

后端 未结 5 1455
野趣味
野趣味 2020-12-08 22:16

Ok, so for development purposes, we have a dedicated web server. It\'s not currently connected directly to the internet, so I\'ve setup an apache reverse proxy on another se

相关标签:
5条回答
  • 2020-12-08 22:42

    I know this topic is old a.f but I've been solving this issue by replacing the following line in my DatabaseSessionHandler.pdf [@Illuminate/Session]:

        protected function ipAddress()
        {
            return $_SERVER['HTTP_X_FORWARDED_FOR'];
    //        return $this->container->make('request')->ip();
        }
    

    Of course you need to migrate the sesssion table first and set up the config
    (.env Variable SESSION_DRIVER=database)

    0 讨论(0)
  • 2020-12-08 22:49

    Seems the Laravel have more convinient solution.. Check answer there: How do I configure SSL with Laravel 5 behind a load balancer (ssl_termination)?

    0 讨论(0)
  • 2020-12-08 22:52

    I ran into the same (or similar problem), when a Laravel 5 application was not aware of being behind an SSL load-balancer.

    I have the following design:

    • client talks to an SSL load balancer over HTTPS
    • SSL load balancer talks to a back-end server over HTTP

    That, however, causes all the URLs in the HTML code to be generated with http:// schema.

    The following is a quick'n'dirty workaround to make this work, including the schema (http vs. https):

    Place the following code on top of app/Http/routes.php

    In latest version of laravel, use web/routes.php

    $proxy_url    = getenv('PROXY_URL');
    $proxy_schema = getenv('PROXY_SCHEMA');
    
    if (!empty($proxy_url)) {
       URL::forceRootUrl($proxy_url);
    }
    
    if (!empty($proxy_schema)) {
       URL::forceSchema($proxy_schema);
    }
    

    then add the following line into .env file:

    PROXY_URL = http://igateway.somedomain.com
    

    If you also need to change schema in the generated HTML code from http:// to https://, just add the following line as well:

    PROXY_SCHEMA = https
    

    In latest version of laravel forceSchema method name has changed to forceScheme and the code above should look like this:

    if (!empty($proxy_schema)) {
        URL::forceScheme($proxy_schema);
    }
    
    0 讨论(0)
  • 2020-12-08 22:56

    Ok, so I got it. Hopefully this will help someone in the future.

    It seems like Laravel ignores the url property in the config\app.php file for http requests (it does state it's only for artisan), and it instead uses either HTTP_HOST or SERVER_NAME provided by apache to generate the domain for URLs.

    To override this default url, go to your routes.php file and use the following method:

    URL::forceRootUrl('http://subdomain.newurl.com');
    

    This will then force the URL generator to use the new url instead of the HTTP_HOST or SERVER_NAME value.

    0 讨论(0)
  • 2020-12-08 23:00

    Following up @TimeLord's solution:

    In latest version of laravel the name for forced schema has changed and now it is: URL::forceScheme()

    0 讨论(0)
提交回复
热议问题