Chromeで特定のサイトだけにプロキシを使う方法
目次

要点: デスクトップ版のChromeには、特定のサイトにだけプロキシを適用する設定がありません。Chromeはすべての閲覧に一つのプロキシ構成を使い、それをオペレーティングシステム、起動フラグ、管理者のポリシー、または拡張機能から取得します。一部のサイトだけをプロキシ経由にするには、ChromeにPACスクリプトが必要です。リクエストごとにプロキシを選ぶ短い関数で、ご自身で書くか、拡張機能がルールから作成します。
Chromeで特定のサイトだけにプロキシを使うには、サイトを指定したPACスクリプトをブラウザに渡します。Chromeはリクエストのたびにそれを参照します。スクリプトの渡し方は三つあります。オペレーティングシステム、別に起動したChrome、または拡張機能です。
Chromeにはサイトごとのプロキシ設定がありますか?
ありません。Chromeの設定ページにあるプロキシの項目は一つだけで、「Open your computer’s proxy settings」(コンピューターのプロキシ設定を開く)というラベルが付いています。Chromiumはこの設定を、コンピューター全体に適用されるものと説明しています(Chromiumの設定文字列)。
Chromiumのプロキシに関するメモは、Chromeがプロキシ構成を取得できる場所として四つを挙げています。管理者のポリシー、コマンドラインフラグ、拡張機能、オペレーティングシステムです。どれが有効になっていても、ブラウザが読み込むすべてのものに一つの構成が適用され、サイトごとの判断はその構成の中にPACスクリプトとして置かれます。
PACスクリプトは何をするのですか?
PAC(プロキシ自動設定)スクリプトは、FindProxyForURLという名前のJavaScript関数です。MDNのPACリファレンスが説明しているとおり、Chromeはリクエストごとにアドレスとホスト名を渡してこの関数を呼び出し、返された文字列を使います。プロキシなしならDIRECT、プロキシサーバーを使うならPROXY host:portです。
次のスクリプトは、一つのドメインとそのサブドメインをプロキシ経由にし、それ以外はすべて直接接続にします。プロキシのアドレスはドキュメント用に予約された範囲のもの(RFC 5737)なので、ご自身のアドレスに置き換えてください。
function FindProxyForURL(url, host) {
if (host === "example.com" || dnsDomainIs(host, ".example.com")) {
return "PROXY 203.0.113.10:8080";
}
return "DIRECT";
}
プロキシ経由にしたいサイトごとに条件を一つ加えます。最後のreturnが、リストにないすべてのサイトの扱いを決めます。
ChromeにPACスクリプトを渡す方法は?
三つあります。システムのプロキシ設定、別に起動したChrome、そして拡張機能です。違いは、コンピューターのどこまでに影響するかと、変更がどう反映されるかです。
システムのプロキシ設定で
Windowsでは、Microsoftのガイドにあるとおり、プロキシ設定に「setup script」(セットアップスクリプト)の項目があり、スクリプトのアドレスを指定できます。Chromeはシステムの設定に従います。スクリプトはURLでアクセスできる必要があります。システムのプロキシ設定を読むすべてのアプリケーションもそれを使うので、マシン全体に向けたスクリプトに適した方法です。
別のChromeインスタンスで
Chromeは起動時にプロキシのフラグを受け付けます。フラグはChromiumのネットワーク設定のページに載っています。--proxy-serverは一つのプロキシを指定し、--proxy-bypass-listはそれを通らないホストを指定し、--proxy-pac-urlはスクリプトを指します。独自の--user-data-dirを付けて起動すると、二つめのChromeはいつものChromeと並んで動きます。実行中の二つのインスタンスはデータディレクトリを共有できないからです(ユーザーデータディレクトリに関するChromiumのメモ)。
google-chrome --user-data-dir="$HOME/chrome-proxied" --proxy-server="http://203.0.113.10:8080"
このインスタンスはすべてのトラフィックをプロキシ経由で送るので、サイトの経路は、どのウィンドウでそのサイトを開くかで決まります。プロキシを変えるには、インスタンスを終了して新しいフラグで起動し直す必要があります。
プロキシ拡張機能で
拡張機能は、chrome.proxy APIを通じて、インストールされたプロファイルのChromeのプロキシを設定します。ルールを持つ切り替えツールは、それをPACスクリプトにまとめます。当社の無料のProxyJam Connectorはこの方式で動き、ChromeとMicrosoft Edgeで使えます。
- プロキシのホスト、ポート、プロトコルでプロファイルを追加します。
- ルールを追加します。たとえば
example.comに「Domain + subdomains」(ドメインとサブドメイン)を指定して、適用先にそのプロファイルを選びます。サイトに最初に当てはまったルールが適用されます。 - フォールバックはDirect(直接接続)のままにしておき、どのルールにも当てはまらないサイトはプロキシなしで接続するようにします。
- ツールバーのポップアップでAuto(自動)を選びます。
当てはまったサイトについて、Connectorのスクリプトはその一つのプロキシだけを指定し、後ろに直接接続の選択肢を付けません。プロキシが停止していればサイトは読み込みに失敗し、そのサイトにご自身のアドレスが使われることはありません。
タブごとに別のプロキシを使えますか?
Chromeではできません。chrome.proxy APIはプロファイルに一つの値を保存し、タブをパラメーターとして受け取らないので、タブには独自に設定できるものがありません。
実際に使える単位は、プロファイルかインスタンスです。プロキシを使う作業のために二つめのChromeプロファイルを作ってそこに拡張機能をインストールするか、独自のフラグで二つめのインスタンスを起動し、二つのウィンドウを並べて使ってください。そうすれば、ウィンドウごとに別のプロキシになります。
パスを含むルールがHTTPSのサイトで失敗するのはなぜですか?
Chromeはhttps://のアドレスについて、PACスクリプトにスキーム、ホスト、ポートだけを渡します。パス、クエリ、フラグメントはChrome 52以降取り除かれており、これを無効にするオプションはChrome 75で削除されました(Chromiumのプロキシに関するメモ)。
そのため、example.com/shop/*のようなルールはどのHTTPSページにも当てはまりません。ルールはホスト名で書き、サイトの一部に独自の経路が必要なら、その部分に独自のサブドメインを与えてください。通常のhttp://のアドレスは今でもパス付きでスクリプトに届きますが、Chromiumはそれに頼らないよう勧めています。Connectorは、パスに依存するルールの横に警告を表示します。
どの方法を選べばよいですか?
少数のサイトと一つのプロキシなら、拡張機能がいちばん手間がかかりません。ConnectorがChromeでできることとできないことは拡張機能のページにまとめています。パスワードを求めるプロキシについてはChromeがプロキシのユーザー名とパスワードを何度も尋ねる理由で、古い切り替えツールからのルールの移行についてはManifest V3で何が変わったかで扱っています。国ごとに一つのプロファイルとプロキシを用意して、ご自身のサイトが各市場でどう見えるかを確認する方法は、別の国からウェブサイトを見る方法で説明しています。
それらのサイトを経由させるプロキシに、インターネット事業者のネットワーク上の一つのアドレスを保ってほしいなら、それがISPプロキシとは何かで説明しているものです。ProxyJamは静的レジデンシャル(ISP)プロキシをISPプロキシのページで販売しており、価格は料金ページにあります。
