2015-04-28 25 views
9

Ok, więc dla celów programistycznych mamy dedykowany serwer WWW. Nie jest on obecnie podłączony bezpośrednio do Internetu, więc skonfigurowałem odwrotne proxy Apache na innym serwerze, który przekazuje dalej do serwera programistycznego.Trasy Laravel za odwrotnym proxy

W ten sposób mogę uzyskać dostęp do sieci na serwerze.

Problem polega na tym, że trasy w Laravel są obecnie poprzedzane wewnętrznym adresem IP serwera lub nazwą komputera serwera.

Na przykład, idę do http://subdomain.test.com ale wszystkie trasy, generowane przy użyciu route() pomocnika, pokazujemy następujący adres: http://10.47.32.22 a nie http://subdomain.test.com.

Odwrotna proxy jest skonfigurowany jako takie:

<VirtualHost *:80> 
    ServerName igateway.somedomain.com 

    ProxyRequests Off 
    <Proxy *> 
     Order deny,allow 
     Allow from all 
    </Proxy> 

    ProxyPass/http://10.47.32.22:80/ 
    ProxyPassReverse/http://10.47.32.22:80/ 
    <Location /> 
     Order allow,deny 
     Allow from all 
    </Location> 
</VirtualHost> 

mam ustawić rzeczywistą nazwę domeny w config\app.php.

Pytanie

Jak mogę ustawić domyślny adres URL do wykorzystania w routingu? Nie chcę tego używać adresów wewnętrznych, ponieważ to pokonuje punkt odwrotnego proxy.

Próbowałem zamknąć wszystkie moje trasy w grupie Route::group(['domain' ..., która również nie działa.

Odpowiedz

11

Wpadłem na ten sam (lub podobny problem), gdy aplikacja Laravel 5 nie była świadoma bycia za równoważnikiem obciążenia SSL.

mam następujący wzór:

  • rozmowach klienta do obciążenia równoważenia SSL przez HTTPS
  • równoważenia obciążenia SSL rozmów do serwera back-end over HTTP

To jednak powoduje, że wszystkie adresy URL w kodzie HTML są generowane za pomocą schematu http: //.

Poniżej znajduje się obejście quick'n'dirty do tej pracy, w tym schematu (http vs https):

Umieść następujący kod na górze app/HTTP/tras.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); 
} 

następnie dodaj następującą linię do .env pliku:

PROXY_URL = http://igateway.somedomain.com 

Jeśli trzeba także zmienić schemat w wygenerowanym HTML kod z http: // do https : //, dodaj również następujący wiersz:

PROXY_SCHEMA = https 
4

OK, więc dostałem to. Mam nadzieję, że to pomoże komuś w przyszłości.

Wydaje się laravel ignoruje właściwość w pliku config\app.php dla żądań HTTP (to jednak stwierdzić, że to tylko dla rzemieślnika) url, a zamiast tego używa albo HTTP_HOST lub SERVER_NAME dostarczone przez apache do generowania domeny dla adresów URL.

Aby zmienić to domyślny adres URL, przejdź do pliku routes.php i stosować następujące metody:

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

Zmusi to generator URL zamiast użyć nowego adresu URL wartości HTTP_HOST lub nazwa_serwera.

Powiązane problemy