Utilizzare un nginx reverse proxy :
- installare Nginx nell'host. Su Debian/Ubuntu:
apt-get install nginx
. Nota: ho presunto che tu non abbia già apache o qualche altro server web sull'host ...
- Per ogni sito, scrivi un file di sito nginx nella directory
/etc/nginx/sites-available
che reindirizza quel sito a http del contenitore di una finestra mobile che funzionerà su un altro porto predisposto (ad esempio, 2001, 2002, ...). Ogni sito riceve il proprio file, come quello qui sotto, ma con diverse porte predisposte per ciascun sito. Gli utenti esterni accedono a questi alla porta 80 dello stesso indirizzo IP ma con nomi di siti Web diversi e da questi nomi nginx gestirà le connessioni interne necessarie in modo invisibile.
- simulare i file del sito in modo che vengano visualizzati nella directory
/etc/nginx/sites-enabled
e riavviare nginx
. Successivamente, è possibile rimuovere uno di questi collegamenti e riavviare nginx se è necessario disabilitare temporaneamente l'accesso a un sito.
- avviare i contenitori al riavvio del sistema aggiungendo i comandi
docker run
a /etc/rc.local
e reindirizzando la porta host predisposta (localhost: 2001) alla porta del contenitore 80, ad es. docker run -d -p localhost:2001:80 imageA
Se un contenitore non funziona, si verificherà un errore di gateway da nginx. Questo potrebbe essere personalizzato per mostrare una pagina HTML personalizzata. Per maggiore robustezza, potrebbe essere meglio gestire i container in supervisord
o qualche altro gestore di processo che respawn i processi morti.
Ecco un file del sito nginx esempio per un reindirizzamento alla porta 2001:
upstream dockerA {
server localhost:2001;
}
server {
listen 192.168.1.8:80; // REPLACE WITH HOST NUMERIC IP ADDRESS
root /var/web/siteAstaticfiles;
index index.html;
server_name www.siteA.com;
location/{
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_set_header X-NginX-Proxy true;
proxy_pass http://dockerA;
}
}
In questo esempio, anche se una directory del disco locale per i file HTML è impostato per il sito A, non viene utilizzato. Invece tutte le richieste vengono inviate a monte. Non ho verificato se le linee root
e index
possono essere omesse in sicurezza.
Non sei sicuro di finestra mobile, ma in IIS usiamo intestazione host per consentire a più siti web sulla porta 80 – Hakunamatata