2011-11-07 26 views
7

Şu anda benim Apache sunucu sorunu /var/www altında her şey her yerden erişilebilir olmasıdır, böyleceApache2, alt alanların sanal barındırılmasını destekliyor mu?

<VirtualHost *:80> 
ServerName www.example.com 
ServerAlias example.com 
DocumentRoot /var/www 
</VirtualHost> 

gibi ayarlanır. Bir web sayfasını /var/www/john/bio.html varsa, o web sayfası Yani kullanıcı john için tüm dosyalar gitmek Öyle

<VirtualHost *:80> 
ServerName www.example.com 
ServerAlias example.com 
DocumentRoot /var/www 
</VirtualHost> 

<VirtualHost *:80> 
ServerName www.john.example.com 
ServerAlias john.example.com 
DocumentRoot /var/www/john 
</VirtualHost> 

<VirtualHost *:80> 
ServerName www.jane.example.com 
ServerAlias jane.example.com 
DocumentRoot /var/www/jane 
</VirtualHost> 

gibi benim Apache sunucusu kurmak isteyen var/www/jane/

komut dosyalarını/resim ödünç alabilir /var/www/john/ klasörü ve aynı şekilde kullanıcı için jane. Ardından, sembolik bağlantılar kapalı (varsayılan olarak) ve yalnızca /var/www/user/ (varsayılan olarak) tarafından sağlanan erişim ile jane's web sayfasından komut dosyaları/resimler dahil olmak üzere john's web sayfası hakkında endişelenmenize gerek yok.

cevap

21

Yalnızca yerel önlemleri (DNS yerine /etc/hosts) kullanarak bunun gerçekten işe yarayabildiğini buldum.

İlk olarak, istediğiniz web sitesi adlarını (www.example.com) ve hedef IP adresinizi (192.168.1.1) eşlemek için /etc/hosts dosyanızı değiştirin. Yerel IP adresimi kullandım.

IPAddress    Hostname     Alias 
-----------  -------------------------- ------------------ 
192.168.1.1  www.example.com    example.com 
192.168.1.1  www.john.example.com   john.example.com 
192.168.1.1  www.jane.example.com   jane.example.com 

Web tarayıcınız world wide web bakarak önce /etc/hosts dosyayı kontrol edecektir.

verildiği takdirde sonraki tüm Apache konfigürasyon dosyaları (httpd.conf, apache2.conf, ports.conf, conf.d/*) geçmesi ve :80 liman olmak zorunda değildir (komut NameVirtualHost *:80 verilir tam olarak bir dosyada emin olun ancak Birden fazla kez this problem alırsınız. Mayın, /etc/apache2/ports.conf'da yayınlandı, bu yüzden eğer zorundaysanız, oraya koyun. Son olarak, Apache yapılandırma dosyanızı güncelleyin (benimki /etc/apache2/sites-available/default idi).

<VirtualHost *:80> 
    ServerName www.example.com 
    ServerAlias example.com 
    DocumentRoot /var/www 
</VirtualHost> 

<VirtualHost *:80> 
    ServerName www.john.example.com 
    ServerAlias john.example.com 
    DocumentRoot /var/www/john 
</VirtualHost> 

<VirtualHost *:80> 
    ServerName www.jane.example.com 
    ServerAlias jane.example.com 
    DocumentRoot /var/www/jane 
</VirtualHost> 

Son adım olarak, aşağıdaki komut göndererek Apache web sitesi eklediğiniz gerekebilir

(tek tek web siteleri için ayrı dosyalar halinde bütün sites-available/default web sitelerini değil verirsen bu adım gerekli değildir).

# a2ensite www.example.com 
# a2ensite www.john.example.com 
# a2ensite www.jane.example.com 

Bunu yaptıktan sonra john.example.com/var/www/john gidecek. Bu dizin daha sonra kök dizini olarak davranır ve john artık www'a erişemez ve bu nedenle /var/www/jane'a erişemez.

Benzer şekilde, jane.example.com bunu yaptıktan sonra /var/www/jane'a gider. Bu dizin daha sonra kök dizini olarak davranır ve jane artık www'a erişemez ve bu nedenle /var/www/john'a erişemez. Sembolik bağlantıları ile

kapalı --by default-- ne Bu beni benim hosts dosyasını değiştirmek için unuttum unutmayın yardımcı dizinleri birbirlerine

+0

erişmek mümkün olacak. Geçmişten teşekkürler dostum. –

+0

@MeowMix sevindim En az bir kişiye yardım edebilirim – puk

+1

Komut 'a2ensite example.com', site-available/example.com'dan' site-enabled/example.com''ya sembolik link yaratır, karşıt komut 'a2dissite example.com ', bunu devre dışı bırakırdı. – Honza