2012-11-05 27 views
30

Ecco la mia situazione: avrò un server frontend su cui gira nginx e più server backend che eseguono apache + passenger con diverse applicazioni di rail. NON sto provando a fare alcun bilanciamento del carico. Quello che devo fare è configurare nginx per le connessioni proxy a server specifici basati sull'URL. IE, client.dominio.com dovrebbe puntare a xxx100: 80, client2.dominio.com dovrebbe puntare a xxx101: 80, ecc.reverse proxy nginx backend multipli

Non sono così familiare con nginx, ma non sono riuscito a trovare una configurazione specifica online che si adatta alla mia situazione.

Grazie.

+0

hey sono stati in grado di trovare una soluzione per questo? nel mio caso voglio che lo stesso client acceda a più di questi server back-end, puoi aiutarmi a trovare una configurazione per questo? – Vinodborole

risposta

31

è possibile abbinare l'URL differenti con blocchi di server poi all'interno di ogni blocco di server che avresti avuto le impostazioni del proxy inverso

server { 
    server_name client.domain.com; 

    # app1 reverse proxy follow 
    proxy_set_header X-Real-IP $remote_addr; 
    proxy_set_header Host $host; 
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 
    proxy_pass http://x.x.x.100:80; 

} 

server { 
    server_name client2.domain.com; 

    # app2 reverse proxy settings follow 
    proxy_set_header X-Real-IP $remote_addr; 
    proxy_set_header Host $host; 
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 
    proxy_pass http://x.x.x.100:80; 
} 

ovviamente aggiungere ulteriori impostazioni nginx (come error_page, access_log, ...) come desiderato in ogni server -blocco

+0

Perfetto. Grazie! –

+2

È possibile configurare ciascun server di origine da proxy in base al percorso e non solo all'host/autorità in entrata? Cioè '/ system1 /' è inviato a 'http: // x.x.x.100 /' mentre '/ system2 /' è inviato a 'http: // x.x.x.120 /'? –

+1

sicuro, in tal caso è sufficiente posizionare le direttive proxy in un blocco di posizione appropriato, invece che nel blocco del server principale – cobaco

14

@ commento di mohamnag è giusto. proxy_pass è consentito solo all'interno di un location

See:

http://wiki.nginx.org/HttpProxyModule#proxy_pass

https://www.nginx.com/resources/admin-guide/reverse-proxy/

Così la configurazione corretta sarebbe

server { 
    server_name client.domain.com; 

    location/{ 
    # app1 reverse proxy follow 
    proxy_set_header X-Real-IP $remote_addr; 
    proxy_set_header Host $host; 
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 
    proxy_pass http://x.x.x.100:80; 
    } 
} 

server { 
    server_name client2.domain.com; 

    location/{ 
    # app2 reverse proxy settings follow 
    proxy_set_header X-Real-IP $remote_addr; 
    proxy_set_header Host $host; 
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 
    proxy_pass http://x.x.x.100:80; 
    } 
} 
Problemi correlati