Es gibt zwei Möglichkeiten, dies zu erreichen. Entweder machen Sie alles nach IP-Adresse mit Unterordnern oder Sie müssen eine Domain kaufen und dann mehrere Subdomains auf dieser Domain haben (Subdomains sollten nichts kosten, wenn Sie die Domain kaufen, aber fragen Sie Ihren Registrar).
Ich rate von der IP-Adressmethode ab, nur weil es sehr böse ist, sich IP-Adressen merken zu müssen, und wenn Sie versuchen, Informationen an andere weiterzugeben, haben Sie auch das gleiche Problem, dass sich andere die IP-Adresse merken müssen.
Die One-IP-Methode für viele Unterordner ohne Domain-Namen
BEACHTEN! Wir haben keine Informationen über Ihre Projekte, an denen Sie arbeiten. Wir müssen mehr darüber wissen, ob Sie diesen Ansatz anwenden können, da viele Web-Frameworks ohne einen damit verbundenen echten Domain-Namen nicht funktionieren.
WARNUNG : Beim fortlaufenden Testen dieser Beispiele wurde festgestellt, dass der Ansatz "Eine Domäne, viele Unterverzeichnisse" das Reverse-Proxying von Daten an das Backend nicht zulässt, da der angeforderte URI die Unterverzeichnisse innerhalb des URI enthält. Dies kann dazu führen, dass Back-End-Server Probleme haben, sich richtig zu verhalten.
Auf der anderen nginx
Seite müssen wir diesbezüglich einen "bösen" Ansatz verfolgen - eine IP-Adresse, viele Dokumentenspeicherorte und Unterordner. Dies ist ein sehr, sehr böser Ansatz und kann bei einigen Web-Frameworks zu vielen Problemen führen.
Angenommen, eine Standardinstallation wird nginx
als Basis für die Repositorys verwendet, dann müssen wir eine Standortkonfiguration erstellen, um jede Anforderung eines Projekt-Unterverzeichnisses zu verarbeiten. Dann müssen wir es an der richtigen Stelle symbolisieren.
Erstellen Sie /etc/nginx/sites-available/my-projects
mit folgendem Befehl (verwenden Sie diesen Befehl als Vorlage / Leitfaden): Es werden drei Projekte mit statischem HTML und keinen dynamischen Webanwendungen in PHP oder Python oder ähnlichem vorausgesetzt. Sie können die einzelnen Standortblöcke kopieren und neue Standorte entsprechend erstellen Server-IP ist 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
}
}
Jetzt ersetzen wir die Standardkonfiguration (entfernen sie) und fügen unsere hinzu:
sudo rm /etc/nginx/sites-enabled/default
sudo ln -s /etc/nginx/sites-available/my-projects /etc/nginx/sites-enabled
Und dann starte den nginx
Dienst neu:
# If on 14.04, use this:
sudo service nginx restart
# If on 15.10 or newer, use this:
sudo systemctl restart nginx
Der Ansatz mit einer Domäne und mehreren Unterdomänen.
In diesem Antwortabschnitt wird davon ausgegangen, dass Sie über eine Domain und mehrere Subdomains verfügen. Wenn Sie dies nicht haben, klären Sie dies bitte in Ihrer Frage
Für jeden nginx
server {}
Block in der Konfiguration müssen Sie den Servernamen definieren und wahrscheinlich einen vierten Serverblock als "catch all" für andere Anforderungen festlegen.
Beispiel: Ich habe drei Projekte proj1
, proj2
, proj3
. Ich habe eine Domain mit dem Namen evil-projects.net
(HINWEIS: Gibt es nicht wirklich). Ich möchte drei verschiedene Subdomains, eine für jede nginx
Konfiguration, die auf jeweils ein Projekt verweist. Mein Server befindet sich unter 1.2.3.4 und wird alle Websites bedienen.
Mit dem obigen Szenario haben wir zwei Teile: Domänen und Unterdomänen und die Serverkonfiguration.
(1): DNS-Konfiguration
Richten Sie Ihren DNS auf Ihrem Host so ein, dass für die DNS-Einträge Folgendes zutrifft:
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
(2): NGINX-Konfiguration auf dem Server (1.2.3.4)
Nun zu Ihren nginx
Konfigurationen. Ich gehe davon aus, dass Sie die Standard-Nginx-Setups und die Pakete aus den Repositorys haben werden (ich werde 14.04 als Basisbeispiel verwenden). /etc/nginx/sites-available
Zuerst werden vier Konfigurationsdateien angelegt . Möglicherweise müssen Sie sudo
beim Erstellen dieser Dateien verwenden, da der betreffende Ordner im Besitz von ist root
.
/etc/nginx/sites-available/catch-all
- Dies ist der Haken für alle nicht gültigen Domains. Ich mag es, den http-Fehlercode 410 (GONE) zurückzugeben.
server {
listen 80 default_server;
server_name _;
return 410;
}
Als nächstes richten wir die Konfiguration für Ihre Standorte / Projekte ein. Ich gehe jedoch davon aus, dass alle Dateien statisch sind. Jedes dieser Verfahren setzt voraus, dass Sie für jedes Projekt auch auf dem Server unterschiedliche Webverzeichnisse haben (unterschiedliche "Dokumentenstammverzeichnisse").
/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;
}
}
Wir müssen dann die 'Standard'-Konfiguration entfernen /etc/nginx/sites-enabled
und unsere eigene hinzufügen. Auch sudo
hier wird gebraucht.
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/
Und dann starten wir den nginx
Prozess neu:
# If on 14.04, use this:
sudo service nginx restart
# If on 15.04 or newer, use this:
sudo systemctl restart nginx
Sobald sich DNS verbreitet, funktionieren die Sites wie sie sollten.
X.Y.Z.W/foo
,X.Y.Z.W/bar
)? Warum können Sie keine Domains für sie bekommen? (Sie können dieselbe IP mehreren Domains zuweisen)?