web-dev-qa-db-fra.com

Apache Virtual Host ne fonctionne pas correctement

J'ai lu beaucoup d'informations sur ce sujet partout sur Internet et je ne peux pas comprendre ce que je fais mal. J'essaie d'héberger deux sites Web sous des noms différents localement sous Windows 7 avec la fonctionnalité Apaches Virtual Hosting. C'est ce que j'ai déjà fait:

Dans le fichier httpd.conf, j'ai annulé la mise en commentaire de la ligne suivante, de sorte que le fichier de configuration de l'hôte virtuel soit inclus dans la séquence de configuration principale.

# Virtual hosts
Include conf/extra/httpd-vhosts.conf

Voici comment j'ai édité mon httpd-vhosts.conf:

#
# Virtual Hosts
#
# If you want to maintain multiple domains/hostnames on your
# machine you can setup VirtualHost containers for them. Most configurations
# use only name-based virtual hosts so the server doesn't need to worry about
# IP addresses. This is indicated by the asterisks in the directives below.
#
# Please see the documentation at 
# <URL:http://httpd.Apache.org/docs/2.2/vhosts/>
# for further details before you try to setup virtual hosts.
#
# You may use the command line option '-S' to verify your virtual Host
# configuration.

#
# Use name-based virtual hosting.
#
NameVirtualHost *:80

#
# VirtualHost example:
# Almost any Apache directive may go into a VirtualHost container.
# The first VirtualHost section is used for all requests that do not
# match a ServerName or ServerAlias in any <VirtualHost> block.
#
#<VirtualHost *:80>
#    ServerAdmin [email protected]
#    DocumentRoot "C:/Apache/docs/dummy-Host.localhost"
#    ServerName dummy-Host.localhost
#    ServerAlias www.dummy-Host.localhost
#    ErrorLog "logs/dummy-Host.localhost-error.log"
#    CustomLog "logs/dummy-Host.localhost-access.log" common
#</VirtualHost>
#
#<VirtualHost *:80>
#    ServerAdmin [email protected]
#    DocumentRoot "C:/Apache/docs/dummy-Host2.localhost"
#    ServerName dummy-Host2.localhost
#    ErrorLog "logs/dummy-Host2.localhost-error.log"
#    CustomLog "logs/dummy-Host2.localhost-access.log" common
#</VirtualHost>


<VirtualHost *:80>

 ServerName arterieur
 DocumentRoot "J:/webcontent/www20"

 <Directory "J:/webcontent/www20">
  Order allow,deny
  Allow from all
 </Directory>

</VirtualHost>

Comme vous pouvez le constater, j'ai commenté les exemples d'hôte virtuel et ajouté le mien (j'en ai créé un pour cet exemple). Je suis également sûr que J:\webcontent\www20 existe.

Enfin, j'ai édité le fichier Windows Host situé dans: C:\Windows\System32\drivers\etc\hosts, il ressemble maintenant à ceci:

# Copyright (c) 1993-2009 Microsoft Corp.
#
# This is a sample HOSTS file used by Microsoft TCP/IP for Windows.
#
# This file contains the mappings of IP addresses to Host names. Each
# entry should be kept on an individual line. The IP address should
# be placed in the first column followed by the corresponding Host name.
# The IP address and the Host name should be separated by at least one
# space.
#
# Additionally, comments (such as these) may be inserted on individual
# lines or following the machine name denoted by a '#' symbol.
#
# For example:
#
#      102.54.94.97     rhino.acme.com          # source server
#       38.25.63.10     x.acme.com              # x client Host

# localhost name resolution is handled within DNS itself.
#   127.0.0.1       localhost
#   ::1             localhost

    127.0.0.1   arterieur

Ensuite, j'ai redémarré Apache avec Apache Service Monitor, qui m'a donné l'erreur fatale suivante: The requested operation has failed!, j'ai essayé de consulter le fichier Apache/logs/error.log mais je n'ai pas consigné de journal. Je suppose qu'il enregistre uniquement le erreurs après le démarrage.

Est-ce que quelqu'un sait ce que je fais mal?

1
user29263

Testez votre configuration avec cette ligne de commande:

httpd -t

Cela indiquera toute erreur dans les fichiers de configuration.

Peut-être que vous recevez cette erreur: ServerName takes one argument, the Host name and port of the server.

Essayez de le configurer comme ceci:

ServerName arterieur.localhost

et ajoutez dans le fichier hosts:

127.0.0.1 arterieur.localhost

Cette manière est configurée de la même manière que ServerName.

Si cela ne fonctionne pas, utilisez ServerAlias au lieu de ServerName.

Et si cela ne fonctionne pas, vérifiez que votre service Apache n'est pas désactivé: ouvrez services.msc et vérifiez le service Apache, assurez-vous qu'il n'est pas désactivé. Il devrait être réglé sur Démarrage manuel ou automatique, selon votre environnement.

EDIT: Nous discutons maintenant avec un intervenant:

Le problème exact était que si vous exécutiez httpd par service, le processus ne disposait pas des autorisations nécessaires pour écrire sur le lecteur J:, mais lors de son exécution en ligne de commande, tout fonctionnait correctement.

Comme @Jori l'a dit, services.exe s'exécute sous SYSTEM utilisateur. Il semble donc que l'exécution de httpd par le service hérite des droits services.exe. Il a donc modifié J: autorisations de lecteur pour l'utilisateur. SYSTEM et a ensuite bien fonctionné.