2012-09-09 11 views
40

Verbringen Sie Stunden im Kreis nach jeder Anleitung, die ich im Internet finden kann.So führen Sie mehrere Websites auf einer Apache-Instanz aus

Ich mag zwei Seiten auf einer einzigen Apache-Instanz ausgeführt haben, so etwas wie diese - 192.168.2.8/site1 und 192.168.2.8/site2

Ich habe in Kreisen Runde gegangen, aber bei der Moment, ich habe zwei conf Dateien in 'sites-available (Symlink zu sites-enabled)', die this-

<VirtualHost *:2000> 

ServerAdmin [email protected] 
ServerName site1 
ServerAlias site1 

# Indexes + Directory Root. 
DirectoryIndex index.html 
DocumentRoot /home/user/site1/ 

# CGI Directory 
ScriptAlias /cgi-bin/ /home/user/site1/cgi-bin/ 

Options +ExecCGI 

# Logfiles 
ErrorLog /home/user/site1/logs/error.log 
CustomLog /home/user/site1/logs/access.log combined 

</VirtualHost> 

und

<VirtualHost *:3000> 

ServerAdmin [email protected] 
ServerName site2 
ServerAlias site2 

# Indexes + Directory Root. 
DirectoryIndex index.html 
DocumentRoot /home/user/site2/ 

# CGI Directory 
ScriptAlias /cgi-bin/ /home/user/site2/cgi-bin/ 

Options +ExecCGI 

# Logfiles 
ErrorLog /home/user/site2/logs/error.log 
CustomLog /home/user/site2/logs/access.log combined 

</VirtualHost> 
aussehen

http.conf sieht aus wie this-

NameVirtualHost *:2000 
NameVirtualHost *:3000 

Im Moment bin ich immer diese fehler-

[error] VirtualHost *:80 — mixing * ports and non-* ports with a NameVirtualHostaddress is not supported, proceeding with undefined results 

ports.conf sieht wie folgt aus - (obwohl noch keine Führungen keine Notwendigkeit erwähnt zu bearbeiten dies)

NameVirtualHost *:80 

Listen 80 
<IfModule mod_ssl.c> 
# If you add NameVirtualHost *:443 here, you will also have to change 
# the VirtualHost statement in /etc/apache2/sites-available/default-ssl 
# to <VirtualHost *:443> 
# Server Name Indication for SSL named virtual hosts is currently not 
# supported by MSIE on Windows XP. 
Listen 443 
</IfModule> 

<IfModule mod_gnutls.c> 
Listen 443 
</IfModule> 

Kann jemand einige einfache Anweisungen geben, um das zu laufen? Jeder Guide, den ich gefunden habe, sagt es anders und jeder führt zu anderen Fehlern. Ich mache offensichtlich etwas falsch, habe aber keine klare Erklärung gefunden, was das sein könnte.

Ich will nur eine Seite auf Port 2000 und die andere auf Port 3000 (oder was auch immer, nur diese Ports zum Testen ausgewählt).

Ich bin mit Ubuntu Server 12.04 ...

=============

EDIT

ein weiterer Leitfaden 'Gefolgt ...

ich habe jetzt diese bis in sites-set erhältlich:

<VirtualHost *:80> 
    DocumentRoot "/home/user/site1/" 
    ServerName 192.168.2.10/site1 
</VirtualHost> 

<VirtualHost *:80> 
    DocumentRoot "/home/user/site2/" 
    ServerName 192.168.2.10/site2 
</VirtualHost> 

gesetzt haben dies in apache2.conf:

ServerName site1 
ServerName site2 

Lassen Sie sich diese zu ports.conf hinzugefügt:

Listen 192.168.2.10:80 

==============

EDIT

Es funktioniert jetzt, ich legte dies in eine Conf-Datei in Site-aktiviert:

<VirtualHost *:81> 
    DocumentRoot "/home/user/site1/" 
    ServerName site1 
</VirtualHost> 

<VirtualHost *:82> 
    DocumentRoot "/home/user/site2/" 
    ServerName site2 
</VirtualHost> 

Ich habe dies in ports.conf:

Listen *:80 
Listen *:81 
Listen *:82 

Ich habe dies in Apache2.conf:

ServerName site1 
ServerName site2 

ich dies nicht in irgendwelchen Führern fand ich gerade habe es durch einen ganzen Tag lang von Versuch und Irrtum arbeiten, damit ich weiß nicht, ob dies eine gute Lösung ist. Aber es funktioniert zumindest so, wie ich es jetzt will.

+0

Es scheint mir, dass Sie virtuelle Hostnamen in NameVirtualHost angeben müssen. –

+0

Prost, ich habe viele Dinge in dieser Richtung ausprobiert. Kannst du genauer sagen, was ich versuchen sollte? – Exbi

+0

Nachdem ich einen ganzen Tag versucht habe, das zu funktionieren, bin ich endlich über die Antwort gestolpert lol. Ich fühle mich geistig ausgelaugt, ich gehe ins Bett. Ich bezweifle, dass meine zweifelhafte Apache Hack-Lösung für jeden von Interesse sein würde, aber ich werde es am Ende meiner Frage bearbeiten. – Exbi

Antwort

62

