ご利用のブラウザは、JavaScript が無効 となっていませんか?
このサイトでは、コンテンツの一部が非表示 、あるいは、コメント、お問い合わせの投稿ができない 、検索ができない ことがあります。
このサイトでは、リバースプロキシに関して、Nginxを使って実現する Nginx をリバースプロキシ(キャッシュ) として使ってみた という記事を書きました。
今回は、Nginxがこれだけ流行る前のメジャーな リバースプロキシとして利用できる プロキシサーバー Squid を使ってみます。
Squid (スクウィッド) は、プロキシサーバー (キャッシュサーバー)として、非常にメジャーなサーバーです。
また、ロードバランサーとしても、もちろんリバースプロキシをとしても利用できます。
よくあるパターンは、Squid (リバースプロキシ) + apache (ウェブサーバー本体) の組み合わせです。
ここでは、Squid (リバースプロキシ) + (apache or nginx ) (ウェブサーバー本体) の組み合わせで、リバースプロキシを実現してみます。
リバースプロキシ または
逆プロキシ とは、
特定のサーバへの要求を必ず経由するように設置されたプロキシサーバのことで、一般的なプロキシとは、文字通り
逆 に意味あいを持ち、不特定多数のサーバを対象としません。
リバースプロキシは、不特定多数のクライアントから寄せられる要求に対して、応答を肩代わりすることにより特定のサーバの負担を軽減したり、
アクセスを制限することにより特定のサーバのセキュリティを高めたりする目的に用いられます。
リバースプロキシサーバーの例
プロキシサーバーの例
上の図は、リバースプロキシサーバーと一般的なプロキシサーバーの違いです。
いずれのプロキシサーバーもインターネットに接続されています。
違いは、インターネットと逆向きの接続先が
リバースプロキシサーバー :
ウェブサーバーなどのサーバー(インターネットサーバー)
プロキシサーバー :
個人のパソコン(インターネットユーザ)
となっていることです。
リバースプロキシサーバーをおくこともメリットは、もちろんキャッシュサーバーとしてのメリットもありますが、
ロードバランサーの機能を使っての以下の図のような負荷分散のイントラネットを構築できることです。
リバースプロキシ(Squid)の設定
Squidをインストールする
CentOS, ScientificLinux では、yumでインストールすることができます。
$ yum install squid
...
Installing:
squid i686 7:3.1.10-16.el6 base 1.7 M
...
Is this ok [y/N]: y
...
Installed:
squid.i686 7:3.1.10-16.el6
Complete!
これだけです。
続けて、リザーブプロキシの設定例を簡単に解説してみます。
Squidの設定する
続けて、リザーブプロキシの設定例を簡単に解説してみます。
リザーブプロキシの設定は、/etc/squid/squid.conf で行います。
/etc/squid/squid.conf の設定例
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
# アクセス定義をします。
# ウェブ用ポート番号を定義します。
acl web_ports port 80 # http
acl web_ports port 443 # https
# 全てのアクセスを可とします。
http_access allow all
# ウェブ用ポートからでないアクセスを不可とします。
# 今回は、ウェブのみのプロキシとします。
http_access deny !web_ports
# 公開サーバー名を web.example.com としておきます。
visible_hostname web.example.com
# HTTPサーバーとして公開するIPアドレス、ポート番号を指定します。
# 192.168.1.100:80 : SquidサーバーのIPアドレスとポート番号を指定します。
# accel : アクセラレータ / リバースプロキシ モード とします。
# ignore-cc : キャッシュコントロール情報を無視します。
# defaultsite : デフォルトサイト名を指定します。(ここでは同じです。)
http_port 192.168.1.100:80 accel ignore-cc defaultsite= 192.168.1.100
# 階層内の他のキャッシュサーバーを定義します。
# 127.0.0.1 : 他のサーバーのIPアドレス(ここではウェブサーバー本体)を指定します。
# parent : サーバータイプを指定します。ここでは、親サーバーとして定義します。
# 80 : サーバーのポート番号を指定します。
# 0 : サーバーのicpポート番号を指定します。icpポート番号は、キャッシュ情報のやりとりに使用されます。0は無効です。
# no-query : このサーバーにICP照会を無効にします。
# originserver : このサーバーは、オリジナルサーバー(ここではウェブサーバーのこと)へのアクセスに使用されます。
cache_peer 127.0.0.1 parent 80 0 no-query originserver
# squid の起動ユーザ名を指定します。
cache_effective_user squid
# メモリキャッシュサイズを指定します。
cache_mem 64 MB
# ディスクキャッシュサイズを指定します。
# ufs : ストレージのタイプを指定します。ここでは、Unix File System(UFS)を指定しています。
# /var/cache/squid : キャッシュパスを指定します。
# 600 : ディスクキャッシュサイズを指定します。ここでは、600MBを指定しています。
# 16 : 第1階層のディレクトリ数を指定しています。
# 16 : 第2階層のディレクトリ数を指定しています。
cache_dir ufs /var/cache/squid 600 16 16
# (必要に応じて)キャッシュ不可の条件を定義します。
# ディレクトリ cgi-bin をキャッシュ不可に定義します。
acl no_cache urlpath_regex .*\/cgi-bin\/.*
# 拡張子 .php をキャッシュ不可に定義します。
acl no_cache urlpath_regex .*\.php$
# 拡張子 .php + パラメータをキャッシュ不可に定義します。
acl no_cache urlpath_regex .*\.php\?.*
# no_cache で定義されたものは、すべてキャッシュしないようにします。
cache deny no_cache
メモリキャッシュサイズ(cache_mem)は、ディスクキャッシュサイズ(cache_dir)以下でなければなりません。
ウェブサーバー本体の設定
ウェブサーバー本体の設定は、基本的に2つです。
Listenポート 80 , IPアドレス : 127.0.0.1 に設定する
php に対してデフォルトでexpires(有効期限)情報を出力する
以降に、Apache、Nginxに関しての設定例(上記の変更部分のみ)を簡単に記載しておきます。
Apacheの場合の設定例
/etc/httpd/conf/httpd.conf の設定例
...
# デフォルトの 80ポートを使用する設定を、明示的にlocalhost(127.0.0.1):80 とします。
#Listen 80
Listen 127.0.0.1:80
...
...
<VirtualHost *:80 >
...
ServerName www.exmaple.com
...
# 拡張子 .php については、デフォルトでExpires(有効期限)をヘッダ情報として出力するように設定します。
<Files *.php>
ExpiresActive On
ExpiresByType text/html "access 1 day"
</Files >
...
</VirtualHost >
...
Nginxの場合の設定例
/etc/nginx/nginx.conf の設定例
...
server {
server_name www.exmaple.com ;
...
listen 127.0.0.1:80;
...
location ~ \.php$ {
...
expires 1d;
...
}
...
}
...
Squid および ウェブサーバー本体を再起動
Squid および ウェブサーバー本体を(再)起動します。
$ /etc/init.d/squid start
init_cache_dir /var/cache/squid... squid を起動中: . [ OK ]
...
$ /etc/init.d/httpd start
httpd を起動中: [ OK ]
...
(OR)
$ /etc/init.d/nginx start
nginx を起動中: [ OK ]
...
最後に、ウェブサーバーへアクセスしてみてください。(ここでの例では、http://www.exmaple.com )
2回同じページへアクセスしてみてください。
1回目は、当然、まだ何もキャッシュされていないので、ウェブサーバー本体で最新のページが出力されます。
以下は、その時に出力されたhttpのヘッダ情報です。
(ステータス・ライン)
HTTP/1.0 200 OK
Server nginx/1.0.15
Date Fri, 19 Apr 2013 19:13:32 GMT
Content-Type text/html; charset=UTF-8
Expires Sun, 19 May 2013 19:13:32 GMT
Cache-Control max-age=2592000
X-Cache MISS from web.example.com
X-Cache-Lookup MISS from web.example.com:80
Via 1.0 web.example.com (squid/3.1.10)
Connection close
2回目は、既にキャッシュされたページが出力されます。
以下は、その時に出力されたhttpのヘッダ情報です。
(ステータス・ライン)
HTTP/1.0 200 OK
Server nginx/1.0.15
Date Fri, 19 Apr 2013 19:13:32 GMT
Content-Type text/html; charset=UTF-8
Expires Sun, 19 May 2013 19:13:32 GMT
Cache-Control max-age=2592000
Age 42
X-Cache HIT from web.example.com
X-Cache-Lookup HIT from web.example.com:80
Via 1.0 web.example.com (squid/3.1.10)
Connection close
X-Cache 情報が、MISS
→ HIT に代わればOKです。
今回設定で、基本的なリバースプロキシの設定ができたかと思います。ただ、これだけでは、キャッシュのコントロールもできていませんし、キャッシュの削除もできないような状態です。
次回以降では、キャッシュのコントロールについて、もう少し詳しく解説してみたいと思います。
ご利用のブラウザは、広告ブロック(AdBlockなど) が適用 となっていませんか?
このサイトでは、コンテンツの一部が非表示 、あるいは、コメント、お問い合わせの投稿ができない 、検索ができない ことがあります。
関連記事 :
コメントを投稿 :