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 nginx
tarafı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 nginx
temel 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-projects
Aş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 nginx
hizmeti 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 nginx
biri 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 nginx
yapı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 sudo
konusu 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-enabled
ve kendi yapılandırmamızı eklemeliyiz. Yine sudo
burada 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 nginx
iş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.
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)?