2012-09-09 5 views
40

J'ai passé des heures à tourner en suivant tous les guides que je peux trouver sur le net.Comment exécuter plusieurs sites sur une instance apache

Je veux avoir deux sites en cours d'exécution sur une seule instance apache, quelque chose comme ça - 192.168.2.8/site1 et 192.168.2.8/site2

J'ai tourne en rond, mais le moment où j'ai deux fichiers de configuration dans 'sites disponibles (lien symbolique vers les sites activés)' qui ressemblent à 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> 

et

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

NameVirtualHost *:2000 
NameVirtualHost *:3000 

Au moment que je reçois ce ERROR-

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

Ports.conf ressemble à ceci - (même si aucun guide ont mentionné qu'il soit nécessaire de modifier this)

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> 

Quelqu'un peut-il donner des instructions simples pour que cela fonctionne? Chaque guide que je ai trouvé dit de le faire d'une manière différente, et chacun conduit à des erreurs différentes. Je fais évidemment quelque chose de mal, mais je n'ai trouvé aucune explication claire de ce que cela pourrait être. Je veux juste un site accessible sur le port 2000 et l'autre accessible sur le port 3000 (ou quoi que ce soit, juste choisi ces ports pour tester avec).

Je suis en cours d'exécution serveur Ubuntu 12.04 ...

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

EDIT

succédèrent 'guide' ...

Je suis maintenant le mettre en place dans les sites disponibles:

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

ont mis cela en apache2.conf:

ServerName site1 
ServerName site2 

ont ajouté à cette ports.conf:

Listen 192.168.2.10:80 

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

EDIT

Il travaille maintenant, je mettre ceci dans un fichier conf dans site-enabled:

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

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

Je l'ai dans ports.conf:

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

Je l'ai dans apache2.conf:

ServerName site1 
ServerName site2 

Je ne trouve pas cela dans tous les guides que je viens de me faire fonctionner à travers toute une journée d'essais et d'erreurs, donc je ne sais pas si cela est une bonne solution. Mais ça fonctionne au moins comme je le veux maintenant.

+0

Il me semble que vous devez spécifier des noms d'hôtes virtuels dans NameVirtualHost. –

+0

Salut, j'ai essayé beaucoup de choses dans ce sens, pouvez-vous être plus précis sur ce que je devrais essayer de mettre là-dedans? – Exbi

+0

Après une journée entière à essayer de faire fonctionner cela, j'ai finalement trébuché sur la réponse lol. Je me sens épuisé mentalement, je vais me coucher. Je doute que ma solution douteuse de piratage d'apache soit intéressante pour n'importe qui, mais je l'éditerai à la fin de ma question. – Exbi

Répondre

62

Votre question mélange plusieurs concepts différents. Vous avez commencé en disant que vous vouliez exécuter des sites sur le même serveur en utilisant le même domaine, mais dans des dossiers différents. Cela ne nécessite aucune configuration spéciale. Une fois que le seul domaine est en cours d'exécution, il vous suffit de créer des dossiers sous ce docroot. En fonction du reste de votre question, ce que vous voulez vraiment faire, c'est exécuter différents sites sur le même serveur avec leurs propres noms de domaine.

La meilleure documentation que vous trouverez sur ce sujet est la documentation virtual host du manuel apache.

Il existe deux types d'hôtes virtuels: les noms et les adresses IP. Le nom basé vous permet d'utiliser une seule adresse IP, tandis que IP nécessite une adresse IP différente pour chaque site. En fonction de votre description ci-dessus, vous souhaitez utiliser des hôtes virtuels basés sur le nom. L'erreur initiale que vous obteniez était due au fait que vous utilisiez des ports différents de la ligne NameVirtualHost. Si vous voulez vraiment que les sites soient desservis à partir de ports autres que 80, vous devez avoir une entrée NameVirtualHost pour chaque port.

En supposant que vous démarrez à partir de zéro, c'est beaucoup plus simple que cela puisse paraître. La première chose que vous devez faire est de dire à apache que vous allez utiliser des hôtes virtuels basés sur le nom.

NameVirtualHost *:80 

Maintenant que apache sait ce que vous voulez faire, vous pouvez configurer vos définitions de vhost:

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

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

Notez que vous pouvez exécuter autant de sites que vous voulez sur le même port. Le ServerName étant différent est suffisant pour dire à Apache quel vhost utiliser. En outre, la directive ServerName est toujours le domaine/nom d'hôte et ne doit jamais inclure un chemin.

Si vous décidez d'exécuter des sites sur un port autre que 80, vous devrez toujours inclure le numéro de port dans l'URL lors de l'accès au site. Ainsi, au lieu d'aller à http://example.com vous devez aller à http://example.com:81

+0

pouvez-vous s'il vous plaît élaborer l'affaire pour le port autre que 80. Je suis vraiment confus dans la mise en œuvre de ce. :) – user79307

+1

@accssharma Par défaut, apache (et tous les autres logiciels de serveur Web) écoute les connexions sur le port 80. Pour cette raison, les navigateurs sont codés pour se connecter au port 80 lors de la demande de sites Web. Si vous exécutez un site Web sur un port autre que 80, vos utilisateurs devront toujours inclure le numéro de port lors de la demande du site. Je recommande fortement contre cela. – bradym

+0

@accssharma Si vous choisissez d'exécuter un site sur un port autre que 80, vous aurez besoin d'une ligne NameVirtualHost spécifiant le port, puis de conteneurs VirtualHost spécifiant ce même port. Fondamentalement, copier ce que j'ai ci-dessus et remplacer 80 avec le port où vous avez l'intention d'exécuter le site. – bradym

3

Oui avec l'hôte virtuel, vous pouvez avoir autant de programmes parallèles que vous voulez:

Ouvrir

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

Redémarrez apache

service httpd restart

Vous pouvez maintenant consulter 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/ 

Si le chemin est pas compilé dans un script puis vos sites Web devrait fonctionner de manière transparente.

Questions connexes