Istnieją dwa sposoby na osiągnięcie tego. Albo robisz wszystko według adresu IP, z lokalizacjami podfolderów, albo będziesz musiał kupić jedną domenę, a następnie mieć wiele subdomen w tej domenie (subdomeny nie powinny nic kosztować, jeśli kupisz domenę, ale skontaktuj się z rejestratorem).
Nie radzę metody adresu IP choćby dlatego, że pamiętanie adresów IP jest bardzo złe, a jeśli próbujesz dzielić się informacjami z innymi, masz również ten sam problem z zapamiętywaniem adresu IP przez innych.
Podejście z jednym adresem IP i wieloma podfolderami bez nazwy domeny
OGŁOSZENIE! Nie mamy żadnych informacji o twoich projektach, nad którymi pracujesz. Musimy dowiedzieć się więcej, aby ustalić, czy możesz to zrobić, ponieważ wiele platform internetowych nie będzie działać bez powiązanej z nimi prawdziwej nazwy domeny.
OSTRZEŻENIE : Podczas ciągłego testowania tych przykładów odkryto, że podejście „Jedna domena, wiele podkatalogów” nie bierze udziału w odwrotnym proxy do danych zaplecza, ponieważ żądany identyfikator URI będzie zawierać podkatalogi w obrębie identyfikatora URI; może to powodować problemy z prawidłowym zachowaniem serwerów zaplecza.
Z jednej nginx
strony musimy zastosować do tego „złe” podejście - jeden adres IP, wiele dokumentów i lokalizacji podfolderów. Jest to bardzo złe podejście i może powodować wiele problemów z niektórymi ramami sieciowymi.
Zakładając domyślną nginx
instalację jako bazę z repozytoriów, musimy utworzyć konfigurację witryny, aby obsłużyć każde żądanie podkatalogu projektu. Następnie musimy symlinkować go we właściwej lokalizacji.
Utwórz /etc/nginx/sites-available/my-projects
w następujący sposób (użyj tego jako szablonu / przewodnika - zakłada trzy projekty ze statycznym HTML i bez dynamicznych aplikacji internetowych w PHP, Pythonie lub podobnych, a także możesz kopiować poszczególne bloki lokalizacji i odpowiednio tworzyć nowe lokalizacje; zakłada również adres IP serwera to 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
}
}
Teraz zastępujemy domyślną konfigurację (usuwamy ją) i dodajemy naszą:
sudo rm /etc/nginx/sites-enabled/default
sudo ln -s /etc/nginx/sites-available/my-projects /etc/nginx/sites-enabled
Następnie uruchom ponownie nginx
usługę:
# If on 14.04, use this:
sudo service nginx restart
# If on 15.10 or newer, use this:
sudo systemctl restart nginx
Podejście z jedną domeną i wieloma subdomenami.
W tej sekcji odpowiedzi założono, że masz jedną domenę i wiele subdomen. Jeśli nie masz tego, wyjaśnij to w swoim pytaniu
Z każdym nginx
server {}
blokiem w konfiguracji musisz zdefiniować nazwę serwera i prawdopodobnie ustawić czwarty blok serwera jako „catch all” dla innych żądań.
Przykład: Mam trzy projekty proj1
, proj2
, proj3
. Mam domenę o nazwie evil-projects.net
(UWAGA: tak naprawdę nie istnieje). Chcę trzy różne subdomeny, po jednej dla każdej nginx
konfiguracji, która będzie wskazywała na jeden projekt. Mój serwer znajduje się w wersji 1.2.3.4 i będzie obsługiwał wszystkie witryny.
W powyższym scenariuszu mamy dwie części: domeny i subdomeny oraz konfigurację serwera.
(1): Konfiguracja DNS
Skonfiguruj DNS na swoim hoście, aby spełnić następujące warunki z rekordami 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
(2): Konfiguracja NGINX na serwerze (1.2.3.4)
Teraz dla twoich nginx
konfiguracji. Zakładam, że będziesz mieć domyślne ustawienia Nginx i pakiety z repozytoriów (użyję 14.04 jako podstawowy przykład). /etc/nginx/sites-available
Najpierw zostaną umieszczone cztery pliki konfiguracyjne . Może być konieczne użycie sudo
przy tworzeniu tych plików, ponieważ dany folder jest własnością root
.
/etc/nginx/sites-available/catch-all
- będzie to „złapać wszystko” dla każdej nieważnej domeny. Lubię zwracać kod błędu HTTP 410 (BRAK).
server {
listen 80 default_server;
server_name _;
return 410;
}
Następnie skonfigurujemy konfigurację dla twoich witryn / projektów. Zakładam jednak, że wszystkie są plikami statycznymi. Każdy z nich oznacza, że masz także różne katalogi internetowe dla każdego projektu na serwerze (różne „katalogi główne”).
/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;
}
}
Następnie musimy usunąć konfigurację „domyślną” /etc/nginx/sites-enabled
i dodać własną. Znowu sudo
jest tu potrzebny.
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/
Następnie ponownie uruchamiamy nginx
proces:
# If on 14.04, use this:
sudo service nginx restart
# If on 15.04 or newer, use this:
sudo systemctl restart nginx
Po propagacji DNS witryny będą działać tak, jak powinny.
X.Y.Z.W/foo
,X.Y.Z.W/bar
)? Dlaczego nie możesz uzyskać dla nich domen? (Możesz przypisać ten sam adres IP do wielu domen)?