top of page

【PACファイル・トラブル解決集】反映されない/特定サイトだけ直結にしたい…よくあるハマりどころをQ&Aで

  • 2 日前
  • 読了時間: 5分

プロキシのPACファイルは便利な反面、いざ運用すると「変更したのに反映されない」「特定のサイトだけ直結にしたい」「そもそも効かない」など、ハマりどころが意外と多いものです。この記事では、実務でよく出会うトラブルをQ&A形式でまとめました。基本的な書き方は前回の入門記事で解説しているので、あわせてご覧ください。

※本記事は技術的な一例の紹介です。挙動はブラウザ・OS・ネットワーク環境で異なります。各Q&Aに関連書籍のアフィリエイトリンク(Amazonアソシエイト)を含みます。

Q1 PACファイルを変更したのに、反映されない

A. いちばん多いのがこれです。原因の多くは「キャッシュ」。ブラウザやOSがPACファイルを一定時間キャッシュするため、更新してもすぐには反映されないことがあります。特にInternet Explorer系は、自動プロキシスクリプトを内部にキャッシュする挙動があります。

対処としては、ブラウザを完全に再起動する、PACのURLにバージョン用のクエリ(例:proxy.pac?v=2)を付けて“別ファイル”と認識させる、配信サーバー側で Cache-Control ヘッダを調整する、といった方法が有効です。IEではグループポリシーで自動プロキシスクリプトのキャッシュを無効化できます。

ポイント 「直したのに直らない」ときは、まずキャッシュを疑う。URLにクエリを足すのが手っ取り早い切り分けになります。

関連書籍(PR) 配信サーバーやキャッシュ制御を学ぶなら。 ▶ Amazonで探す

Q2 特定のサイトだけ、プロキシを経由せず直結にしたい

A. shExpMatch でホスト名を判定し、条件に合ったら DIRECT を返します。判定は上から順に評価され、最初にマッチしたところで終了します。除外したいサイトは、なるべく前のほうに書くのがコツです。

function FindProxyForURL(url, host) {
  // このドメインだけ直結にする
  if (shExpMatch(host, "*.example.com")) {
    return "DIRECT";
  }
  // それ以外はプロキシ経由
  return "PROXY proxy.example.com:8080";
}

ポイント shExpMatch はワイルドカード(シェル式)で、正規表現ではありません。「*.example.com」のように書きます。

関連書籍(PR) PACはJavaScript。基礎を固めたい方に。 ▶ Amazonで探す

Q3 社内システムは直結、外部サイトだけプロキシにしたい

A. イントラ(社内)判定には、ドット無しのホスト名を判定する isPlainHostName、社内ドメインを判定する dnsDomainIs、IP範囲で判定する isInNet を組み合わせます。社内向けは DIRECT、それ以外はプロキシ、という定番の形です。

function FindProxyForURL(url, host) {
  // 社内・イントラは直結
  if (isPlainHostName(host) ||
      dnsDomainIs(host, ".corp.local") ||
      isInNet(host, "10.0.0.0", "255.0.0.0")) {
    return "DIRECT";
  }
  // それ以外は外部プロキシ
  return "PROXY proxy.example.com:8080";
}

ポイント isInNet や dnsResolve はDNS参照が必要で、遅延の原因になりがちです。文字列判定(shExpMatch など)で済むなら、そちらを優先しましょう。

関連書籍(PR) 社内ネットワークの設計・構築に。 ▶ Amazonで探す

Q4 PACファイルが、そもそも効かない・読み込まれない

A. まず疑うのは3点です。①構文エラー(セミコロン抜け、関数名のタイポ、括弧の対応ミスなどが1つあると、スクリプト全体が動きません)、②配信の問題(PACのURLにアクセスできるか、ファイアウォールでブロックされていないか)、③MIMEタイプ。配信サーバーで .pac のMIMEタイプを application/x-ns-proxy-autoconfig に設定しておくのが安全です。

ポイント 最近のブラウザは file:// で置いたPACの利用を制限することがあります。基本はHTTP(S)で配信するのが確実です。

関連書籍(PR) つながらない時の切り分け・調査に。 ▶ Amazonで探す

Q5 プロキシが落ちたら、自動で切り替えたい(フェイルオーバー)

A. 返り値をセミコロンで区切って複数指定すると、左から順に試し、応答がなければ次へフォールバックします。最後に DIRECT を置くと、すべてのプロキシがダメなときに直結へ切り替わります。

function FindProxyForURL(url, host) {
  // proxy1 → proxy2 → 直結 の順に試す
  return "PROXY proxy1.example.com:8080; " +
         "PROXY proxy2.example.com:8080; DIRECT";
}

関連書籍(PR) サーバーの冗長化・負荷分散を学ぶなら。 ▶ Amazonで探す

Q6 一部のブラウザだけ効かない/ポートを省略したら動かない

A. 見落としやすいのがポートの省略です。「PROXY proxy.example.com」のようにポートを省くと、一部ブラウザ(Firefox系など)では動きません。デフォルトの80でも、必ず「:80」まで書きましょう。また DIRECT や PROXY のキーワードは大文字(大文字小文字を区別)です。

ポイント httpsのURLは、PACに渡る時点でパスやクエリが削られ、ホスト名だけになります。URLの細かいパスで振り分けたい場合、httpsでは判定できない点に注意です。

関連書籍(PR) HTTPやプロトコルの仕組みを深掘りするなら。 ▶ Amazonで探す

Q7 PACファイルをテスト・デバッグするには?

A. いきなり全社に配る前に、手元で検証しましょう。pactester のようなツールを使うと、指定URLがどのプロキシに振り分けられるかを確認できます。切り分けの基本は、まずブラウザにプロキシを直接指定してみて、PACを外した状態で通信できるかを確かめること。そこからPACの条件を1つずつ足していくと、原因を特定しやすくなります。

ポイント myIpAddress は環境(複数NICやVPN)によって想定外の値を返すことがあり、避けたほうが無難とされています。

関連書籍(PR) ネットワーク運用の実務力を高めたい方に。 ▶ Amazonで探す

まとめ

PACファイルのトラブルは、「キャッシュで反映されない」「構文エラーで全体が止まる」「ポート省略で一部ブラウザが動かない」あたりが定番です。困ったときは、まずブラウザで直接プロキシを指定して切り分け、そこからPACの条件を足していくのが近道です。基本の書き方は前回の入門記事にまとめているので、あわせてどうぞ。

ロビンプランニングでも支援できます 社内ネットワークやプロキシまわりの設定・トラブル対応のご相談も承っています。お気軽にどうぞ。

免責:本記事は一般的な情報提供を目的とした技術メモであり、動作を保証するものではありません。挙動はブラウザ・OS・ネットワーク環境により異なります。アフィリエイト:ロビンプランニングはAmazonアソシエイト・プログラムの参加者であり、リンク経由の購入により紹介料を得る場合があります。

 
 
 

コメント


© Copyright ROBIN planning LLC.

bottom of page