Configuration des clients pour le proxy
(Fichiers de configuration automatique)

Les fichiers de configuration automatique.

La structure du fichier (fichier en .pac) d'autoconfiguration du proxy est écrite en javascript avec la fonction FindProxyForURL qui est passé en clair au client. Ce fichier est écrit avec notpad au format texte et on lui donne un .pac à la place d'un .txt par exemple. Le fichier proxy.pac pourrait avoir la structure suivante :
 
function FindProxyForURL(url,host)
{
return "PROXY proxy.ac-creteil.fr:8080;DIRECT";
}
Ici le client doit utiliser le proxy proxy.ac-creteil.fr sur le port 8080, ou si le proxy n'est pas accessible (caractérisé par le point virgule) aller directement sur internet (DIRECT).
Pour que le client utilise ce fichier comme fichier d'autoconfiguration, il doit être placé dans un répertoire de votre serveur web. Il faut pour que cela marche indiquer dans votre serveur web le type mimes application/x-ns-proxy-autoconfig pour ce type de fichier.
Si vous utilisez le serveur Apache utilisé AddType pour ajouter ce type, si vous utilisez IIS aller dans MMC, selectioner propriétés de site web par défaut, puis en-têtes HTTP, puis dans MIMES types de fichiers, ajouter alors ce type. 


Il faut spécifier au navigateur l'Url ou l'on peut trouver le fichier proxy.pac. (Voir ici pour la configuration des navigateurs).


On peut de façon plus subtile utiliser un script en perl pour créer ce fichier. Cela permet alors de traiter les demandes en fonction de l'adresse IP du client.

Avez vous besoin de ce type de fichier ?

Oui si vous mettez en place un proxy cache dans votre établissement ou si vous ne souhaitez pas que le navigateur cherche à monter la ligne lorsque vous lancez le navigateur (pour aller sur votre serveur Web par exemple). 
Dans le cas ou vous avez mis en place un proxy (Squid, BorderManager, ...) votre proxy devient un proxy fils du proxy cache du rectorat (je vous le conseille vivement). Il doit pour cela être compatible ICP (Internet Cache Protocol) et utiliser le même port ICP que le proxy du rectorat (3130).
Je suppose donc que vous voulez que vos clients utilisent votre proxy-cache, que si celui-ci est très mal en point qu'ils utilisent directement le proxy du rectorat ou sinon qu'ils aillent directement sur internet. Je suppose aussi que vous avez mis en place un serveur Web en interne, de ce fait vous ne souhaitez pas mettre les pages de votre propre serveur web dans votre cache. Voici donc le fichier qui en l'adaptant un petit peu, peut faire office de fichier de configuration automatique.

function FindProxyForURL(url, host)
{


//Je suppose que l'adresse de votre réseau est 192.168.1.0 avec comme masque 255.255.255.0
//Si les machines essayent d'atteindre une autre machine de ce réseau la connexion n'a pas de raison de 
//passer par le proxy, ou de monter la ligne.
 
if (isPlainHostName(host) || dnsDomainIs(host,".mon-lycee.fr") || (isInNet(host, "192.168.1.0", "255.255.255.0"))
return "DIRECT";

else

// d'abord par votre proxy 192.168.1.1 (je suppose ici que votre proxy-cache n'a pas de nom DNS) puis par les proxy n°1 du 
// rectorat  proxy.ac-creteil.fr,  (utiliser le ; comme séparateur) puis enfin en direct 
// si votre proxy s'arrête il passe directement par le proxy du rectorat si le proxy du rectorat est  arrêté aussi, 
// Il va directement sur internet  
 
return "PROXY 192.168.1.1:8080; PROXY proxy.ac-creteil.fr:8080;direct";

// Remplacer Nom_de_ma_machine_proxy par son adresse IP. Si vous n'avez pas de proxy-cache mais seulement un serveur Web, 
// enlever PROXY 192.168.1.1:8080;

}

Vous pouvez télécharger un fichier d'exemple à adapter à votre établissement (en fonction du plan d'adressage, de l'existence ou non d'un serveur DNS, de la présence d'un cache) ici

Les fonctions prédéfinies pour programmer un fichier .pac 

isPlainHostName(host) Retourne TRUE si le nom de domaine n'est pas inclus (si on n'a pas de point dans l'adresse).
isplainHostName(host) retourne TRUE si vous avez donné localhost
dnsDomainIs(host,domain) Retourne TRUE si host appartient au domaine. domain doit commencer par un point.
Exemple : dnsDomainIs(host,".mon-lycee.fr") retourne TRUE si vous avez donné comme adresse www.mon-lycee.fr sinon retourne FALSE.
localHostOrDomainIs(host,autrehost) Retourne TRUE si la partie de  host correspond host.
Exemple : localHostOrDomain(host,"www.ac-creteil.fr") est TRUE si host est www.ac-creteil.fr. sinon FALSE. 
isResolvable(host) Retourne TRUE si le DNS peut résoudre le nom d'hôte sinon FALSE.
shExpMatch(chaîne, expression) Retourne TRUE si chaîne correspond à expression.
Exemple : shExpMatch(host, "*.fr") est TRUE si l'adresse envoyé par le navigateur est www.ac-creteil.fr sinon FALSE
dnsDomainLevels(host) Retourne le nombre de niveaux de domaines dans le nom d'hôte.
Exemple : dnsDomainLevels(host) retourne 2 si vous avez donné www.ac-creteil.fr 
dnsResolve(host) Retourne l'adresse IP de host si  elle a pu être trouvée.
Exemple : dnsResolve(host) avec pour host www.ac-creteil.fr retourne 195.98.246.33
myIpAddress() Retourne l'adresse IP de la station.  
isInNet(host,motif d'adresse IP, masque) Retourne TRUE si l'adresse IP de host correspond au motif d'adresse I¨P.
Exemple : isInNet(host,"192.168.0.10","255.255.255.0") retourne vrai si l'adresse de host est 192.168.0.x car les 3 premiers octets isolés par le masque et le motif sont identiques.  

Dans ce tableau host correspond à l'adresse envoyée par le navigateur client
Vous pouvez utiliser comme pour javascript les IF  ELSE.
|| indique un OU
&& indique un ET
On peut aussi utiliser substring() pour utiliser un proxy en fonction du protocole demandé.
Si on utilise HTTP ou FTP on passe par le proxy, sinon on est "direct" sur internet, cela peut être utile si vous ne souhaitez pas que les demandes FTP passent par votre proxy.

Exemple : if (url.substring(0, 4) == "http:") || (url.substring(0, 5) == "ftp:") {
                    return "PROXY proxy.ac-creteil.fr:8080;DIRECT"
                    }
                    Else
                    return "DIRECT"; 

Il existe encore un grand nombre de possibilités. Pour en savoir plus aller sur le site
http://www.netscape.com/eng/mozilla/2.0/relnotes/demo/proxy-live.html


© Philippe Chadefaux / Mission NTIC- $Id: proxy-pac.htm,v 1.1 2002/12/20 18:33:34 philippe Exp $ -