Outils personnels

Mod Proxy : Différence entre versions

De wikiGite

(Création d'un virtual host sur le proxy)
 
(24 révisions intermédiaires par 4 utilisateurs non affichées)
Ligne 1 : Ligne 1 :
== Principe de fonctionnement en mode Reverse-Proxy ==
+
== Principe de fonctionnement ==
  
http://httpd.apache.org/docs/2.3/mod/mod_proxy.html
+
<u> Doc. Apache </u> : http://httpd.apache.org/docs/current/mod/mod_proxy.html
  
L'utilisation d'Apache mod_proxy (reverse-proxy) permet aux utilisateurs externes d'accéder à un serveur Web interne (dans un LAN derrière un pare-feu) via un serveur proxy (situé en DMZ).  
+
<u> Doc. Developpez.com </u> : http://julien-pauli.developpez.com/tutoriels/web/http/?page=page_7
 +
 
 +
=== 2 modes de fonctionnement ===
 +
*<u>Reverse-Proxy (d'internet vers le réseau local)</u> :
 +
L'utilisation d'Apache mod_proxy (reverse-proxy) permet aux utilisateurs externes d'accéder à un serveur Web interne (dans un LAN derrière un pare-feu) via un serveur proxy (situé en DMZ). Pas de configuration ni du client ni du serveur, c'est transparent.
 +
*<u>Proxy-Forward (du réseau local vers internet)</u> :
 +
Les utilisateurs situés dans un réseau local accèdent à un serveur Web situé sur Internet par l'intermédiaire du serveur proxy. Ils doivent donc obligatoirement passer par le proxy pour aller sur Internet. Le poste client doit être configuré pour utiliser le proxy, ce n'est donc pas transparent.
  
 
[[Fichier:Apache_Proxy.jpg]]
 
[[Fichier:Apache_Proxy.jpg]]
  
* A creuser :
+
== Configuration en proxy-forward ==
** Possibilité d'utiliser un tunnel sécurisé (SSL) entre le proxy et le ou les serveur(s) en interne.
+
'''En cours. A compléter.'''
** Load_balancing entre plusieurs serveurs
 
  
== Pré-Requis ==
+
=== Sur le proxy ===
* Un serveur situé dans la DMZ avec apache2
+
Créer un vhost avec le contenu suivant :
 +
ProxyRequests On
 +
ProxyVia On
 +
 +
<Proxy *>
 +
Order deny,allow
 +
Deny from all
 +
Allow from All
 +
</Proxy>
 +
 
 +
=== Sur les clients ===
 +
Configurer le navigateur (dans les paramètres de connexion) pour passer par le proxy.
 +
 
 +
== Configuration en reverse-proxy (Sur Debian) ==
 +
=== Pré-Requis ===
 +
* Un serveur situé dans la DMZ avec apache2 (serveur proxy)
 
* Le serveur Web situé dans le réseau local avec apache2 et un vhost accessible
 
* Le serveur Web situé dans le réseau local avec apache2 et un vhost accessible
 
* Dans le pare-feu, le port 80 (par exemple) doit être autorisé entre le proxy et le serveur Web interne
 
* Dans le pare-feu, le port 80 (par exemple) doit être autorisé entre le proxy et le serveur Web interne
  
== Activation du module mod_proxy sur le proxy ==
+
=== Activation du module mod_proxy sur le proxy ===
 
  a2enmod proxy
 
  a2enmod proxy
  
 
  /etc/init.d/apache2 restart
 
  /etc/init.d/apache2 restart
  
== Création d'un virtual host <nom_du_vhost> sur le proxy ==
+
=== Création d'un virtual host <nom_du_vhost> sur le proxy ===
 
Créer le fichier <nom_du_vhost> dans  /etc/apache2/sites-available/ avec le contenu suivant (où ProxyPass pointe vers un vhost du serveur Web local) :
 
Créer le fichier <nom_du_vhost> dans  /etc/apache2/sites-available/ avec le contenu suivant (où ProxyPass pointe vers un vhost du serveur Web local) :
 
  <VirtualHost *:80>
 
  <VirtualHost *:80>
Ligne 34 : Ligne 54 :
 
  /etc/init.d/apache2 restart
 
  /etc/init.d/apache2 restart
  
# owned by VirtualHost
+
== Configuration en reverse-proxy (Sur CentOS/BlueOnyx) ==
NameVirtualHost 10.0.0.42:80
+
 
+
=== Pré-Requis ===
# FrontPage needs the following four things to be here
+
* Un serveur situé dans la DMZ avec apache2 (serveur proxy)
# otherwise all the vhosts need to go in httpd.conf, which could
+
* Un poste client avec un navigateur sur le réseau local
# get very large since there could be thousands of vhosts
+
* Dans le pare-feu, le port 8080 (par exemple) doit être autorisé entre le proxy et le serveur Web interne
 +
 
 +
=== Activation du module mod_proxy sur le proxy ===
 +
Dans la BlueOnyx, le module mod_proxy est chargé automatiquement dans le httpd.conf.
 +
LoadModule proxy_module modules/mod_proxy.so
 +
 
 +
=== Création d'un virtual host sur le proxy ===
 +
 
 +
Il suffit de créer un fichier de configuration pour mod_proxy (exemple sur CentOS /etc/httpd/conf.d/proxy.conf).
 +
 
 +
Dans notre cas, le nom du vhost à transférer est proxy.domaine.fr
 +
 
 
  ServerRoot /etc/httpd
 
  ServerRoot /etc/httpd
 
   
 
   
 +
<VirtualHost 192.168.1.12:80>
 +
  ServerName proxy.domaine.fr
 +
  ServerAdmin admin
 +
  ProxyPass / http://local.domaine.fr/
 +
  ProxyPassReverse / http://local.domaine.fr/
 +
</VirtualHost>
 +
''Note 1'': Si le serveur doit rediriger plusieurs URLs, il suffit de dupliquer le bloc VirtualHost dans ce fichier en changeant le "ServerName".
 +
 +
''Note 2'': le "/" entre les directives et l'URL redirigée indique "la racine du site". C'est utile si la réécriture d'URL est plus complexe :
 +
        ProxyPass /sous-dossier/ http://local.domaine.fr/
 +
redirigera http://ancien.serveur.com/sous-dossier vers http://local.domaine.fr/, et de même http://ancien.serveur.com/sous-dossier/admin vers http://local.domaine.fr/admin.
 +
 +
== Les VirtualHosts ont le même nom (URL) ==
 +
Lors par exemple d'un transfert de site de serveur à serveur, le nom du virtualhost sera le même sur l'ancien serveur et sur le nouveau. Or, le temps de propagation des DNS étant aléatoire, on veut que les internautes qui arrivent encore sur l'ancien serveur soient automatiquement redirigés vers le nouveau. On doit donc utiliser l'adresse IP puisqu'on ne peut pas se fier aux DNS pendant quelques temps.
 
  <VirtualHost *:80>
 
  <VirtualHost *:80>
    <Location />
+
  ServerName       YOUR_SERVER_DOMAIN
        ProxyPass http://testproxy.systea.fr/
+
  ProxyPreserveHost On
    </Location>
+
  ProxyPass        / http://YOUR_NEW_SERVERS_IP_ADDRESS/
+
  ProxyPassReverse  / http://YOUR_NEW_SERVERS_IP_ADDRESS/
  ServerName proxy.systea.fr
+
  # Exemple :
  ServerAdmin admin
+
  # ServerName        your-domain.com
  #DocumentRoot /home/.sites/28/site1/web
+
  # ProxyPreserveHost On
  #ErrorDocument 401 /error/401-authorization.html
+
  # ProxyPass        / http://123.123.123.1/
#ErrorDocument 403 /error/403-forbidden.html
+
  # ProxyPassReverse / http://123.123.123.1/
  #ErrorDocument 404 /error/404-file-not-found.html
 
  #ErrorDocument 500 /error/500-internal-server-error.html
 
  #RewriteEngine on
 
  #RewriteCond %{HTTP_HOST}                !^*(:80)?$
 
#RewriteCond %{HTTP_HOST}                !^proxy.systea.fr(:80)?$ [NC]
 
 
#RewriteRule ^/(.*)                      http://proxy.systea.fr/$1 [L,R=301]
 
  #RewriteOptions inherit
 
  #AliasMatch ^/~([^/]+)(/(.*))?          /home/.sites/28/site1/users/$1/web/$3
 
#Include /etc/httpd/conf/vhosts/site1.include
 
# BEGIN WebScripting SECTION.  DO NOT EDIT MARKS OR IN BETWEEN.
 
# END WebScripting SECTION.  DO NOT EDIT MARKS OR IN BETWEEN.
 
# BEGIN PHP SECTION.  DO NOT EDIT MARKS OR IN BETWEEN.
 
# END PHP SECTION.  DO NOT EDIT MARKS OR IN BETWEEN.
 
 
  </VirtualHost>
 
  </VirtualHost>
# end of VirtualHost owned section
+
On force ProxyPass et ProxyPassReverse vers la nouvelle IP, '''MAIS''' l'instruction "ProxyPreserveHost" indique à mod_proxy de ''garder l'URL demandée'' par le navigateur client, au lieu de la remplacer par l'adresse IP.
 +
 
 +
== A creuser ==
 +
* Possibilité d'utiliser un tunnel sécurisé (SSL) entre le proxy et le ou les serveur(s) en interne.
 +
* Load_balancing entre plusieurs serveurs

Version actuelle datée du 5 novembre 2014 à 08:21

Principe de fonctionnement

Doc. Apache  : http://httpd.apache.org/docs/current/mod/mod_proxy.html

Doc. Developpez.com  : http://julien-pauli.developpez.com/tutoriels/web/http/?page=page_7

2 modes de fonctionnement

  • Reverse-Proxy (d'internet vers le réseau local) :

L'utilisation d'Apache mod_proxy (reverse-proxy) permet aux utilisateurs externes d'accéder à un serveur Web interne (dans un LAN derrière un pare-feu) via un serveur proxy (situé en DMZ). Pas de configuration ni du client ni du serveur, c'est transparent.

  • Proxy-Forward (du réseau local vers internet) :

Les utilisateurs situés dans un réseau local accèdent à un serveur Web situé sur Internet par l'intermédiaire du serveur proxy. Ils doivent donc obligatoirement passer par le proxy pour aller sur Internet. Le poste client doit être configuré pour utiliser le proxy, ce n'est donc pas transparent.

Apache Proxy.jpg

Configuration en proxy-forward

En cours. A compléter.

Sur le proxy

Créer un vhost avec le contenu suivant :

ProxyRequests On
ProxyVia On

<Proxy *>
Order deny,allow
Deny from all
Allow from All
</Proxy>

Sur les clients

Configurer le navigateur (dans les paramètres de connexion) pour passer par le proxy.

Configuration en reverse-proxy (Sur Debian)

Pré-Requis

  • Un serveur situé dans la DMZ avec apache2 (serveur proxy)
  • Le serveur Web situé dans le réseau local avec apache2 et un vhost accessible
  • Dans le pare-feu, le port 80 (par exemple) doit être autorisé entre le proxy et le serveur Web interne

Activation du module mod_proxy sur le proxy

a2enmod proxy
/etc/init.d/apache2 restart

Création d'un virtual host <nom_du_vhost> sur le proxy

Créer le fichier <nom_du_vhost> dans /etc/apache2/sites-available/ avec le contenu suivant (où ProxyPass pointe vers un vhost du serveur Web local) :

<VirtualHost *:80>
     ServerName   proxy.domaine.fr
     <Location />
        ProxyPass http://local.domaine.fr/
     </Location>
</VirtualHost>
a2ensite <nom_du_vhost>
/etc/init.d/apache2 restart

Configuration en reverse-proxy (Sur CentOS/BlueOnyx)

Pré-Requis

  • Un serveur situé dans la DMZ avec apache2 (serveur proxy)
  • Un poste client avec un navigateur sur le réseau local
  • Dans le pare-feu, le port 8080 (par exemple) doit être autorisé entre le proxy et le serveur Web interne

Activation du module mod_proxy sur le proxy

Dans la BlueOnyx, le module mod_proxy est chargé automatiquement dans le httpd.conf.

LoadModule proxy_module modules/mod_proxy.so

Création d'un virtual host sur le proxy

Il suffit de créer un fichier de configuration pour mod_proxy (exemple sur CentOS /etc/httpd/conf.d/proxy.conf).

Dans notre cas, le nom du vhost à transférer est proxy.domaine.fr

ServerRoot /etc/httpd

<VirtualHost 192.168.1.12:80>
  ServerName proxy.domaine.fr
  ServerAdmin admin
  ProxyPass / http://local.domaine.fr/
  ProxyPassReverse / http://local.domaine.fr/
</VirtualHost>

Note 1: Si le serveur doit rediriger plusieurs URLs, il suffit de dupliquer le bloc VirtualHost dans ce fichier en changeant le "ServerName".

Note 2: le "/" entre les directives et l'URL redirigée indique "la racine du site". C'est utile si la réécriture d'URL est plus complexe :

        ProxyPass /sous-dossier/ http://local.domaine.fr/

redirigera http://ancien.serveur.com/sous-dossier vers http://local.domaine.fr/, et de même http://ancien.serveur.com/sous-dossier/admin vers http://local.domaine.fr/admin.

Les VirtualHosts ont le même nom (URL)

Lors par exemple d'un transfert de site de serveur à serveur, le nom du virtualhost sera le même sur l'ancien serveur et sur le nouveau. Or, le temps de propagation des DNS étant aléatoire, on veut que les internautes qui arrivent encore sur l'ancien serveur soient automatiquement redirigés vers le nouveau. On doit donc utiliser l'adresse IP puisqu'on ne peut pas se fier aux DNS pendant quelques temps.

<VirtualHost *:80>
ServerName        YOUR_SERVER_DOMAIN
ProxyPreserveHost On
ProxyPass         / http://YOUR_NEW_SERVERS_IP_ADDRESS/
ProxyPassReverse  / http://YOUR_NEW_SERVERS_IP_ADDRESS/
# Exemple :
# ServerName        your-domain.com
# ProxyPreserveHost On
# ProxyPass         / http://123.123.123.1/
# ProxyPassReverse  / http://123.123.123.1/
</VirtualHost>

On force ProxyPass et ProxyPassReverse vers la nouvelle IP, MAIS l'instruction "ProxyPreserveHost" indique à mod_proxy de garder l'URL demandée par le navigateur client, au lieu de la remplacer par l'adresse IP.

A creuser

  • Possibilité d'utiliser un tunnel sécurisé (SSL) entre le proxy et le ou les serveur(s) en interne.
  • Load_balancing entre plusieurs serveurs