プロクシサーバは LAN内のホストが外部のネットワーク上のWebサーバ/FTPサーバにアクセスするときに、アクセスを中継する機能を持つホストである。企業など組織のイントラネットとインターネットの間やイントラネットとエクストラネットの間、また CATVプロバイダのインターネット接続などでよく使われている。自宅のLAN環境ではルータがあれば普通は必要としないが、使った構成も可能なので個人ユーザで使っている人もいることだろう。
- ネットワーク管理者が用意した自動プロキシ設定ファイルを使う
通常ユーザは、ネットワーク管理者からプロクシサーバのホスト名(あるいはIPアドレス)とポート番号を教えられ、ブラウザのプロキシ欄にそれを設定して使用する。この場合、ネットワーク構成が変わるなどプロクシに変更があると全てのクライアントが設定変更しないといけないという事態になる。クライアントの設定をサーバからコントロールすることはできないのでクライアント毎に設定変更作業をすることになる。
またエクストラネットも持つ企業のネットワークなどでは複数のプロキシサーバが存在する場合があるが、ブラウザのプロキシ設定欄にはプロクシサーバ名/ポートを一つしか書けないのでアクセス先に応じてブラウザの設定を変更しないといけないという面倒なことになる。このような状況を解決するのが「自動プロキシ設定」である。
例えば CATVの iTSCOM は自動設定については以下で説明している。
http://www.itscom.net/support/pc_setup/winexp.htm
iTSCOM の設定ファイル http://www.catv.ne.jp/auto.proxy は以下のような内容である。
(しかし、CATVネット外からもアクセスできるのはなぜでしょうかね? > iTSCOMさん)
--------------------------------------------------------------------------- function FindProxyForURL(url, host) { if(isInNet(host, "202.232.xxx.0","255.255.255.0")) return "DIRECT"; if(shExpMatch(url,"*catv.ne.jp*")) return "DIRECT"; if(shExpMatch(host,"*202.232.xxx.*")) return "DIRECT"; return "PROXY xxxx.catv.ne.jp:nnnn; DIRECT"; } ---------------------------------------------------------------------------この記述は *.catv.ne.jp のホストアドレスあるいは 202.232.xxx.* のIPアドレスへのアクセスはプロキシを経由せず直接に、それ以外の URLへのアクセスにはホスト:xxxx.catv.ne.jp ポート:nnnn のプロキシを経由してアクセスするという内容である(一部伏字にした)。
- 自前の自動プロキシファイルを使う
自動プロキシ設定をしたCATVインターネット接続では、127.0.0.1 や 192.168.0.* などローカルホストやプライベートアドレスへのアクセスができない場合があるようである。これはそのようなIPアドレスへのアクセスの場合でもプロキシサーバ経由であることが原因していると思われる。
CATVプロバイダに依頼して自動プロキシ設定ファイルを変更してくれるなら話は簡単であるが、普通はそうそう簡単にうなずいてはくれないかもしれない。そういう場合には以下のような自衛策を打ってみよう。
例えば iTSCOMの場合には、以下の2行を上の自動プロキシ設定ファイルの2行目の後に追加すると、127.0.0.1 と 192.168.*.* にはプロキシなしで直接アクセスし、エラーはなくなる。
--------------------------------------------------------------------------- if (isInNet(host, "127.0.0.0", "255.0.0.0")) return "DIRECT"; if (isInNet(host, "192.168.0.0", "255.255.0.0")) return "DIRECT"; ---------------------------------------------------------------------------上記の変更後のファイルを例えば C:\www\proxy.pac に置き、ブラウザの自動プロキシ設定のURL欄に file://c:/www/proxy.pac と書けば自前のプロキシ設定ができあがる。IE、Netscapeではそれぞれ以下のような設定になる。
(注) ローカルに行ったテストでは Netscapeの場合拡張子が pacでないとうまく動作せず、そのためファイル名を proxy.pac とした。IEではファイル名が auto.proxy でも問題ないようである。
(注) もし自分のPCでWebサーバが動作しているなら file://c:/www/proxy.pac ではなく http://127.0.0.1/proxy.pac のように設定することもできる。
(注) 自前の自動プロキシ設定を使うとプロキシサーバ側で起きた変更に気づくのが遅れることにもなるので、頻繁に変更されるようだと注意が必要である。
- 自動プロキシ設定ファイルの例
(1) アクセス先によってプロキシサーバを使い分ける(*.com, *.edu, その他によってプロキシサーバが異なる。例題用に書いたものなので普通はこのような設定はしないと思うが)
--------------------------------------------------------------------------- function FindProxyForURL(url, host) { if (isPlainHostName(host) || dnsDomainIs(host, ".mydomain.com")) return "DIRECT"; if (shExpMatch(host,"*.com")) return "PROXY proxy1.mydomain.com:8080"; if (shExpMatch(host,"*.edu")) return "PROXY proxy2.mydomain.com:8080"; return "PROXY proxy3.mydomain.com:8080"; } ---------------------------------------------------------------------------(2) プロトコルによってプロキシサーバを使い分ける(http, https, ftpによってプロキシサーバが異なる)
--------------------------------------------------------------------------- function FindProxyForURL(url, host) { if (url.substring(0, 5) == "http:") return "PROXY http-proxy.mydomain.com:8080"; if (url.substring(0, 6) == "https:") return "PROXY security-proxy.mydomain.com:8080"; if (url.substring(0, 4) == "ftp:") return "PROXY ftp-proxy.mydomain.com:8080"; return "DIRECT"; } 上記は以下のような表現でも書ける。 if (shExpMatch(url, "http:*")) return "PROXY http-proxy.mydomain.com:8080"; ---------------------------------------------------------------------------
- 関連過去記事
http://homepage1.nifty.com/yito/namazu/gbook/20010821.1134.html
- 参考Webページ
ASH multimedia lab. の プロキシの自動設定方法
Navigator Proxy Auto-Config File Format
NETSCAPE PROXY SERVER 2.5 FOR UNIX 管理者ガイド 第10章 クライアント自動構成ファイルの使用法
@IT の WebブラウザのProxy設定を行うための4つの方法 - WPADのススメ -
※本文は約 1年に書いのですが AN HTTPD とは直接関係のない内容だったためか、日の目を見ずに眠ったままになっていました。既にプロクシの中に「5.アクセス先に応じてプロクシを自動で切り換える」を追記しているのでもはや不要かとも思ったのですが、何かの役に立つかもしれないのでオープンにします。(2003.6.8)