2010-02-09 14 views
5

Próbuję hostować dwie strony internetowe za pomocą Apache z tego samego serwera Ubuntu. Mam jeden adres IP i mam tylko jedną domenę (która rozwiązuje adres IP). Tak więc chcę, aby żądania dotyczące nazwy domeny podawały jedną stronę, i żąda adresu IP, aby podać drugą.Obsługa dwóch stron internetowych z Apache z jedną nazwą domeny i pojedynczym adresem IP

Mam dowiązania symboliczne w/etc/apache2/sites-enabled do dwóch plików, wskazując na konfigurację dla moich dwóch witryn.

Jeden zawiera:

<VirtualHost 1.2.3.4:80> 
    ServerName 1.2.3.4 
    stuff 
</VirtualHost> 

natomiast druga zawiera

<VirtualHost domain.net:80> 
    ServerName domain.net 
    stuff 
</VirtualHost> 

Jednak, kiedy zaczynają Apache, pojawia się następujący komunikat:

[warn] VirtualHost 1.2.3.4:80 overlaps with VirtualHost domain.net:80, the first has precedence, perhaps you need a NameVirtualHost directive 

i kiedy momencie mój przeglądarka na stronie domain.net lub 1.2.3.4 Otrzymuję witrynę, którą chcę skojarzyć z adresem IP.

Jeśli usuniemy dowiązanie symboliczne, to wskazanie przeglądarki pod nazwą domeny lub adresem IP będzie jedyną aktywną witryną. (Jak można mieć nadzieję.)

Jak rozumiem, oba pliki konfiguracyjne w witrynach obsługujących są ładowane jednocześnie, a ten zawierający adres IP atakuje ten, który zawiera nazwę domeny. Ostrzeżenie sugeruje, patrząc na dyrektywę NameVirtualHost, ale cała pomoc, którą mogę znaleźć w Internecie, odnosi się do przypadków, w których masz dwie nazwy domen wskazujące na ten sam adres IP.

Jak zawsze, bardzo cenna byłaby pomoc lub porada.

(Na co warto, strony internetowe są zarówno Rails aplikacji, a ja wdrażania przy użyciu pasażera, ale nie sądzę, że ważne jest tutaj).

+0

FYI, pytania takie jak te są najlepiej służył na serverfault.com –

Odpowiedz

9

To jak to zrobić:

NameVirtualHost 1.2.3.4:80 

<VirtualHost 1.2.3.4:80> 
    ServerName localhost 
    DocumentRoot /var/www/default 
</VirtualHost> 

<VirtualHost 1.2.3.4:80> 
    ServerName mydomain.net 
    DocumentRoot /var/www/mydomain 
</VirtualHost> 

Apache szuka odpowiedniego wirtualnego hosta dla każdego żądania. Jeśli nie znajdzie takiego, który pasuje do ServerName lub któregokolwiek z, to zajmuje pierwsze. Nie ma znaczenia, co użyjesz dla ServerName w pierwszym VirtualHost, ponieważ zawsze będzie używany, jeśli żaden z pozostałych VirtualHosts nie pasuje.

+0

Dude, bardzo dziękuję. – grifaton

+0

Dziękuję, dziękuję, dziękuję! Próbowałem dowiedzieć się, jak powstrzymać Apache od podawania losowych treści, gdy ktoś robi żądanie IP i teraz wiem. :) – johnjohn

+1

Użyłeś jednego pliku virtualhost dla 2 domen? – Alucard

0

Upewnij się, że instrukcje

NameVirtualHost *:80 

w /etc/apache2/ports.conf

4

miał ten problem, tutaj jest to, co robiłam:

Edycja httpd.conf

sudo vi /etc/apache2/httpd.conf 

Dodaj ten wiersz

NameVirtualHost *:80 

UWAGA: Można wymienić *: 80 z your_ip_address: 80

teraz utworzyć plik konfiguracyjny domeny. Używam domain_name.com

sudo vi /etc/apache2/sites-available/domain.com 

Dodaj do tego pliku

<VirtualHost *:80> 
    ServerAdmin [email protected] 
    ServerName www.domain.com 
    ServerAlias domain.com 
    DocumentRoot /var/www/domain.com/public_html/ 
    ErrorLog /var/www/domain.com/logs/error.log 
    CustomLog /var/www/domain.com/logs/access.log combined 
</VirtualHost> 

upewnij się, że katalogi w config domain.com istnieje

/var/www/domain.com/public_html/ 
/var/www/domain.com/logs 

UWAGA: należy użyć polecenia mkdir jak to w razie potrzeby

sudo mkdir /var/www/domain.com/public_html/ 
sudo mkdir /var/www/domain.com/logs 

Teraz musimy włączyć nowy plik konfiguracyjny jak ten

sudo a2ensite domain.com 

Powinieneś zobaczyć ogłoszono restart apache, użyj polecenia

/etc/init.d/apache2 restart 

Teraz musimy plik testowy, aby zobaczyć

sudo vi /var/www/domain.com/public_html/index.html 

Dodaj tekst

Hello domain.com 

Otwórz przeglądarkę internetową i przejdź do nowej domeny

http://domain.com 
Powiązane problemy