こんにちは。IE サポートチームの薄 (うすき) です。
本日は LAN 環境で利用する "プロキシ サーバー" の設定についてご紹介します。
プロキシ サーバーとは、簡単にいうと LAN 環境のネットワークの出入り口にあって、LAN 環境内からインターネットへ接続するときに、実際のアクセスを "代行" するサーバーのことです。
プロキシ サーバーとは
http://windows.microsoft.com/ja-jp/windows-vista/what-is-a-proxy-server
設定は、Internet Explorer のインターネット オプション - [接続] タブの、LAN の設定 ボタンを表示したときに表示される [ローカル エリア ネットワーク (LAN) の設定] ダイアログで行います。
このダイアログ上の各項目について解説していきます。また、各設定についてよくいただくお問い合わせについても合わせてご紹介しますので、ご参考にしていただければと思います。
1) 自動構成
1-1) 設定を自動的に検出する
2-2) 自動構成スクリプトを使用する
2) プロキシ サーバー
2-1) LAN にプロキシ サーバーを使用する
2-1-1) ローカル アドレスにはプロキシ サーバーを使用しない
2-2) 詳細設定 - プロキシの設定
2-2-1) 使用するプロキシのアドレス/ポート
2-2-2) 例外
1) 自動構成
1-1) 設定を自動的に検出する
"プロキシの自動検出 "WPAD (Web Proxy Auto-Discovery) " を利用するか、しないかを切り替える項目です。
"プロキシの自動検出 "WPAD (Web Proxy Auto-Discovery) " とは
管理者から、各クライアントにプロキシの設定を自動配布するための方法として開発された技術です。設定は管理者が、DHCP サーバーや DNS サーバーで行いますので、クライアント (IE) では 本項目をオンにするのみで使用できます。ユーザーに、プロキシサーバー設定の手間をかけることなく、管理者がプロキシ サーバー経由の通信を管理できます。
つまり、ネットワーク、環境の管理者が DHCP や DNS に登録した宛先に配置された自動構成スクリプトを検出し、自動構成スクリプトに記載された条件に従い利用するプロキシを利用します。ユーザーから見ると「自動」で利用するプロキシが検出され利用されますが、この設定を行ったのみで環境内にあるプロキシサーバーを IE が自動的に検出して利用するようなものではありません。
自動構成スクリプトについては 1-2) に記載します。
WPAD の詳細につきましては以下のドキュメントをご参照ください。
ブラウザー設定の自動検出と自動構成を有効にする
http://technet.microsoft.com/ja-jp/library/cc817419.aspx
1-2) 自動構成スクリプトを使用する
"自動構成スクリプト" を利用してプロキシ サーバーの設定を行うかどうかを切り変える項目です。
本項目は 1-1) 設定を自動的に検出する と同様、プロキシ サーバーの設定を自動的にクライアントに配布するために利用します。有効にすると、IE はアドレスで指定された自動構成スクリプトを取得し、記述されている条件に従って、Web サイトにアクセスする際のプロキシ サーバーを決定します。
1-1) 設定を自動的に検出する と違うのは、自動構成スクリプトのアドレスをクライアント (IE) で指定する点です。通常は、Web サーバー上に proxy.pac などのファイル名で自動構成スクリプトを保存しておき、そのアドレスを指定します。
自動構成スクリプトとは
条件を判定し、利用するプロキシ サーバーを返すスクリプトです。JavaScript で記述します。条件には、アクセス先の URL、IPアドレスや、日時なども指定できます。
例えば以下のように記述された自動構成スクリプトのアドレスを本項目に指定すると、"Web サーバーにホスト名でアクセスした場合はプロキシ サーバー経由しないが、それ以外は proxy という名前のプロキシ サーバー (ポート:80) を経由する" という仕組みが構成できます。
function FindProxyForURL(url, host)
{
if (isPlainHostName(host))
return "DIRECT";
else
return "PROXY proxy:80";
}
※ よくいただくお問い合わせ : 自動構成スクリプトを取得するタイミング
IE9 以前では、IE のプロセスを起動後、最初に通信を行うタイミングで IE 自身が取得していました。
Windows 8 以降、IE10 以降では、取得を OS の機能 (サービス) によって取得するよう変更されました。この機能では取得した自動構成スクリプトのキャッシュを保持しているため、キャッシュが利用できる間は自動構成スクリプトの取得を行いません。そのため、サーバー上で自動構成スクリプトを更新しても、IE にすぐ反映されない場合があります。
※ よくいただくお問い合わせ : 自動プロキシキャッシュについて
1-1) または 1-2) を有効として、自動プロキシ構成スクリプトがプロキシ サーバーを返し、これを経由して IE が Web サイトにアクセスした場合、経由したプロキシ サーバーと、アクセス先のホストをキャッシュします。このキャッシュは同一セッション内、つまり IE のプロセスが終了するまで有効です。この機能を "自動プロキシキャッシュ" と呼びます。
"自動プロキシキャッシュ" は、IE における自動構成スクリプトの処理を軽減する、パフォーマンス改善のために実装された機能なのですが、以下のように構成された自動構成スクリプトでは、想定したプロキシ サーバーを経由しない場合があります。
function FindProxyForURL (url, host)
{
if shExpMatch (url, "http://webserver/login") return "DIRECT";
else return "PROXY myproxy:80";
}
この自動構成スクリプトでは、http://webserver/loginへのアクセス時は直接接続、その他はプロキシ サーバー "myproxy:80" を経由してアクセスさせることを想定しています。しかしながら、実際には http://webserver/loginへのアクセス後、同じサーバー上の他のページ、例えば http://webserver/testにアクセスすると、myproxy:80 を経由せず直接接続してしまいます。
これは、自動プロキシキャッシュが、"URL" ではなく"ホスト (http://webserver) " を基準としているためで、想定された動作になります。
自動プロキシキャッシュについての詳細や、上記動作の回避方法等は、以下の技術文書に詳細をご案内しております。
Internet Explorer の自動プロキシ キャッシュを無効にする方法
http://support.microsoft.com/kb/271361/ja
※ よくいただくお問い合わせ : IE11 以降における、file プロトコルでの自動構成スクリプトのアドレス指定について
IE11 では、自動構成スクリプトのアドレスに file プロトコルでアドレスを指定することはサポートされていません。
例えば以下のような指定は無効で、この指定では自動構成スクリプトを利用することができません。
- C:\temp\proxy.pac
- file://example/proxy.pac
* 動作変更の背景
もともと IE10 以前でも、上記のようなfile プロトコルによる指定は推奨されていませんでした。理由は、IE だけではなく、他のアプリケーションも自動構成スクリプトの設定を利用するものがあるためです。
さらに詳しくいうと、IE が通信に利用するモジュール “WinInet” では上の指定は有効なのですが、Windows Update などが利用する通信モジュール “WinHTTP” では、file プロトコルによる自動構成スクリプトのアドレス指定はサポートされていません。そのため、IE は問題なく自動構成スクリプトを利用でき、通信が行えても、Windows Update 等の他のアプリケーションが自動構成スクリプトを利用できず、問題が発生することがあるのです。これは以下の技術文書でご紹介しています。
自動構成スクリプトの指定方法によって Windows Update が失敗する
http://support.microsoft.com/kb/890444/ja
以上のような背景を踏まえ、file プロトコルでのアドレス指定は、Windows Update 等 WinHTTP を利用しているアプリケーションとの相互運用性を向上させるため、IE11からサポートされなくなりました。
なお、アドレス指定を変更していただくあいだの暫定的な対応策として、以下のレジストリを設定していただくと、IE11 でも file プロトコルでのアドレス指定が有効となります。
キー : HKLM\SOFTWARE\Policies\Microsoft\Windows\CurrentVersion\Internet Settings\
値 : EnableLegacyAutoProxyFeatures
種類 : REG_DWORD
データ: 1
ただしあくまで暫定的な対応のために用意された方法です。
自動構成スクリプトは http またはhttpsプロトコルでアクセス可能な Web サーバーに配置していただき、アドレス指定に切り替えていただけますよう、お手数をおかけしますがよろしくお願いいたします。
以上の内容は、以下のブログ記事でもご紹介しております。
Understanding Web Proxy Configuration
http://blogs.msdn.com/b/ieinternals/archive/2013/10/11/10456140.aspx
2) プロキシ サーバー
2-1)LAN にプロキシ サーバーを使用する
利用するプロキシ サーバーのアドレス、ポートを直接指定したい場合にはこちらを有効にします。
ホスト名、FQDN名、IPアドレスが使用できます。
2-1-1) ローカル アドレスにはプロキシ サーバーを使用しない
"ローカル アドレス" で Web サイトにアクセスした場合に、指定されたプロキシ サーバーを経由するかどうかを決定します。チェックボックスをオンにすると、プロキシ サーバーを経由せず直接 Web サイトにアクセスします。
※ よくいただくお問い合わせ : 対象となる "ローカルアドレス" とは?
ホスト名のみを指定した URL です。例えば "http://contoso" という URL はローカル アドレスなので、本項目を有効にしているとプロキシ サーバーを経由しません。一方、http://contosoの "IP アドレス" をアドレスバーに打ち込んでアクセスした場合は、"ローカル アドレス" ではないためプロキシ サーバーを経由してしまいますのでご注意ください。
この動作は以下の技術文書でもご紹介しています。
文書番号: 262981
Internet Explorer Uses Proxy Server for Local IP Address Even if the "Bypass Proxy Server for Local Addresses" Option Is Turned On
http://support.microsoft.com/kb/262981/en-us
(
機械翻訳版:
"ローカル アドレスにはプロキシ サーバーを使用しない" を有効にしてもローカルの IP アドレスに対して Internet Explorer でプロキシ サーバーが使用される
http://support.microsoft.com/kb/262981/ja
)
2-2) 詳細設定 - プロキシの設定
2-2-1) 使用するプロキシのアドレス/ポート
プロキシ サーバーのアドレスとポート番号を入力します。プロトコル (http://、ftp://など) で始まらない場合、HTTP プロキシであると見なされます。たとえば、「proxy」と入力すると、「http://proxy」として扱われます。
また、すべての種類で同じプロキシ サーバー設定を使用するときは、"すべてのプロトコルに同じプロキシ サーバーを使用する" をオンにします。この場合は上のスクリーンショットでお分かりいただけるかと思いますが、HTTP に指定したプロキシ サーバー情報が適用されます。
なお、Internet Explorer 8 以降では、プロトコルの種類 gopher://は指定できません。
2-2-2) 次で始まるアドレスにはプロキシを利用しない
プロキシ サーバーを経由せずにアクセスしたいアドレスを指定します。複数のアドレスを、セミコロンで区切って複数指定できます。
例外リストに指定可能な文字列の表記形式は以下となります。下記表記形式中の [] で括られる部分は省略可能を意味し、"" で括られる部分は固定の文字列を意味します。
[<プロトコルスキーム>"://"]<ホスト名、FQDN または IP アドレス>[":"<ポート番号>][";"*]
<プロトコルスキーム> は http や ftp 等のプロトコル名を指します。
尚、プロキシサーバーの例外リストに指定可能なプロトコル名に特に制限はございませんが、IE がサポートする通信プロトコルは http、https、ftp、gopher のみ (IE8 以降は gopher プロトコルについてはサポート外) となります。
※よくいただくお問い合わせ : 指定できる最大文字数は?
[プロキシの設定] ダイアログ上で指定できる文字数は最大 2064 バイトです。
※よくいただくお問い合わせ : ワイルドカードは利用できる?
ワイルドカード (*) も使用可能で、以下のようなアドレスも指定できます。
*.example.com ("some.example.com"、"www.example.com" などにマッチ)
"www.*.com" ("www.example.com," "www.department.example.com," 等にマッチ)
"www.example.*" ("www.example.com," "www.example.org," and "www.example.microsoft.com" などにマッチ)
"123.1*.66.*" ("123.144.66.12"、"123.133.66.15"、 "123.187.66.13." 等にマッチ)
"*contoso*" 等も利用できます。
ワイルドカードは強力なので、ご使用にはご注意ください。例えば "www.*.com" をプロキシ例外として指定した場合、非常に多くのサイトが該当してしまうので、意図しないアドレスがプロキシ サーバー経由せずにアクセスしてしまった、ということになりかねません。
例外の指定に関しては以下のドキュメントもご参照ください。
Using Proxy Selection and Proxy Bypass Lists
http://technet.microsoft.com/en-us/library/dd361953.aspx
ご参考 1 :複数の項目が有効だった場合、優先順位は?
[インターネットオプション] - [接続]タブの設定は、複数にチェックが入っていた場合上から順に試行されます。つまり、優先順位は以下となります。
1. 設定を自動的に検出する
2. 自動構成スクリプトを使用する
3. LAN にプロキシ サーバーを使用する
「自動構成スクリプトを使用する」だけが設定されている場合、指定されたアドレスで自動構成スクリプトが取得できたかどうかによって、次にダイレクト接続を試行するかどうかが決定されます。
自動構成スクリプトの取得に失敗した場合は、プロキシを使用せずに対象の Web サイトへの接続を試みます。
自動構成スクリプトの取得に成功した場合は、自動構成スクリプトから返されたプロキシに接続を試みます。この場合、当該プロキシに接続できる/できないにかかわらず、以降のダイレクト接続の試行は行いません。
また「LAN にプロキシ サーバーを使用す1る」も同時に設定されている場合、IE自動構成スクリプトの取得に失敗すると、次に「LAN にプロキシ サーバーを使用する」のプロキシを使用した接続を試みます。
このプロキシに接続できなかった場合は、それ以上の試行は行わず「ページを表示できません」のエラーページを表示する動作となります。
ご参考 2 : プロキシ サーバーの設定を、外部のアプリケーション、スクリプト等で変更したい
プロキシーサーバーの設定は、レジストリに保存されます。しかしながら、該当のレジストリをレジストリエディタなどで直接編集したり、スクリプトで書き換えたり…といった方法はサポートされていません。なぜなら、対象となるレジストリは 2 つあって整合性を保たなければならないのですが、一方がバイナリ値でその仕様が公開されていないためです。整合性を保つことが難しいですし、片方だけを変更して不整合が発生すると、想定と違うプロキシ サーバーを経由してしまう可能性もあります。
外部アプリケーションからプロキシ サーバーの変更を行いたいのであれば、wininet の API ”InternetSetOption” を使ったアプリケーションを利用する方法があります。2 つのレジストリの整合性を保ちつつ、プロキシ サーバーの設定が行えます。
InternetSetOption のリファレンスと、これを利用したサンプルのご紹介 (少々古いですが) は、以下でご紹介しています。
InternetSetOption Function
http://msdn.microsoft.com/en-us/library/aa385114(VS.85).aspx
文書番号: 226473
How to programmatically query and set proxy settings under Internet Explorer
http://support.microsoft.com/kb/226473/en-us
(
機械翻訳版 :
Internet Explorer のプロキシ設定をプログラム的にクエリーし設定する方法
http://support.microsoft.com/kb/226473
)
以上です。ご参考になりましたでしょうか。
“自動構成スクリプト”については、今後本ブログにてより詳しくご紹介する予定です。