web-dev-qa-db-fra.com

Comment exécuter plusieurs sites sur une instance Apache

J'ai passé des heures à tourner en rond après chaque guide que je peux trouver sur le net.

Je souhaite que deux sites s'exécutent sur une seule instance Apache, par exemple 192.168.2.8/site1 et 192.168.2.8/site2.

Je tourne en rond, mais pour le moment j’ai deux fichiers de configuration dans ‘sites-available (liens symboliques vers sites activés)’ qui ressemblent à ceci-

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

NameVirtualHost *:2000
NameVirtualHost *:3000

Au moment où je reçois cette erreur-

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

Ports.conf ressemble à ceci - (bien qu'aucun guide n'ait mentionné le besoin de l'éditer)

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 j'ai trouvé recommande de le faire différemment, et chacun entraîne des erreurs différentes. Je fais évidemment quelque chose de mal, mais je n'ai pas trouvé d'explication claire de ce que cela pourrait être.

Vous voulez juste un site accessible sur le port 2000 et l’autre sur le port 3000 (ou peu importe, choisissez simplement les ports à tester).

Je suis sous Ubuntu Server 12.04…

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

MODIFIER

Suivi un autre 'guide' ...

J'ai maintenant mis cela en place sur 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>

J'ai défini ceci dans Apache2.conf:

ServerName site1
ServerName site2

J'ai ajouté ceci à ports.conf:

Listen 192.168.2.10:80

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

MODIFIER

Cela fonctionne maintenant, je l'ai mis dans un fichier de configuration dans site-enabled:

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

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

J'ai ceci dans ports.conf:

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

J'ai ceci dans Apache2.conf:

ServerName site1
ServerName site2

Je ne l'ai pas trouvé dans les guides, je l'ai juste obtenu après une journée d'essais et d'erreurs, donc je ne sais pas si c'est une bonne solution. Mais ça marche au moins comme je le veux maintenant.

48
Exbi

Votre question mélange plusieurs concepts différents. Vous avez commencé par dire 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 domaine unique est en cours d'exécution, il vous suffit de créer des dossiers sous ce dossier racine.

En vous basant sur le reste de votre question, ce que vous voulez vraiment faire est d’exécuter différents sites sur le même serveur avec leurs propres noms de domaine.

La meilleure documentation que vous trouverez sur le sujet est la documentation hôte virtuel du manuel Apache.

Il existe deux types d'hôtes virtuels: basés sur le nom et basés sur IP. Basé sur le nom vous permet d'utiliser une seule adresse IP, alors que basé sur IP nécessite une adresse IP différente pour chaque site. Selon votre description ci-dessus, vous souhaitez utiliser des hôtes virtuels nommés.

L'erreur initiale que vous obteniez était due au fait que vous utilisiez des ports différents de la ligne NameVirtualHost. Si vous souhaitez réellement que les sites provenant de ports autres que 80 soient desservis, vous devez disposer d'une entrée NameVirtualHost pour chaque port.

En supposant que vous partiez de zéro, ceci est beaucoup plus simple qu'il n'y paraît.

La première chose à faire est de dire à Apache que vous allez utiliser des hôtes virtuels nommés.

NameVirtualHost *:80

Maintenant que Apache sait ce que vous voulez faire, vous pouvez configurer vos définitions 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 le souhaitez sur le même port. Le ServerName étant différent, il suffit d'indiquer à Apache quel vhost utiliser. De plus, la directive ServerName correspond toujours au domaine/nom d'hôte et ne doit jamais inclure de chemin.

Si vous décidez d'exécuter des sites sur un port autre que 80, vous devez 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 devrez vous rendre à http://example.com:81

70
bradym

Oui, avec Virtual Host, vous pouvez avoir autant de programmes parallèles que vous le souhaitez:

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émarrer Apache

service httpd restart

Vous pouvez maintenant vous référer à 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 chemin n’est codé en dur dans aucun script, vos sites Web devraient fonctionner de manière transparente.

5
Srihari Karanth