Nginx'te birden fazla web sitesi, bir IP


14

Bu yüzden dijital okyanus ve nginx kullanıyorum. Birden fazla web sitesini (projelerim) barındırmak istiyorum, ancak her biri için bir alan adı satın almak istemiyorum.

Bu bir ip kullanarak onlara erişirken nginx ve dijital okyanus üzerinde birden fazla web sitesi barındırmanın bir yolu var mı?


Onları farklı klasörlerde barındırıyor musunuz ( X.Y.Z.W/foo, X.Y.Z.W/bar)? Neden onlar için alan adı alamıyorsunuz? (Aynı IP'yi birden çok alana atayabilirsiniz)?
muru

Bunu yapmak için birden fazla alana ihtiyacınız olacaktır. Yine de ücretsiz bir alan adı hizmeti vardır: freenom.com size ücretsiz .tk, .ml, .ga, .cf ve .gq alan adları verir.
TheWanderer

@muru Sanırım birden çok alana para harcamak istemiyorlar. Tek bir URL'de birden çok web sitesine sahip olmak istiyorlar.
TheWanderer

@ Zacharee1 sadece tek bir alana ihtiyaç duyarlar ve alt alan adları yapabilirler. Bunu yapmayı reddederse, kullandıkları uygulamanın / projenin türüne bağlı olarak 'alt klasör' konum yöntemlerini desteklemeyebilecek kötü IP tabanlı yöntemi yapmak zorunda kalacaklar.
Thomas Ward

@ThomasW. Alt alan adlarının bir seçenek olmayacağını düşünüyordum
TheWanderer

Yanıtlar:


18

Bunu başarmanın iki yolu var. Her şeyi IP adresine göre, alt klasör konumlarıyla yaparsınız veya bir etki alanı satın almanız ve daha sonra bu etki alanında birden fazla alt etki alanına sahip olmanız gerekir ( etki alanını satın alırsanız alt etki alanlarının hiçbir maliyeti yoktur, ancak kayıt kuruluşunuza danışın).

IP adresi yöntemini, yalnızca IP adreslerini hatırlamak çok kötüyse ve başkalarıyla bilgi paylaşmaya çalışıyorsanız, IP adresini hatırlamak zorunda olan başkalarının da aynı sorununa sahip olmanız durumunda önermem.


Alan adı olmadan tek IP, birçok alt klasör yaklaşımı

FARKINA VARMAK! Üzerinde çalıştığınız projeleriniz hakkında hiçbir bilgimiz yok. Birçok web çerçevesi ona bağlı gerçek bir etki alanı adı olmadan çalışmayacağından, bu yaklaşımı yapıp yapamayacağınızı belirlemek için daha fazla bilgi sahibi olmamız gerekir.


UYARI : Bu örneklerin devam eden testlerinde, istenen URI'nin URI içindeki alt dizinleri içereceğinden, "Bir alan adı, birçok alt dizin" yaklaşımının verileri arka uca tersine çevirmek için nazikçe işe yaramadığı keşfedilmiştir; bu, arka uç sunucularının düzgün davranmasında sorunlara neden olabilir.

On nginxtarafında, bu bir 'kötülük' yaklaşımını yapmanız gereken - bir IP adresi, birçok docroots ve alt klasör yerleri. Bu çok kötü bir yaklaşımdır ve bazı web çerçevelerinde birçok soruna neden olabilir.

Depolardan nginxtemel olarak varsayılan bir yükleme varsayarsak , her proje alt dizini isteğini işlemek için bir site yapılandırması oluşturmamız gerekir. O zaman doğru yerde işaretlememiz gerekiyor.

/etc/nginx/sites-available/my-projectsAşağıdakilerle oluşturun (bunu şablon / kılavuz olarak kullanın - statik HTML içeren üç proje olduğunu ve PHP veya python veya benzerlerinde dinamik web uygulaması olmadığını varsayar ve tek tek konum bloklarını kopyalayabilir ve buna göre yeni konumlar oluşturabilirsiniz; sunucu IP'si 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
    }
}

Şimdi varsayılan yapılandırmayı değiştiriyoruz (kaldırıyoruz) ve bizimkileri ekliyoruz:

sudo rm /etc/nginx/sites-enabled/default
sudo ln -s /etc/nginx/sites-available/my-projects /etc/nginx/sites-enabled

Ardından nginxhizmeti yeniden başlatın :

# If on 14.04, use this:
sudo service nginx restart

