È necessario specificare VIRTUAL_HOST quando si utilizza un proxy nginx (con contenitori docker)?


0

Ho esaminato molti tutorial su contenitori docker, microservizi e proxy nginx. Una cosa che ha davvero attirato la mia attenzione è che nel file docker-compose.yml, il servizio che vorrei avviare ha una variabile d'ambiente VIRTUAL_HOST. In questo modo posso avviare il contenitore facendo riferimento direttamente a VIRTUAL_HOST.

Ma tutti i contenitori devono avere VIRTUAL_HOST specificato? Ad esempio, supponiamo di avere 3 contenitori: A, B e C. Se voglio che tutti e 3 questi contenitori vengano sottoposti a proxy, devo specificare una variabile d'ambiente VIRTUAL_HOST per tutti e 3 nel file comporre docker? La variabile d'ambiente VIRTUAL_HOST è un prerequisito affinché il proxy Nginx funzioni correttamente con questi contenitori? Nessuno dei tutorial che ho controllato risponde a questa domanda.

Risposte:


0

Presumo che tu stia parlando dell'immagine jwilder / nginx-proxy .

In questo modo posso avviare il contenitore facendo riferimento direttamente a VIRTUAL_HOST.

Il contenitore viene avviato non appena digitato docker-compose uped è sempre in esecuzione. VIRTUAL_HOSTindica al proxy inverso quali richieste dell'host devono essere inoltrate a questo contenitore.

Per esempio, se si dispone di un contenitore con VIRTUAL_HOST=foo.example.com, quindi ogni richiesta fatta al revproxy con foo.example.comin Hostintestazione sarà trasmessa a questo contenitore e la sua risposta sarà inviata per la delega al cliente. Ma se l' Hostintestazione è bar.example.com, la richiesta non verrà inoltrata a quel contenitore. Invece, il proxy lo inoltrerà a un contenitore con VIRTUAL_HOST=bar.example.com. Se tale contenitore non esiste, tenterà di utilizzare l'host predefinito specificato con DEFAULT_HOSTvariabile sul contenitore proxy (non contenitore predefinito). Se l'host predefinito non è configurato, verrà restituito un errore.

Senza VIRTUAL_HOST, il proxy non saprà a quale Hostcorrisponde questo contenitore, quindi nessuna richiesta verrà inoltrata.


Ma non ci sono altri modi per il proxy di identificare a quale contenitore deve essere inoltrata la richiesta? Forse usando l'indirizzo IP del contenitore ... o qualcosa del genere?
Vktr,

@Vktr Penso che tu abbia frainteso il problema. Lo scopo di questo proxy inverso è distribuire le richieste su più server HTTP in base ai dati della richiesta, in particolare il Hostbrowser dell'utente dell'intestazione invia (che contiene l'URL del sito Web fino alla prima barra). Deve in qualche modo sapere quale Hostintestazione corrisponde a quale contenitore. Il browser non sa che il revproxy è lì, inoltre non sa che stai eseguendo il server in Docker o quali sono gli IP del contenitore. Ecco a cosa serve questo revproxy, nasconde la complessità della tua infrastruttura. Ciò lo rende più chiaro?
gronostaj,

Ok ha senso. Ho completamente dimenticato che l'intestazione host fa parte della richiesta http. Ma ciò che non ha senso è questo: in molti tutorial che ho controllato online, VIRTUAL_HOST è specificato solo per un servizio nel file comporre docker. In tutti gli altri servizi, non viene specificato VIRTUAL_HOST. Perché? Ecco un esempio di questo tutorial: Sviluppare con Docker . Controllare la parte 4. VIRTUAL_HOST è specificato solo per un servizio, nonostante il fatto che questo servizio abbia collegamenti ad altri servizi. Perché?
Vktr,

Altri servizi non sono rivolti all'utente e accessibili tramite HTTP.
gronostaj,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.