ASH | サーバ | セキュリティ | Linux | FreeBSD | DB | Web | CGI | Perl | Java | XML | プログラム | ネットワーク | 標準 | Tips集

プロキシの自動設定方法

概要

 ローカルネットなどでアクセスする場合、ローカルネット内の直接接続可能なサイトと、インターネットの直接接続できないサイトがあります。 これらのサイトを、すべてプロキシサーバ経由でアクセスすると、ネットワークやプロキシサーバの負荷が高くなり、レスポンスが低下してしまいます。 そこで、NO_PROXY指定を行うことで、ローカルネット内の直接接続可能なサイトはプロキシサーバを経由せず、直接接続するようにします。 しかし、大規模な会社ほど、その設定は複雑になってきます。
 そこで、クライアントが自動設定できるようにします。 自動設定では、プロキシサーバの設定をサーバで管理するため、変更が発生しても、サーバの設定変更だけでできます。

設定方法

プロキシ自動設定(Proxy autoconfig)ファイルの作成

 プロキシ自動設定ファイルは、Webサーバ上のproxy.pacというファイルとして設置します。

unix# vi /usr/local/apache/htdocs/proxy.pac
function FindProxyForURL(url, host) {
  if ( isInNet(host, "10.0.0.1"   , "255.0.0.0"  )
    || isInNet(host, "127.0.0.0"  , "255.0.0.0"  ) )
    return "DIRECT";
  else
    return "PROXY 10.0.1.254:8080";
}

WebサーバのMIME-typeの設定

 プロキシ自動設定ファイルの拡張子である.pacに対して、MIME-typeとしてapplication/x-ns-proxy-autoconfigを設定します。

unix# vi /usr/local/apache/conf/httpd.conf(srm.conf)
AddType application/x-ns-proxy-autoconfig .pac

ブラウザのプロキシ設定

 プロキシの設定を自動化するためには、ブラウザの設定を行う必要があります。 これらの設定はブラウザ毎に異なります。 以下に、Internet ExplorerとNetscapeの場合の例を示します。

Internet Explorerの場合

「ツール」「インターネットオプション」メニューを選択
「接続」「LANの設定」を選択
[自動設定のスクリプトを使用する]をチェック
[アドレス]http://www/proxy.pacを入力

Netscapeの場合

「編集」「設定」メニューを選択
「詳細」「プロキシ」を選択
[自動プロキシ設定]をチェック
[設定の場所(URL)]http://www/proxy.pacを入力

Proxy autoconfigファイルの記述方法

 参考までに、autoconfigファイルの記述方法の簡単な説明です。

FindProxyForURL(url, host)
機能:
 URLによってサーバのアクセス方法を制御する
引数:
  url  アクセスするURL(protocol://host:port/path) 
  host URLから得られるホスト名(hostのみ)
返却値:
  DIRECT          プロキシサーバを使用せず直接接続
  PROXY host:port 指定されたプロキシサーバを使用して接続
  SOCKS host:port 指定されたSOCKSサーバを使用して接続

※複数返却された場合は、先頭から順にアクセスを試みる
  PROXY proxy01.domain:8080; PROXY proxy02.domain:8080; DIRECT

※一般的に、以下のような記述となる
  function FindProxyForURL(url, host) {
    if (条件1)
      return DIRECT, PROXY, SOCKS;
    else if (条件2)
      return DIRECT, PROXY, SOCKS;
    else
      return DIRECT, PROXY, SOCKS;
  }


isInNet(host, pattern, mask)
機能:
  hostがネットワークに含まれるかをチェックする
引数:
  host    URLから得られるホスト名(hostのみ)
  pattern IPアドレスパターン
  mask    ネットマスク
返却値:
  hostがIPアドレスパターンとネットマスクで指定されたネットワークに含まれる場合、真を返却
例:
  isInNet(host, "192.168.1.0" "255.255.255.0") 


dnsDomainIs(host, domain)
機能:
  指定したドメイン名と一致するかをチェックする。
引数:
  host   URLから得られるホスト名(hostのみ)
  domain 比較するドメイン名
返却値:
  hostのドメイン名が指定したdomainと一致している場合、真
例:
  dnsDomainIs(host, "ash.jp")


shExpMatch(str, shexp)
機能:
  指定した文字列がシェル表現と一致するかをチェックする。
引数:
  str   任意の文字列(urlやhostなど)
  shexp 比較するシェル表現
返却値:
  文字列が指定されたシェル表現と一致する場合、真
例:
  shExpMatch(url, "10.*")

※シェル表現は、正規表現みたいなものですが、正規表現ではない。


Copyright (C)1995-2002 ASH multimedia lab.
mail : info@ash.jp