2012-09-09 8 views
40

Le ore passate vanno in circolo seguendo ogni guida che riesco a trovare sulla rete.Come eseguire più siti su un'istanza di apache

io voglio avere due siti in esecuzione su una singola istanza di apache, qualcosa di simile - 192.168.2.8/site1 e 192.168.2.8/site2

Vado in tondo, ma a Dal momento che ho due file conf in 'sites-available (link simbolico a siti abilitati)' che assomigliano a questo-

<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> 

e

<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> 

http.conf si presenta come questo-

NameVirtualHost *:2000 
NameVirtualHost *:3000 

Al momento sto ottenendo questo Error-

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

ports.conf assomiglia a questo - (anche se non guide hanno menzionato alcuna necessità di modificare questo)

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> 

Qualcuno può dare alcune semplici istruzioni per farlo funzionare? Ogni guida che ho trovato dice di farlo in un modo diverso, e ognuno porta a diversi errori. Ovviamente sto facendo qualcosa di sbagliato, ma non ho trovato una chiara spiegazione di ciò che potrebbe essere.

Voglio solo un sito accessibile sulla porta 2000 e l'altro accessibile sulla porta 3000 (o qualsiasi altra cosa, ho appena scelto quelle porte per testare con).

Io corro Ubuntu server 12.04 ...

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

EDIT

Seguita un altro 'guida' ...

ora ho impostato questo in siti-disponibili:

<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> 

ho posto questo apache2.conf:

ServerName site1 
ServerName site2 

hanno aggiunto questo per ports.conf:

Listen 192.168.2.10:80 

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

EDIT

Ora funziona, ho mettere questo in un file conf in abilitato al sito:

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

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

Ho questo in ports.conf:

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

Ho questo in apache2.conf:

ServerName site1 
ServerName site2 

non ho trovato questo in qualsiasi guide ho ottenuto che funziona attraverso un'intera giornata di tentativi ed errori in modo da non so se questa è una buona soluzione. Ma almeno sta funzionando come voglio ora.

+0

Mi sembra necessario specificare nomi host virtuali in NameVirtualHost. –

+0

Cheers, ho provato molte cose in questo senso, puoi essere più specifico su cosa dovrei provare a mettere lì? – Exbi

+0

Dopo un giorno intero cercando di farlo funzionare, finalmente mi sono imbattuto nella risposta lol. Mi sento svuotato mentalmente, vado a letto. Dubito che la mia dubbia soluzione di hacking potrebbe interessare a chiunque, ma la modifico fino alla fine della mia domanda. – Exbi

risposta

62

La tua domanda è mescolare alcuni concetti diversi. Hai iniziato dicendo che volevi eseguire siti sullo stesso server utilizzando lo stesso dominio, ma in diverse cartelle. Questo non richiede alcuna configurazione speciale. Una volta ottenuto il funzionamento del singolo dominio, è sufficiente creare cartelle in tale docroot.

In base al resto della domanda, ciò che si vuole veramente fare è eseguire vari siti sullo stesso server con i propri nomi di dominio.

La migliore documentazione disponibile sull'argomento è la documentazione virtual host nel manuale di apache.

Esistono due tipi di host virtuali: basati sui nomi e basati su IP. Basato su nome consente di utilizzare un singolo indirizzo IP, mentre su base IP richiede un IP diverso per ciascun sito. In base alla descrizione di cui sopra, si desidera utilizzare gli host virtuali basati sul nome.

L'errore iniziale che si stava verificando era dovuto al fatto che si stavano utilizzando porte diverse dalla linea NameVirtualHost. Se si desidera realmente che i siti siano serviti da porte diverse da 80, è necessario disporre di una voce NameVirtualHost per ciascuna porta.

Supponendo di iniziare da zero, questo è molto più semplice di quanto possa sembrare.

La prima cosa che devi fare è dire a apache che userai gli host virtuali basati sul nome.

NameVirtualHost *:80 

Ora che Apache sa che cosa si vuole fare, è possibile impostare le definizioni dei vhost:

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

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

Si noti che è possibile eseguire tutti i siti che si desidera sulla stessa porta. Il ServerName è diverso è sufficiente per dire ad Apache quale vhost usare. Inoltre, la direttiva ServerName è sempre il dominio/nomehost e non dovrebbe mai includere un percorso.

Se si decide di eseguire siti su una porta diversa da 80, sarà sempre necessario includere il numero di porta nell'URL quando si accede al sito. Così, invece di andare a http://example.com si dovrebbe andare a http://example.com:81

+0

puoi per favore elaborare il caso per il porto diverso da 80. Mi sto davvero confondendo nell'attuazione di questo. :) – user79307

+1

@accssharma Per impostazione predefinita, apache (e tutti gli altri software del server Web) sono in attesa di connessioni sulla porta 80. Per questo motivo, i browser sono codificati per connettersi alla porta 80 quando si richiedono siti Web. Se si esegue un sito Web su una porta diversa da 80, gli utenti dovranno sempre includere il numero di porta quando si richiede il sito. Raccomando fortemente contro questo. – bradym

+0

@accssharma Se si sceglie di eseguire un sito su una porta diversa da 80, è necessaria una riga NameVirtualHost che specifica la porta, quindi i contenitori VirtualHost che specificano la stessa porta. Fondamentalmente, copia quello che ho sopra e sostituisci 80 con la porta in cui intendi eseguire il sito. – bradym

3

Sì con Virtual Host si può avere il maggior numero di programmi paralleli come si desidera:

Aprire

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

Riavviare apache

service httpd restart

È ora possibile fare riferimento Site1:

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/ 

Se il percorso non è codificato in qualsiasi script poi i vostri siti web dovrebbe funzionare senza problemi.