Permet de créer par exemple http://www.monsite.com/doc pointant autre part que le répertoire de base du site
Dans l'exemple ci-dessous on pourra en allant sur http://www.monsite.com/doc voir le contenu de /usr/share/doc
Vérifier que le fichier de configuration apache /etc/httpd/conf/httpd.conf
contienne la ligne suivante :
grep Include /etc/httpd/conf/httpd.conf
Créer par exemple un fichier /etc/httpd/conf.d/doc.conf
et insérer les lignes suivantes :
Alias /doc /usr/share/doc <Directory "/opt/repo"> Options Indexes FollowSymLinks MultiViews Order allow,deny Allow from all AllowOverride None </Directory>
Explication :
Exemple pour apache sous Windows :
alias /doc "C:\documents" <Directory "C:\documents"> Options Indexes MultiViews FollowSymLinks AllowOverride AuthConfig Order deny,allow Allow from all Deny from all </Directory>
Dans l'exemple ci-dessous nous autorisons l'accès http://www.monsite.com/doc uniquement aux adresses locales (127.0.0.0) et au réseau 192.168.20.0 :
Alias /doc "/usr/share/doc/" <Directory "/usr/share/doc/"> Options Indexes MultiViews FollowSymLinks AllowOverride None Order deny,allow Deny from all Allow from 127.0.0.0/255.0.0.0 ::1/128 192.168.20 </Directory>
Dans l'exemple ci-dessous l'accès à http://www.monsite.com/doc sera restreint par un mot de passe :
Il faut éditer la configuration ainsi :
Alias /doc "/usr/share/doc/" <Directory "/usr/share/doc/"> Options Indexes MultiViews FollowSymLinks AllowOverride AuthConfig Order deny,allow Allow from all Deny from all </Directory>
puis créer un fichier /usr/share/doc/.htaccess
avec le contenu suivant :
AuthUserFile "/etc/apache2/.htpasswd" AuthName "Acces /doc Restreint" AuthType Basic require valid-user
Pour terminer il faut créer le fichier mot de passe par la commande suivante :
htpasswd -c /etc/apache2/.htpasswd user
Pour ajouter un autre utilisateur :
htpasswd /etc/apache2/.htpasswd user2
Pour effacer l'utilisateur user2:
htpasswd -D /etc/apache2/.htpasswd user2
Les hébergements virtuels par IP utilisent l'adresse IP de la connexion afin de déterminer quel serveur virtuel doit répondre. Par conséquent, vous devez disposer d'adresses IP différentes pour chaque nom de domaine complet (FQDN) que vous hébergez. Avec un hébergement virtuel par nom, le serveur s'appuit sur les informations transmises par le client dans les en-têtes HTTP de ses requêtes. La technique présentée ici vous permet de disposer de serveurs virtuels différents partagés sur une même adresse IP.
Pour l'activer, nous allons indiquer que les sites virtuels vont écouter sur n'importe quelle IP sur le port 80.
Nous allons éditer le fichier /etc/httpd/conf/httpd.conf et décommenter ou ajouter la ligne suivante :
NameVirtualHost *:80
Nous allons aussi créer un répertoire dans lequel on déposera un fichiers de configuration par site Web. Ajouter la ligne suivante :
Include vhost/*.conf
Créer le répertoire
mkdir /etc/httpd/vhost
Dans cet exemple nous allons 2 sites :
Nous allons créer les répertoires de nos deux sites :
mkdir /var/www/www.siteweb{1,2}.com
Créer et éditer le fichier /etc/httpd/vhost/www.siteweb1.com.conf
et insérer par exemple les lignes suivantes :
<VirtualHost *:80> ServerName www.siteweb1.com ServerAlias www.monsite1.com *.messites1.com ServerAdmin webmaster@localhost DocumentRoot /var/www/www.siteweb1.com DirectoryIndex index.html index.htm index.php <Directory /var/www/www.siteweb1.com> Options Indexes FollowSymLinks MultiViews AllowOverride None Order allow,deny allow from all </Directory> </VirtualHost>
Explication :
*:80
doit correspondre exactement à celle saisie pour la directive NameVirtualHost *:80
Faire la même chose pour le second site mais remplacer www.siteweb1.com par www.siteweb2.com
Pour terminer redémarrer apache :
/etc/init.d/httpd restart
Pour tester il faut que les enregistements de www.siteweb1.com et www.siteweb2.com soient effectuer sur un serveur DNS. Si ce n'est pas le cas, la configuration peut être testée en éditant préalablement un fichier nommé hosts
sur votre poste de travail.
C:\WINDOWS\system32\drivers\etc\hosts
/etc/hosts
Ajouter par exemple les lignes suivantes (admettons que l'ip de votre site est 192.168.20.45) :
192.168.20.45 www.siteweb1.com 192.168.20.45 www.siteweb2.com 192.168.20.45 www.montsite1.com 192.168.20.45 www.montsite2.com
Il ne reste plus qu'a créer une page index.html
et tester dans votre navigateur.
Le module mod_rewrite.so doit être chargé au démarrage d'apache et la directive suivante doit être présente pour toute RewriteRules:
RewriteEngine On
Les règles de réécriture utilisent les expressions régulières
[L]: Celui-ci vous semble familier, comme nous l’avons vu dans notre précédent exemple. Il mérite toutefois une précision. Lorsque le module de réécriture est actif, les règles sont lues séquentiellement et l’URL est comparée ligne à ligne avec le premier argument de celles-ci jusqu’à la dernière. Si une réécriture est effectuée, c’est la forme réécrite qui sera utilisée en entrée pour les règles suivantes. Le flag [L] permet de sortir prématurément de la boucle.
Un autre exemple serait, en début d’une liste de règles : Nous introduisons ici un nouveau concept, à savoir un second argument vide (ou presque, car il consiste en un seul caractère « - » ) . Cette règle particulière implique qu’il n’y a pas de réécriture, l’URL étant passée sans modification aucune. Elle signale au serveur Apache de passer toutes les URL d’images gif ou jpg sans réécriture, ni traitement successif.
[R] [R=code]: Dans ces deux formes une redirection est effectuée. Si l’argument code n’est pas précisé, une redirection 302 (déplacé temporairement) est effectuée. Si vous souhaitez faire savoir au navigateur/robot qu’une page a été remplacée définitivement, utiliser le code 301 comme dans : RewriteRule ^ancien\.html$ http://domaine.tld/nouveau.html [R=301,L] Dans ce cas précis, une réécriture “externe” s’impose (utilisation de http://...) Vous voyez ci-dessus que nous avons combiné deux flags en les séparant par une virgule.
[F]: Forbidden - interdit. Retourne un code 403, par exemple : RewriteRule ^secret.html$ - [F] ( pas de réécriture vu le deuxième argument - )
[NC]: NoCase, ou « insensible à la casse ». La règle suivante : RewriteRule ^script\.php$ programme.php [NC,L] S’appliquera aussi bien à script .php, SCRIPT.PHP ou ScRiPt .PhP
[G]: Gone. Cette page n’existe plus et retourne une entête http 410
[N]: Force l’analyse et l’exécution de toutes les règles en repartant du début de la liste. Ici encore, comme expliqué plus haut ([L]), c’est l’URL modifiée après exécution de la dernière règle qui est utilisée en entrée, et non l’URL originelle. Attention aux boucles infinies !!
[C]: Chain, chaînage avec la ou les règles suivantes jusqu’à la première règle ne se terminant pas par [C] Apache interprète ce flag comme suit : s’il y a réécriture (la règle est vérifiée), la règle suivante est exécutée avec la chaîne réécrite en entrée. Si la règle ne se vérifie pas, toutes les règles qui suivent jusqu’à la première ne comportant pas le flag [C] ne sont pas appliquées.
[QSA]: Query String Append. Rajoute le QUERY_STRING à la fin de l’expression, après la réécriture. A réserver pour la dernière règle de réécriture. Utilisée le plus souvent avec le flag [L], comme dans [QSA,L]
Permet d’échapper tout caractère qui suit et lui ôter sa signification particulière, par exemple \. : \
Pour rediriger par exemple http://monsite.com/index.htm vers http://monsite.com/index.html (hors directive <Directory>)
RewriteRule ^/index\.htm$ /index.html [L]
Pour réecrire par exemple http://monsite.com/test/index.htm en http://monsite.com/index.html
<Directory /var/www/test> ... RewriteEngine On RewriteBase / RewriteRule ^index\.htm$ index.html [L] </Directory>
Pour réecrire http://monsite.com/test/uk* et http://monsite.com/test/fr* en http://monsite.com/test/page.htm (* etant toute les pages derrières l'url)
<Directory /var/www/test> ... RewriteEngine On RewriteBase / RewriteRule ^(fr)|(uk)(.*)$ /test/page.htm [L] </Directory>
Pour réecrire par exemple http://nimportequelsite2006.com/ en http://nimportequelsite2007.com/
<Directory /var/www/test> ... RewriteEngine On RewriteBase / RewriteCond %{HTTP_HOST} ^(.*)2006(.*)$ RewriteRule ^(.*)$ http://%12007%2/test/page.htm [R,L] </Directory>
Admettons la configuration suivante sur le site www.zikossworld.com, on force toutes les urls http://www.zikossworld.com/dokuwiki à être ré-ecrites en https://wiki.zikossworld.com/ :
<Directory /var/www/test> RewriteEngine On RewriteCond %{SERVER_PORT} !^443$ RewriteCond %{REQUEST_URI} ^/dokuwiki(.*) RewriteRule .* https://wiki.zikossworld.com/%{REQUEST_URI} [QSA,R=301,L] </Directory>
Si on veux juste sécuriser en HTTPS la partie /admin de son site :
<Directory /var/www/test> RewriteEngine On RewriteCond %{SERVER_PORT} !^443$ RewriteCond %{REQUEST_URI} ^/admin(.*) RewriteRule .* https://%{HTTP_HOST}%{REQUEST_URI} [QSA,R=301,L] </Directory>
Nous allons configurer ici apache de façon suivante : Lorsque qu'on tape http://monserveur/siteport8083/
que l'on arrive sur http://10.0.0.2:8083
. Ceci permet de passer par le port 80 du serveur pour atteindre un site sur le port 8083.
Les modules suivant doivent être chargés :
LoadModule proxy_module modules/mod_proxy.so LoadModule proxy_ajp_module modules/mod_proxy_ajp.so LoadModule proxy_balancer_module modules/mod_proxy_balancer.so LoadModule proxy_connect_module modules/mod_proxy_connect.so LoadModule proxy_ftp_module modules/mod_proxy_ftp.so LoadModule proxy_http_module modules/mod_proxy_http.so LoadModule rewrite_module modules/mod_rewrite.so
Modifier la configuration apache ainsi:
# Activer les règles de reécriture RewriteEngine on RewriteRule ^/siteport8083(.*) http://10.0.0.2:8083$1 [P,L] # Alias proxy ProxyPass /siteport8083 http://10.0.0.2:8083 ProxyPassReverse /siteport8083 http://10.0.0.2:8083 # Activer le proxy <IfModule mod_proxy.c> ProxyRequests On ProxyVia On </IfModule>
Pour relayer simplement la requêtes vers un tomcat en http
ProxyPass /test http://10.0.0.2:8383/test ProxyPassReverse /test http://10.0.0.2:8383/test # Il est parfois nécessaire d'ajouter la directive ci-dessous s'il y a une gestion de cookies sur le site. ProxyPassReverseCookieDomain 10.0.0.2:8383 www.site.com
Pour relayer vers plusieurs Tomcat avec équilibrage de charge :
<Proxy balancer://tomcatservers> BalancerMember http://10.0.0.2:8383 retry=60 BalancerMember http://10.0.0.3:8384 retry=60 </Proxy> <Location /test> Allow From All ProxyPass balancer://tomcatservers/test stickysession=JSESSIONID nofailover=off </Location>
Se positionner dans le répertoire de configuration apache :
cd /etc/httpd/conf/
Pour générer le certificat voir : Créer un certificat SSL avec OpenSSL
Listen 443 AddType application/x-x509-ca-cert .crt AddType application/x-pkcs7-crl .crl SSLPassPhraseDialog builtin SSLSessionCache "shmcb:/var/log/httpd/ssl_scache(512000)" SSLSessionCacheTimeout 300 SSLMutex "file:/var/log/httpd/ssl_mutex" <VirtualHost *:443> DocumentRoot "/ap01/sigfod1/appl/httpd-2.2.6/htdocs" ServerName www.example.com:443 ServerAdmin you@example.com ErrorLog "/ap01/sigfod1/appl/httpd-2.2.6/logs/error_log" TransferLog "/ap01/sigfod1/appl/httpd-2.2.6/logs/access_log" SSLEngine on SSLCipherSuite ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP:+eNULL SSLCertificateFile "/etc/httpd/conf/server.crt" SSLCertificateKeyFile "/etc/httpd/conf/server.key" CustomLog "/var/log/httpd/ssl_request_log" \ "%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b" </VirtualHost>
Pour afficher correctement les accents dans Apache, ajouter les lignes suivantes
Pour l'UTF-8 :
AddDefaultCharset UTF-8 IndexOptions Charset=UTF-8
Pour l'ISO-8859-1
Affichage par défaut AddDefaultCharset ISO-8859-1 IndexOptions Charset=ISO-8859-1
Note : IndexOptions permet d'afficher correctement les accents lorsqu'Apache liste un répertoire.