# proxy.pac einrichten: Datei schreiben, auf den Webserver legen, Clients verteilen, testen

Source: https://findproxyforurl.net/de/proxy-pac-einrichten/ · last updated 2026-10-15

Eine PAC-Datei (Proxy Auto-Config, meist proxy.pac oder wpad.dat genannt) ist eine kleine Textdatei mit einer JavaScript-Funktion. Sie entscheidet für jede Anfrage des Browsers, ob er direkt verbindet oder über welchen Proxy. Diese Anleitung führt in vier Schritten durch die Einrichtung. Sie schreiben die Datei, legen sie auf einen Webserver, teilen den Clients die Adresse mit und testen das Ergebnis.

Die Seiten, auf die diese Anleitung für Details verweist, sind auf Englisch; sie tragen den Hinweis
„(Englisch)“. Für die Einrichtung selbst brauchen Sie sie nicht.

## Schritt 1: Die Datei schreiben

Für jede Anfrage ruft der Browser die Funktion `FindProxyForURL(url, host)` auf. `url` ist die
vollständige Adresse, `host` nur der Rechnername daraus, etwa `www.example.com`. Die Funktion
antwortet mit einem Text:

- `"DIRECT"` heißt: ohne Proxy verbinden.
- `"PROXY proxy1.firma.example:8080"` heißt: diesen Proxy verwenden.
- `"PROXY proxy1.firma.example:8080; PROXY proxy2.firma.example:8080"` ist eine Liste. Fällt der
  erste Proxy aus, nimmt der Browser den nächsten.

Eine vollständige Datei für ein typisches Firmennetz sieht so aus:

```js
// Interne Kurznamen, die Benutzer ohne Domain eintippen
var kurznamen = ["intranet", "wiki", "drucker"];

function FindProxyForURL(url, host) {
  // Rechnernamen klein schreiben: Vergleiche im Skript unterscheiden Gross- und Kleinschreibung
  host = host.toLowerCase();

  // Die echten internen Kurznamen, nicht jeder Name ohne Punkt
  if (kurznamen.indexOf(host) >= 0) {
    return "DIRECT";
  }

  // Die interne DNS-Zone und alle Rechner darin
  if (host == "firma.example" || dnsDomainIs(host, ".firma.example")) {
    return "DIRECT";
  }

  // Private Adressen, aber nur wenn die URL schon eine IP-Adresse enthaelt
  // (sonst loest isInNet den Namen erst per DNS auf)
  if (/^\d+\.\d+\.\d+\.\d+$/.test(host) &&
      (isInNet(host, "10.0.0.0", "255.0.0.0") ||
       isInNet(host, "172.16.0.0", "255.240.0.0") ||
       isInNet(host, "192.168.0.0", "255.255.0.0"))) {
    return "DIRECT";
  }

  // Standardroute: alles andere ueber die Firmen-Proxys, der zweite ist die Ausweichroute
  return "PROXY proxy1.firma.example:8080; PROXY proxy2.firma.example:8080";
}
```

Ersetzen Sie `firma.example` und die Proxy-Namen durch Ihre eigenen. Drei Punkte entscheiden darüber,
ob die Datei zuverlässig arbeitet:

- **Die Standardroute steht als letzte Zeile.** Die erste `return`-Anweisung, die ausgeführt wird,
  entscheidet. Alle Ausnahmen gehören deshalb darüber. Endet die Funktion ohne `return`, verbinden
  die Browser direkt, und der Verkehr läuft unbemerkt am Proxy vorbei.