Ihre Frage ist ein paar verschiedene Konzepte zu mischen. Sie haben damit begonnen zu sagen, dass Sie Websites auf demselben Server mit derselben Domäne, aber in verschiedenen Ordnern ausführen möchten. Dies erfordert keine spezielle Einrichtung. Sobald Sie die einzelne Domäne ausführen, erstellen Sie nur Ordner unter dieser Docroot.

Basierend auf dem Rest Ihrer Frage, was Sie wirklich tun möchten, ist die Ausführung verschiedener Websites auf dem gleichen Server mit ihren eigenen Domänennamen.

Die beste Dokumentation, die Sie zu dem Thema finden, ist die virtual host Dokumentation im Apache-Handbuch.

Es gibt zwei Arten von virtuellen Hosts: name-basierte und IP-basierte. Namensbasiert ermöglicht es Ihnen, eine einzelne IP-Adresse zu verwenden, während IP-basiert für jede Site eine andere IP erfordert. Basierend auf Ihrer obigen Beschreibung möchten Sie namensbasierte virtuelle Hosts verwenden.

Der anfängliche Fehler, den Sie bekommen haben, war aufgrund der Tatsache, dass Sie andere Ports als die NameVirtualHost Linie verwendet haben. Wenn Sie wirklich möchten, dass Standorte von anderen Ports als 80 bedient werden, müssen Sie für jeden Port einen NameVirtualHost Eintrag haben.

Angenommen, Sie beginnen bei Null, das ist viel einfacher als es scheint.

Als Erstes müssen Sie Apache mitteilen, dass Sie namensbasierte virtuelle Hosts verwenden werden.

NameVirtualHost *:80 

Nun, da Apache weiß, was Sie tun möchten, können Sie Setup Ihre vHost Definitionen:

<VirtualHost *:80> 
    DocumentRoot "/home/user/site1/" 
    ServerName site1 
</VirtualHost> 

<VirtualHost *:80> 
    DocumentRoot "/home/user/site2/" 
    ServerName site2 
</VirtualHost> 

Beachten Sie, dass Sie so viele Seiten laufen können, wie Sie auf dem gleichen Port möchten. Die ServerName unterscheidet sich, um dem Apache mitzuteilen, welchen vhost er verwenden soll. Die ServerName Direktive ist immer der Domain/Hostname und sollte niemals einen Pfad enthalten.

Wenn Sie Websites auf einem anderen Port als 80 ausführen möchten, müssen Sie beim Zugriff auf die Site immer die Portnummer in die URL aufnehmen. Also anstatt zu http://example.com gehen Sie würden gehen müssen, um zu http://example.com:81

+0

können Sie bitte den Fall für den Port anders als 80 erarbeiten. Ich bin wirklich verwirrt bei der Umsetzung dieser. :) – user79307

+1

@accssharma Standardmäßig Apache (und alle anderen Web-Server-Software) hört auf Verbindungen auf Port 80. Aus diesem Grund sind Browser zum Anschluss an Port 80 beim Anfordern von Websites codiert. Wenn Sie eine Website auf einem anderen Port als 80 ausführen, müssen Ihre Benutzer beim Anfordern der Site immer die Portnummer angeben. Ich empfehle dringend dagegen. – bradym

+0

@accssharma Wenn Sie eine Site auf einem anderen Port als 80 ausführen möchten, benötigen Sie eine NameVirtualHost-Zeile, die den Port angibt, und dann VirtualHost-Container, die denselben Port angeben. Im Grunde kopiere, was ich oben habe und ersetze 80 durch den Port, an dem du die Seite betreiben willst. – bradym

3

Ja mit Virtual Host können Sie so viele parallele Programme, wie Sie wollen:

öffnen

/etc/httpd/conf/httpd.

conf
Listen 81 
Listen 82 
Listen 83 

<VirtualHost *:81> 
    ServerAdmin [email protected] 
    DocumentRoot /var/www/site1/html 
    ServerName site1.com 
    ErrorLog logs/site1-error_log 
    CustomLog logs/site1-access_log common 
    ScriptAlias /cgi-bin/ "/var/www/site1/cgi-bin/" 
</VirtualHost> 

<VirtualHost *:82> 
    ServerAdmin [email protected] 
    DocumentRoot /var/www/site2/html 
    ServerName site2.com 
    ErrorLog logs/site2-error_log 
    CustomLog logs/site2-access_log common 
    ScriptAlias /cgi-bin/ "/var/www/site2/cgi-bin/" 
</VirtualHost> 

<VirtualHost *:83> 
    ServerAdmin [email protected] 
    DocumentRoot /var/www/site3/html 
    ServerName site3.com 
    ErrorLog logs/site3-error_log 
    CustomLog logs/site3-access_log common 
    ScriptAlias /cgi-bin/ "/var/www/site3/cgi-bin/" 
</VirtualHost> 

Starten Sie Apache

service httpd restart

Sie können jetzt beziehen Standort1:

http://<ip-address>:81/ 
http://<ip-address>:81/cgi-bin/ 

Site2:

http://<ip-address>:82/ 
http://<ip-address>:82/cgi-bin/ 

Site3:

http://<ip-address>:83/ 
http://<ip-address>:83/cgi-bin/ 

Wenn Pfad in jedem Skript nicht fest einprogrammiert wird, dann sollten Sie Ihre Webseiten nahtlos arbeiten.

Verwandte Themen