Quantcast
Channel: WampServer - WampServer Francais
Viewing all articles
Browse latest Browse all 3463

Accès aux sites locaux depuis réseau ou Internet (Pas de réponses)

$
0
0
Bonjour,

Des questions ont été posées quant à l'accès aux sites locaux, soit depuis un réseau interne, soit depuis l'extérieur (Internet).
Après de nombreux essais, je peux vous livrer les résultats.
Nota : Cette explication est écrite au fur et à mesure des essais, en temps réel.

Il est absolument impératif d'utiliser les VirtualHost.
Nous allons effectuer les essais avec deux sites locaux, en plus de localhost, ceux-ci ayant été effectués sous Wampserver 3.0.1, avec Apache 2.4.18 et PHP 5.6.16.
Dans le fichier wamp\bin\apache\apache2.4.18\conf\httpd.conf :
- Pour des raisons de sécurité d'accès, il ne faut pas modifier les autorisations à la racine du serveur et donc laisser :
<Directory />
  AllowOverride none
  Require all denied
</Directory>
- Mais autoriser les accès aux dossiers des sites locaux, donc avoir, pour le dossier correspondant à DocumentRoot :
# onlineoffline tag - don't remove
  Require all granted
</Directory>
Nota : Ceci correspond au passage Online par le menu Wampmanager. (Il faut auparavant valider Item menu En Ligne/Hors Ligne des Paramètres Wamp)

On verra par la suite que l'on pourra limiter à certains cette autorisation d'accès à tous.

Pour illustrer l'explication par des exemples réels, dans le fichier wamp\bin\apache\apache2.4.18\conf\extra\httpd-vhosts.conf, il y a (entre autres) les VirtualHost suivant :
<VirtualHost *:80>
	ServerName localhost
	DocumentRoot j:/wamp/www
	<Directory  "j:wamp/www/">
		Options Indexes Includes FollowSymLinks MultiViews
		AllowOverride All
		Require local
	</Directory>
</VirtualHost>

<VirtualHost *:80>
   ServerName phottello
   VirtualDocumentRoot g:/www/phottello
  <Directory "g:/www/phottello/">
    Options Indexes Includes FollowSymLinks MultiViews
    AllowOverride all
    Require all granted
  </Directory>
</VirtualHost>

<VirtualHost *:80>
   ServerName photos
   DocumentRoot j:/wamp/www/photos
  <Directory "j:/wamp/www/photos/">
    Options Indexes Includes FollowSymLinks MultiViews
    AllowOverride all
    Require all granted
  </Directory>
</VirtualHost>
Les deux sites locaux phottello et photos sont exactement les mêmes, mais dans deux dossiers différents :
- phottello dans un dossier hors de l'arborescence du serveur (g:\www\)
- photos dans un dossier situé dans le dossier du serveur http (j:\wamp\www\)
Tous les deux autorisant l'accès à tous le monde, mais localhost n'étant, par sécurité, accessible qu'en local.

Ceal donne, dans le fichier C:\Windows\System32\drivers\etc\hosts :
127.0.0.1 localhost
127.0.0.1 phottello
127.0.0.1 photos

::1 localhost
::1 phottello
::1 photos

