Quindi sto usando digital ocean e nginx. Voglio ospitare più siti Web (i miei progetti) ma non voglio acquistare un dominio per ognuno.
Esiste un modo per ospitare più siti Web su nginx e digital ocean accedendo ad essi utilizzando quel solo ip?
Quindi sto usando digital ocean e nginx. Voglio ospitare più siti Web (i miei progetti) ma non voglio acquistare un dominio per ognuno.
Esiste un modo per ospitare più siti Web su nginx e digital ocean accedendo ad essi utilizzando quel solo ip?
Risposte:
Ci sono due modi per raggiungere questo obiettivo. O fai tutto per indirizzo IP, con posizioni delle sottocartelle, oppure dovrai acquistare un dominio e quindi avere più sottodomini su quel dominio (i sottodomini non dovrebbero costare nulla, se acquisti il dominio, ma verifica con il tuo registrar).
Non consiglio il metodo dell'indirizzo IP se non altro perché è molto malvagio dover ricordare gli indirizzi IP e se provi a condividere le informazioni con altri, hai anche lo stesso problema che gli altri devono ricordare l'indirizzo IP.
AVVISO! Non abbiamo informazioni sui tuoi progetti a cui stai lavorando. Dobbiamo saperne di più per determinare se è possibile eseguire questo approccio, poiché molti framework Web non funzioneranno senza un vero nome di dominio associato ad esso.
ATTENZIONE : Durante i test in corso di questi esempi, è stato scoperto che l'approccio "Un dominio, molte sottodirectory" non richiede gentilmente di invertire i dati al back-end, poiché l'URI richiesto includerà le sottodirectory all'interno dell'URI; questo potrebbe far sì che i server back-end abbiano problemi a comportarsi correttamente.
Da un nginx
lato, dobbiamo adottare un approccio "malvagio" a questo: un indirizzo IP, molti documenti e posizioni delle sottocartelle. Questo è un approccio molto malvagio e può causare molti problemi con alcuni framework web.
Supponendo nginx
un'installazione predefinita come base dai repository, allora dobbiamo creare una configurazione del sito per gestire ogni richiesta di sottodirectory del progetto. Quindi dobbiamo ricollegarlo nella posizione giusta.
Crea /etc/nginx/sites-available/my-projects
con quanto segue (usa questo come modello / guida - presuppone tre progetti con HTML statico e nessuna applicazione web dinamica in PHP o Python o simili, e puoi copiare i singoli blocchi di posizione e creare nuove posizioni di conseguenza; presuppone anche che il tuo IP del server è 1.2.3.4
).
server {
listen 80 default_server;
server_name 1.2.3.4;
location / {
return 410; # Default root of site won't exist.
}
location /proj1/ {
alias /var/www/proj1;
try_files $uri $uri/ =404;
# any additional configuration for non-static content
}
location /proj2/ {
alias /var/www/proj2;
try_files $uri $uri/ =404;
# any additional configuration for non-static content
}
location /proj3/ {
alias /var/www/proj3;
try_files $uri $uri/ =404;
# any additional configuration for non-static content
}
}
Ora sostituiamo la configurazione predefinita (rimuovila) e aggiungiamo la nostra:
sudo rm /etc/nginx/sites-enabled/default
sudo ln -s /etc/nginx/sites-available/my-projects /etc/nginx/sites-enabled
E quindi riavviare il nginx
servizio:
# If on 14.04, use this:
sudo service nginx restart
# If on 15.10 or newer, use this:
sudo systemctl restart nginx
Questa sezione di risposta presuppone che tu abbia un dominio e più sottodomini. Se non lo possiedi, chiariscilo nella tua domanda
Con ogni nginx
server {}
blocco nella configurazione, sarà necessario definire il nome del server e probabilmente impostare un quarto blocco del server come "catch all" per altre richieste.
Esempio: Ho tre progetti,
proj1
,proj2
,proj3
. Ho un dominio chiamatoevil-projects.net
(NOTA: non esiste davvero). Voglio tre diversi sottodomini, uno per ogninginx
configurazione che punterà a un progetto ciascuno. Il mio server risiede alla 1.2.3.4 e servirà tutti i siti.
Con lo scenario sopra, abbiamo due parti: domini e sottodomini e la configurazione del server.
Imposta il tuo DNS sul tuo host in modo che quanto segue sia vero con i record DNS:
evil-projects.net IN A 1.2.3.4
proj1.evil-projects.net IN A 1.2.3.4
proj2.evil-projects.net IN A 1.2.3.4
proj3.evil-projects.net IN A 1.2.3.4
Ora per le tue nginx
configurazioni. Suppongo che avrai le impostazioni predefinite di nginx e i pacchetti dai repository (userò 14.04 come esempio di base). In /etc/nginx/sites-available
primo luogo, verranno inseriti quattro file di configurazione . Potrebbe essere necessario utilizzarlo sudo
durante la creazione di questi file, poiché la cartella in questione è di proprietà di root
.
/etc/nginx/sites-available/catch-all
- questo sarà il "catch all" per tutti i domini non validi. Mi piace restituire il codice di errore http 410 (GONE).
server {
listen 80 default_server;
server_name _;
return 410;
}
Successivamente, impostiamo la configurazione per i tuoi siti / progetti. Presumo che siano tutti file statici, però. Ognuno di questi implica che hai diverse directory web per ogni progetto sul server (differenti 'root del documento').
/etc/nginx/sites-available/proj1.evil-projects.net
:
server {
listen 80;
server_name proj1.evil-projects.net;
root /var/www/proj1;
index index.htm index.html;
location / {
try_files $uri $uri/ =404;
}
}
/etc/nginx/sites-available/proj2.evil-projects.net
:
server {
listen 80;
server_name proj2.evil-projects.net;
root /var/www/proj2;
index index.htm index.html;
location / {
try_files $uri $uri/ =404;
}
}
/etc/nginx/sites-available/proj3.evil-projects.net
:
server {
listen 80;
server_name proj3.evil-projects.net;
root /var/www/proj3;
index index.htm index.html;
location / {
try_files $uri $uri/ =404;
}
}
Dobbiamo quindi rimuovere la configurazione "predefinita" /etc/nginx/sites-enabled
e aggiungere la nostra. Ancora una volta, sudo
è necessario qui.
sudo rm /etc/nginx/sites-enabled/default
sudo ln -s /etc/nginx/sites-available/proj1.evil-projects.net /etc/nginx/sites-enabled/
sudo ln -s /etc/nginx/sites-available/proj2.evil-projects.net /etc/nginx/sites-enabled/
sudo ln -s /etc/nginx/sites-available/proj3.evil-projects.net /etc/nginx/sites-enabled/
E quindi riavviamo il nginx
processo:
# If on 14.04, use this:
sudo service nginx restart
# If on 15.04 or newer, use this:
sudo systemctl restart nginx
Una volta che il DNS si propaga, i siti funzioneranno come dovrebbero.
X.Y.Z.W/foo
,X.Y.Z.W/bar
)? Perché non puoi ottenere domini per loro? (Puoi assegnare lo stesso IP a più domini)?