# If on 15.10 or newer, use this:
sudo systemctl restart nginx

Tek alanlı, birden çok alt alan adı yaklaşımı.

Bu yanıt bölümünde, bir alanınız ve içinde birden çok alt alanınız olduğu varsayılmaktadır. Buna sahip değilseniz, lütfen sorunuzda bunu açıklayın

nginx server {}Yapılandırmadaki her blokla birlikte , sunucu adını tanımlamanız ve muhtemelen dördüncü bir sunucu bloğunu diğer istekler için 'tümünü yakala' olarak ayarlamanız gerekir.

Örnek: Üç projemiz var, proj1, proj2, proj3. Adlı bir etki alanım var evil-projects.net(NOT: Gerçekten yok). Üç farklı alt alan adı istiyorum, her nginxbiri bir projeye işaret edecek her bir yapılandırma için . Sunucum 1.2.3.4'te bulunuyor ve tüm sitelere hizmet verecek.

Yukarıdaki senaryoda, iki bölümümüz vardır: etki alanları ve alt etki alanları ve sunucu yapılandırması.

(1): DNS Yapılandırması

DNS'inizi ana makinenizde, DNS kayıtlarında aşağıdakilerin doğru olacağı şekilde ayarlayın:

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): Sunucudaki NGINX yapılandırması (1.2.3.4)

Şimdi nginxyapılandırmalarınız için. Varsayılan nginx kurulumları ve depolardan paketleri alacağınızı varsayıyorum (temel örnek olarak 14.04 kullanacağım). İlk olarak dört yapılandırma dosyası koyacağız /etc/nginx/sites-available. Söz sudokonusu klasöre ait olduğu için bu dosyaları oluştururken kullanmanız gerekebilir root.

/etc/nginx/sites-available/catch-all- bu geçersiz alan adları için 'tümünü yakala' olacaktır. Ben http hata kodu 410 (GONE) döndürmeyi seviyorum.

server {
    listen 80 default_server;

    server_name _;

    return 410;
}

Ardından, siteleriniz / projeleriniz için yapılandırmayı kurduk. Yine de hepsinin statik dosyalar olduğunu varsayacağım. Bunların her biri, sunucudaki her proje için farklı web dizinlerine sahip olduğunuz anlamına gelir (farklı 'belge kökleri').

/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;
    }
}

Daha sonra 'varsayılan' yapılandırmayı kaldırmalı /etc/nginx/sites-enabledve kendi yapılandırmamızı eklemeliyiz. Yine sudoburada gereklidir.

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/

Ve sonra nginxişlemi yeniden başlatıyoruz:

# If on 14.04, use this:
sudo service nginx restart

# If on 15.04 or newer, use this:
sudo systemctl restart nginx

DNS yayıldıktan sonra siteler olması gerektiği gibi çalışır.


bu yapılandırmada proxy_cache için blokları nereye yerleştirirsiniz? Proj1, proj2, proj3'ün farklı köklere sahip aynı uç noktalara sahip olduğunu ve farklı klasörlerde yanıtı önbelleklemek istediğinizi varsayalım.
user305883

@ user305883 Bu yeni bir soru gibi geliyor.
Thomas Ward

Bir IP, birçok alt klasör yaklaşımı tam olarak yapmak istediğim şey. Ancak, bunu işe alamıyorum. Kodu tam olarak kopyaladım ve IP adresim için sunucu_adını değiştirdim. Ayrıca izinlerin 755 olarak ayarlandığı / var / www / proj1 ve / var / www / proj2 ve / var / www / proj3 konumlarında 3 temel index.html dosyam var. Ancak myip / proj1'e gittiğimde / proj1'i ilettiğim gibi aynı 410 sayfa. Sorun ne? 2020 ve Nginx 1.10.3 kullanıyorum - sözdizimi değişti mi?
SLater01

@ SLater01 sözdizimi aynı kalır, ancak bunun için kendi sorunuzu sormanız gerekir, çünkü bu cevap için tamamen ayrı bir konudur ve yorumların sağlayabileceğinden çok daha fazla zaman / çaba / ayrıntıya ihtiyaç duyar. Bununla birlikte, muhtemelen bu bölümde, büyük web sitelerinin / hizmetlerin bu şekilde davranmadığını gösteren bir büyük güzel sarı kutuyu okumanız gerekir, bu nedenle bir kök etki alanından değil, bir alt dizinden sunulmaktan hoşlanmaz.
Thomas Ward
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.