Wiele witryn na nginx, jeden adres IP

14

Więc używam cyfrowego oceanu i nginx. Chcę hostować wiele witryn (moich projektów), ale nie chcę kupować domeny dla każdej z nich.

Czy istnieje sposób na hostowanie wielu stron internetowych na nginx i cyfrowym oceanie podczas uzyskiwania do nich dostępu za pomocą tego samego adresu IP?

Kod Bros
źródło
Hostować je w różnych folderach ( 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)?
muru
Aby to zrobić, potrzebujesz wielu domen. Istnieje jednak bezpłatna usługa domenowa: freenom.com oferuje bezpłatne domeny .tk, .ml, .ga, .cf i .gq.
Wędrowiec
@muru Myślę, że nie chcą wydawać pieniędzy na wiele domen. Chcą w jakiś sposób mieć wiele witryn pod jednym adresem URL.
Wędrowiec
@ Zacharee1 potrzebują tylko jednej domeny i mogą tworzyć poddomeny. Jeśli tego nie zrobią, będą musieli zastosować złą metodę opartą na IP, która w zależności od rodzaju aplikacji / projektu, z którego korzystają, może nie być w stanie obsłużyć metod lokalizacji „podfolderu”.
Thomas Ward
@ThomasW. Myślałem, że subdomeny nie będą opcją
TheWanderer

Odpowiedzi:

17

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 nginxstrony 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ą nginxinstalację 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-projectsw 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 nginxusł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 nginxkonfiguracji, 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 nginxkonfiguracji. 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-availableNajpierw zostaną umieszczone cztery pliki konfiguracyjne . Może być konieczne użycie sudoprzy 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-enabledi dodać własną. Znowu sudojest 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 nginxproces:

# 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.

Thomas Ward
źródło
w tej konfiguracji gdzie umieściłbyś bloki dla proxy_cache? Załóżmy, że proj1, proj2, proj3 mają wszystkie te same punkty końcowe, z różnymi katalogami głównymi i chcą buforować odpowiedzi w różnych folderach.
user305883
@ user305883 Wygląda na to, że to nowe pytanie.
Thomas Ward
Jedno IP, wiele podfolderów jest dokładnie tym, co chcę zrobić. Nie mogę tego jednak uruchomić. Skopiowałem dokładnie kod i zmieniłem nazwę serwera dla mojego adresu IP. Mam również 3 podstawowe pliki index.html w lokalizacjach / var / www / proj1 i / var / www / proj2 i / var / www / proj3, gdzie uprawnienia zostały ustawione na 755. Ale kiedy nawiguję do myip / proj1 , widzę ta sama strona 410, jak gdybym nie przekazała / proj1. Co jest nie tak? Jest rok 2020 i używam Nginx 1.10.3 - czy zmieniono składnię?
SLater01
@ SLater01 składnia pozostaje taka sama, ale musisz zadać własne pytanie, ponieważ jest to zupełnie osobny problem dla tej odpowiedzi i wymaga znacznie więcej czasu / wysiłku / szczegółów niż komentarze. Jednak prawdopodobnie musisz przeczytać ładne duże żółte pole w tej sekcji, które wskazuje, że większość stron internetowych / usług nie zachowuje się w ten sposób, więc nie spodoba się to, że będą obsługiwane poza podkatalogiem, a nie domeną główną.
Thomas Ward