--- On démarre Wampserver
Les deux hôtes virtuels "phottello" et "photos" sont, bien sûr, accessibles en local sans aucun problème par (http://phottello/) ou (http://photos/), mais le sont-ils depuis le réseau interne ?
- Remarque : Mon réseau interne est paramétré (Freebox Mini 4K) pour affecter des IP fixes aux périphériques connectés en fonction de leur adresse MAC. Par exemple mon smartphone Sony Xperia Z3 a l'IP 192.168.0.15, le PC serveur http a l'IP 192.168.0.10, etc.

- Depuis le smartphone, connecté en Wi-Fi et « données mobiles » désactivées, donc sur le réseau interne, avec Firefox sous Android, je tape :
- (http://192.168.0.10/photos/) et j'ai bien accès au site local (ÇA MARCHE !)
- (http://192.168.0.10/phottello/) et... erreur Not Found. The requested URL /phottello/ was not found on this server. (ÇA MARCHE PAS!)
Et pourtant, les deux sites locaux sont bien déclarés de la même manière !
Si on regarde les logs d'accès Apache, on peut voir qu'effectivement le ServerName photos est bien accessible :
192.168.0.15 - - [05/Jan/2016:15:31:00 +0100] "GET /photos/ HTTP/1.1" 200 3479
alors que le ServerName phottello est non trouvé avec erreur 404 :
192.168.0.15 - - [05/Jan/2016:15:31:55 +0100] "GET /phottello/ HTTP/1.1" 404 296

Bizarre, voire même étrange ! Qu'est-ce qui différentie les deux ServerName ?
Après moult réflexion, c'est leur localisation ou non dans l'arborescence du ServerName par défaut, comme noté plus avant :
- phottello - qui n'est pas accessible - dans un dossier hors de l'arborescence du serveur (g:\www\)
- photos - qui est accessible - dans un dossier situé dans le dossier du serveur http (j:\wamp\www\)

D'ailleurs, cela se voit dans une fenêtre de commande avec la commande nslookup, le ServerName photos est trouvé alors que phottello n'est pas trouvé :
C:\Windows\System32>nslookup photos
Serveur :   UnKnown
Address:  192.168.0.1
Nom :    photos.

C:\Windows\System32>nslookup phottello
Serveur :   UnKnown
Address:  192.168.0.1
*** UnKnown ne parvient pas à trouver phottello : Non-existent domain

Donc, premières conclusions :
- Il faut que le dossier du site local soit situé dans le dossier du serveur http wamp/www/
- Il faut que la commande nslookup ServerName ne retourne pas d'erreur.

Les mêmes essais d'accès à partir d'Internet (Wi-Fi désactivé et « Données Mobiles » activées sur le smartphone) en utilisant mon adresse IP WAN fixe, par exemple (http://88.190.208.237/photos/) ou (http://88.190.208.237/phottello/) donnent exactement les mêmes résultats.

Si on veut limiter les autorisations uniquement au réseau local, on met dans wamp\bin\apache\apache2.4.18\conf\httpd.conf
# onlineoffline tag - don't remove
	<RequireAny>
    Require local
    Require ip 192.168.0
  </RequireAny>
</Directory>
Ainsi que dans les VirtualHost
<VirtualHost *:80>
	ServerName localhost
	DocumentRoot j:/wamp/www
	<Directory  "j:wamp/www/">
		Options Indexes Includes FollowSymLinks MultiViews
		AllowOverride All
		Require local
	</Directory>
</VirtualHost>

<VirtualHost *:80>
   ServerName phottello
   VirtualDocumentRoot g:/www/phottello
  <Directory "g:/www/phottello/">
    Options Indexes Includes FollowSymLinks MultiViews
    AllowOverride all
    <RequireAny>
      Require local
      Require ip 192.168.0
    </RequireAny>
  </Directory>
</VirtualHost>

<VirtualHost *:80>
   ServerName photos
   DocumentRoot j:/wamp/www/photos
  <Directory "j:/wamp/www/photos/">
    Options Indexes Includes FollowSymLinks MultiViews
    AllowOverride all
    <RequireAny>
      Require local
      Require ip 192.168.0
    </RequireAny>
  </Directory>
</VirtualHost>
Là, les accès depuis l'extérieur (Internet) ne sont plus possible, on obtient l'erreur :
Forbidden
You don't have persission to access /photos/ on this server
et noté dans les logs Apache
[Tue Jan 05 16:13:19] [client 80.12.42.115:52331] AH01630: client denied by server configuration: J:/wamp/www/photos/
et erreur 403 not found :
80.12.42.115 - - [05/Jan/2016:16:13:19 +0100] "GET /photos/ HTTP/1.1" 403 306

--- Que faire si on ve veut pas mettre les sites locaux dans l'arborescence du serveur (wamp/www/) ?
On ne touche pas aux déclarations VirtualHost ci-dessus, mais, au lieu de mettre le dossier complet du site local dans wamp/www/, on va créer une jonction (lien symbolique sur un dossier) donc :
- Suppression totale du dossier et son contenu j:\wamp\www\photos\
- Création dans j:\wamp\www\ d'une jonction nommée photos pointant sur g:\www\phottello\
Ceci se fait dans une fenêtre de commande par :
mklink /D j:\wamp\www\photos g:\www\phottello
Avec le résultat :
C:\Windows\System32>mklink /D j:\wamp\www\photos g:\www\phottello
Lien symbolique créé pour j:\wamp\www\photos <<===>> g:\www\phottello
C:\Windows\System32>

--- Relançons Wampserver.
Depuis le smartphone, en Wi-Fi, donc sur réseau local, (http://photos/) donne bien accès au site local.

Attention, si dans la ligne Options du VirtualHost, on supprime FollowSymlinks, ça ne fonctionera plus, le rôle de cette options étant justement d'autoriser de suivre les liens symboliques.

Viewing all articles
Browse latest Browse all 3463

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>