2015-04-28 57 views
9

Ok, quindi per scopi di sviluppo, abbiamo un server web dedicato. Al momento non è collegato direttamente a Internet, quindi ho configurato un proxy inverso Apache su un altro server, che inoltra al server di sviluppo.Laravel segue il proxy inverso

In questo modo, posso ottenere l'accesso Web al server.

Il problema è che i percorsi in Laravel vengono ora preceduti dall'indirizzo IP del server interno o dal nome del computer del server.

Per esempio, vado a http://subdomain.test.com ma tutti i percorsi, generati utilizzando il route() aiutante, consentono di visualizzare il seguente url: http://10.47.32.22 e non http://subdomain.test.com.

Il reverse proxy è configurato come tale:

<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> 

ho impostato il nome di dominio reale in config\app.php.

Domanda

Come posso impostare l'URL predefinito da utilizzare nel percorso? Non voglio che usi gli indirizzi interni, perché ciò sconfigge il punto del proxy inverso.

Ho provato a racchiudere tutti i miei percorsi in un gruppo Route::group(['domain' ..., che non funziona neanche.

risposta

11

Mi sono imbattuto nello stesso (o simile problema), quando un'applicazione Laravel 5 non era a conoscenza di essere dietro un load balancer SSL.

Ho la seguente disegno:

  • client parla con un bilanciamento del carico SSL su HTTPS
  • colloqui carico SSL di bilanciamento a un server back-end su HTTP

Che, tuttavia, causa la generazione di tutti gli URL nel codice HTML con lo schema http: //.

La seguente è una soluzione quick'n'dirty per fare questo lavoro, compreso lo schema (http vs https):

Inserire il codice seguente in cima app/HTTP/percorsi.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); 
} 

quindi aggiungere la seguente riga in .env di file:

PROXY_URL = http://igateway.somedomain.com 

Se hai bisogno anche di cambiare schema nel codice HTML generato da http: // a https : //, è sufficiente aggiungere anche la seguente riga:

PROXY_SCHEMA = https 
4

Ok, quindi ho capito. Speriamo che questo possa aiutare qualcuno in futuro.

Sembra laravel ignora la proprietà url nel file config\app.php per le richieste HTTP (lo fa affermare è solo per artigianale), e utilizza invece sia HTTP_HOST o SERVER_NAME fornito da Apache per generare il dominio per gli URL.

per ignorare questo URL predefinito, andare al file routes.php e utilizzare il seguente metodo:

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

Questo sarà quindi costringere il generatore di URL da utilizzare il nuovo URL invece del valore HTTP_HOST o NOME_SERVER.

Problemi correlati