- **Namen kosten nichts, DNS-Abfragen schon.** Die Liste der Kurznamen und `dnsDomainIs()` prüfen nur
  den Text. `isInNet()` mit einem Rechnernamen löst den Namen dagegen per DNS auf, und wenn der
  DNS-Server nicht antwortet, wartet jede Anfrage. Deshalb prüft die Beispieldatei Netze nur, wenn
  die URL schon eine IP-Adresse enthält ([DNS in PAC-Dateien](https://findproxyforurl.net/articles/dns-in-pac-files/), Englisch).
- **Nur reines ASCII.** Schreiben Sie die Datei in einem Texteditor, nie in einer Textverarbeitung,
  denn die macht aus geraden Anführungszeichen typografische, und das ist ein Syntaxfehler. Lassen
  Sie auch in Kommentaren die Umlaute weg, dann liest jede Engine die Datei gleich. Speichern Sie
  nie als UTF-16 (im Windows-Editor früher „Unicode“): Windows und Firefox können eine solche Datei
  nicht lesen.

Die Kurznamen stehen bewusst als Liste in der Datei. Die bequemere Funktion `isPlainHostName()` würde
jeden Namen ohne Punkt direkt schicken, auch einen vertippten Namen aus dem Internet, und der Benutzer
bekäme dann eine Fehlermeldung statt der Sperrseite des Proxys. Fertige, kommentierte Vorlagen finden
Sie auf der Seite mit [PAC-Beispielen](https://findproxyforurl.net/examples/) (Englisch); der [PAC-Generator](https://findproxyforurl.net/generate/)
(Englisch) baut eine Datei aus Ihren Listen von Proxys, Domains und Netzen.

## Schritt 2: Die Datei auf einen Webserver legen

Die Clients laden die Datei über eine URL. Sie brauchen also einen Webserver, den alle Clients
erreichen, und zwar ohne Proxy. Wählen Sie eine feste Adresse, die sich nicht mehr ändert, zum
Beispiel `https://pac.firma.example/proxy.pac`, denn genau diese Adresse steht später in jedem
Client.

| Anforderung | Warum |
|---|---|
| Auslieferung über `https://` | Über reines HTTP kann jeder auf dem Netzweg die Datei verändern und den gesamten Webverkehr auf seinen eigenen Proxy umleiten. |
| Status `200` | Bei jedem anderen Status arbeitet der Client ohne PAC-Datei. |
| keine Anmeldung | Chrome, Edge und Windows melden sich zum Laden einer PAC-Datei nicht an. |
| `Content-Type: application/x-ns-proxy-autoconfig` | Die Clients laden die Datei auch so, aber ein falscher Typ ist meist ein Zeichen, dass der Server eine Fehlerseite schickt. |
| `Cache-Control: max-age` von höchstens einem Tag | Davon hängt ab, wie lange Proxys, CDNs und Clients mit HTTP-Cache eine alte Datei behalten. Chrome und Firefox laden die Datei ohnehin am Cache vorbei. |
| kleiner als 1 MiB | Eine größere Datei ignorieren Chrome, Edge und Windows vollständig. |

Eine Dateifreigabe oder ein `file://`-Pfad ist kein Ersatz: Chrome und Edge laden PAC-Dateien nicht
mehr aus Dateipfaden, und wer auf die Freigabe schreiben darf, bestimmt das Routing.

Unter Apache genügen diese Zeilen in der Konfiguration der Website (für `Header` muss das Modul
`mod_headers` aktiv sein):

```apache
AddType application/x-ns-proxy-autoconfig .pac
<Files "proxy.pac">
    Header set Cache-Control "max-age=3600"
</Files>
```

Prüfen Sie anschließend, was der Server tatsächlich schickt:

```sh
curl -sI https://pac.firma.example/proxy.pac
```

Die erste Zeile muss `200` enthalten, darunter sollten `content-type` und `cache-control` stehen.

## Schritt 3: Den Clients die Adresse mitteilen

Am sichersten tragen Sie die Adresse fest und zentral ein, für jede Art von Client an der Stelle,
die er liest:

| Client | Wo die Adresse eingetragen wird |
|---|---|
| Windows 10 und 11 | *Einstellungen > Netzwerk und Internet > Proxy*, bei **Setupskript verwenden** auf **Einrichten** klicken, den Schalter **Setupskript verwenden** einschalten, die Skriptadresse eintragen, **Speichern**. Für viele Rechner per Gruppenrichtlinie oder Intune. |
| Windows-Dienste (WinHTTP) | getrennt davon mit `netsh winhttp set advproxy` |
| Chrome und Edge | übernehmen die Einstellung von Windows oder macOS; die Browser-Richtlinie `ProxySettings` mit `ProxyMode` = `pac_script` und `ProxyPacUrl` hat Vorrang. In Edge heißt sie in der Gruppenrichtlinie „Konfigurieren von Proxyeinstellungen“. |
| Firefox | Die Voreinstellung **Proxy-Einstellungen des Systems verwenden** übernimmt die Adresse aus dem System. Eine eigene Adresse steht im Dialog **Verbindungs-Einstellungen** unter **Automatische Proxy-Konfigurations-Adresse**; per Unternehmensrichtlinie `Proxy` mit `"Mode": "autoConfig"` und `AutoConfigURL`. |
| macOS | *Systemeinstellungen > Netzwerk*, den Netzwerkdienst wählen, *Details > Proxys*, **Automatische Proxykonfiguration**; für verwaltete Macs ein MDM-Profil |
| Geräte, die Sie nicht konfigurieren können | automatische Erkennung per WPAD über DHCP-Option 252 oder den DNS-Namen `wpad`, als letzte Wahl |

Warum eine verteilte Richtlinie manchmal nicht ankommt, etwa weil sie pro Benutzer statt pro Rechner
gilt oder weil Edge eine eigene Richtlinie hat, erklärt die Seite
[PAC file not applied by Group Policy or Intune](https://findproxyforurl.net/articles/pac-not-applied-group-policy-intune/)
(Englisch).

**Schalten Sie die automatische Erkennung aus, wenn Sie ein Setupskript eintragen.** Der Schalter heißt
in Windows **Einstellungen automatisch erkennen**, in Firefox **Die Proxy-Einstellungen für dieses
Netzwerk automatisch erkennen**. Bleibt er an, ersetzt jede `wpad`-Antwort in einem fremden Netz Ihr
Skript ([Web proxy auto-detection](https://findproxyforurl.net/wpad/auto-detect/), Englisch).

**WPAD nur, wo es nicht anders geht.** Die automatische Erkennung findet die Datei ohne jede
Einstellung am Client. Sie fragt aber DHCP und DNS ohne Authentifizierung und lädt die Datei über
reines HTTP. Wer zuerst antwortet, liefert die Datei und damit das Routing. Die Risiken und wie man sie
begrenzt, stehen auf der [WPAD-Seite](https://findproxyforurl.net/wpad/) (Englisch); den Server für eine wpad.dat richtet der
[wpad.dat-Generator](https://findproxyforurl.net/generate/wpad-dat/) (Englisch) ein.

## Schritt 4: Testen, vor und nach der Verteilung

Testen Sie die Datei, bevor ein Client sie bekommt. Der [PAC-Tester](https://findproxyforurl.net/check/) auf dieser Website ist
englischsprachig, die Bedienung ist aber schnell erklärt:

| Im Tester | Bedeutung |
|---|---|
| **Domain or URL to trace** | die Adresse, für die Sie die Entscheidung der Datei sehen wollen |
| **Engine profile** | welcher Client simuliert wird: Chromium (Chrome, Edge), Firefox, pacparser oder Windows (WinHTTP, WinINet) |
| **Check** | startet den Test |
| **Path** | der Ablauf: jede Bedingung mit wahr oder falsch, jeder Funktionsaufruf mit Ergebnis und die Zeile, die entschieden hat |
| **Annotated** | Ihre Datei mit einer Erklärung über jeder Regel |
| Note **A+** bis **F** und die Hinweise darunter | die Bewertung der Datei gegen den [Regelkatalog](https://findproxyforurl.net/rules/) (Englisch), jeder Hinweis mit Zeile und Lösung |
| **Delivery** | Hier fügen Sie die Ausgabe von `curl -sI` aus Schritt 2 ein, dann wird auch die Auslieferung bewertet. |

Testen Sie mindestens eine Adresse pro Regel Ihrer Datei, dazu eine reine IP-Adresse, einen kurzen
Namen ohne Punkt und eine Adresse, die einer internen Domain nur ähnelt (etwa `firma.example.boese.example`).
Wählen Sie dabei die Profile der Clients, die Ihre Benutzer tatsächlich verwenden, denn die Engines
verhalten sich nicht in allen Punkten gleich. Die Datei wird in Ihrem Browser ausgewertet; zur
Bewertung wird nur ihre logische Struktur übertragen, ohne Namen, Adressen oder Text.

Verteilen Sie die Adresse danach zuerst an eine kleine Pilotgruppe. Prüfen Sie dort, ob die Clients
die Datei wirklich verwenden: in Chrome und Edge unter `chrome://net-internals/#proxy` bzw.
`edge://net-internals/#proxy`, für WinHTTP mit `netsh winhttp show advproxy`. Clients, die schon eine
ältere Datei geladen haben, behalten sie eine Weile; wie Sie jede Engine zum Neuladen bringen, zeigt
[PAC cache reset](https://findproxyforurl.net/articles/pac-cache-reset/) (Englisch). Lädt ein Client die Datei gar nicht, hilft
[PAC file troubleshooting](https://findproxyforurl.net/articles/pac-file-troubleshooting/) (Englisch) weiter.

Wenn alles stimmt, bekommen alle Clients die Adresse. Bei jeder späteren Änderung der Datei testen
Sie wieder im Tester, bevor Sie die neue Fassung auf den Server legen.


## Frequently asked questions

### Wie richte ich eine proxy.pac ein?

Schreiben Sie eine Textdatei proxy.pac mit der Funktion FindProxyForURL(url, host), die für jede Anfrage "DIRECT" oder "PROXY host:port" zurückgibt. Legen Sie sie auf einen Webserver, der sie über HTTPS mit Status 200 und dem Content-Type application/x-ns-proxy-autoconfig ausliefert. Verteilen Sie die Adresse per Gruppenrichtlinie, Intune, Browser-Richtlinie oder MDM-Profil, und testen Sie die Datei vor und nach der Verteilung.

### Was ist der Unterschied zwischen proxy.pac und wpad.dat?

Der Inhalt ist derselbe. wpad.dat ist nur der Name, unter dem die automatische Proxy-Erkennung (WPAD) die Datei sucht. Eine proxy.pac tragen Sie dagegen mit ihrer Adresse fest in die Einstellungen der Clients ein, was sicherer ist.

### Wo trage ich die PAC-Datei in Windows ein?

In Windows 10 und 11 unter Einstellungen, Netzwerk und Internet, Proxy, bei "Setupskript verwenden" auf "Einrichten" klicken, den Schalter einschalten, die Skriptadresse eintragen und speichern. Für viele Rechner setzen Sie dieselbe Einstellung per Gruppenrichtlinie oder Intune.

