Squidによるリバーシプロキシをやってみた結果503エラーとなり失敗して諦めました

photoshoplabにリバースプロキシの設定を使用と思いました。PhotoshoplabはApacheを使っているのでapacheを使ってできないか探してみました。

Squidを使ってリバースプロキシ設定

Squidというのを見つけました。これをつかってリバースプロキシができるとのことなので設定してみました。参考サイトは[CentOS6][Squid] リバースプロキシでキャッシュサーバにする](http://blue21.ddo.jp/server_koutiku/server-centos6/cos6_cache01.html)のページになります。

インストール

[c] yum install -y squid [/c] インストールします。 [c]

Recommended minimum configuration:

#acl manager proto cache_object #acl localhost src 127.0.0.1/32 ::1 #acl to_localhost dst 127.0.0.0/8 0.0.0.0/32 ::1 acl localhost src 127.0.0.1/32

Example rule allowing access from your local networks.

Adapt to list your (internal) IP networks from where browsing

should be allowed

#acl localnet src 10.0.0.0/8 # RFC1918 possible internal network #acl localnet src 172.16.0.0/12 # RFC1918 possible internal network #acl localnet src 192.168.0.0/16 # RFC1918 possible internal network #acl localnet src fc00::/7 # RFC 4193 local private network range #acl localnet src fe80::/10 # RFC 4291 link-local (directly plugged) machines #acl SSL_ports port 443 acl Safe_ports port 8080 # http #acl Safe_ports port 21 # ftp #acl Safe_ports port 443 # https #acl Safe_ports port 70 # gopher #acl Safe_ports port 210 # wais #acl Safe_ports port 1025-65535 # unregistered ports #acl Safe_ports port 280 # http-mgmt #acl Safe_ports port 488 # gss-http #acl Safe_ports port 591 # filemaker #acl Safe_ports port 777 # multiling http #acl CONNECT method CONNECT

Recommended minimum Access Permission configuration:

Only allow cachemgr access from localhost

#http_access allow manager localhost #http_access deny manager http_access allow all #http_access allow localhost

Deny requests to certain unsafe ports

http_access deny !Safe_ports

Deny CONNECT to other than secure SSL ports

#http_access deny CONNECT !SSL_ports

We strongly recommend the following be uncommented to protect innocent

web applications running on the proxy server who think the only

one who can access services on "localhost" is a local user

#http_access deny to_localhost #http_access allow all

INSERT YOUR OWN RULE(S) HERE TO ALLOW ACCESS FROM YOUR CLIENTS

Example rule allowing access from your local networks.

Adapt localnet in the ACL section to list your (internal) IP networks

from where browsing should be allowed

#http_access allow localnet #http_access allow localhost

And finally deny all other access to this proxy

#http_access deny all

Squid normally listens to port 3128

#http_port 3128 http_port 8080 vhost

We recommend you to use at least the following line.

hierarchy_stoplist cgi-bin ?

Uncomment and adjust the following to add a disk cache directory.

#cache_dir ufs /var/spool/squid 100 16 256 cache_peer 127.0.0.1 parent 80 0 no-query originserver cache_dir ufs /var/spool/squid 8000 32 512

Leave coredumps in the first cache dir

coredump_dir /var/spool/squid

Add any of your own refresh_pattern entries above these.

#refresh_pattern ^ftp: 1440 20% 10080 #refresh_pattern ^gopher: 1440 0% 1440 #refresh_pattern -i (/cgi-bin/|?) 0 0% 0 refresh_pattern . 30 20% 3600 #ログファイル logformat combined %>a %ui %un [%tl] "%rm %ru HTTP/%rv" %>Hs %<st "%{Referer}>h" "%{User-Agent}>h" %Ss:%Sh access_log /var/log/squid/access.log combined

HTTP_X_FORWARDED_FOR 環境変数には Unknown という値が入る

forwarded_for off

HTTP_VIA 環境変数を unknown にする

visible_hostname unknown

メモリを節約する

memory_pools off [/c] 設定をします。設定が終わったら今度はapacheの設定をします。

Apacheの設定

[c] vi /etc/httpd/conf.d/photoshoplab.conf [/c] バーチャルホストの設定をします。 [c] <IfModule mod_proxy.c> ProxyRequests Off <Proxy *> Order deny,allow Allow from all ProxyPass / http://www.photoshoplab.jp:8080/ retry=5 ProxyPassReverse / http://www.photoshoplab.jp:8080/ [/c] こんな感じに設定します。

503エラー

Apacheの再起動とSquidを起動すると503エラーになります。人生初の503エラーがでてちょっと嬉しいと思いながらなぜ今でる!?という感覚になりました。

原因

503エラーは過負荷やメンテナンスなどで起きるエラーですが、正直なぜ起きたのかわかりませんでした。調べて見たらもしかしてSELinuxが影響しているのではないかとなりました。

SELinuxが有効化か調べる

SELinuxが有効化か調べて見ました。 [c] [root@localhost]# getenforce Enforcing [/c] SELinuxが有効化でした。無効化するには以下のコマンドを使います。 [c] [root@localhost ~]# setenforce 0 [root@localhost]# getenforce Permissive ←無効化になりました [/c] 無効化にしましたが、サーバーを再起動すると有効化されます。サーバーを再起動しても有効化されないようにするには以下のようにします。 [c] #vi /etc/sysconfig/selinux

This file controls the state of SELinux on the system.

SELINUX= can take one of these three values:

enforcing - SELinux security policy is enforced.

permissive - SELinux prints warnings instead of enforcing.

disabled - No SELinux policy is loaded.

SELINUX=enforcing ← disabledにします

SELINUXTYPE= can take one of these two values:

targeted - Targeted processes are protected,

mls - Multi Level Security protection.

SELINUXTYPE=targeted [/c]

治らない503エラー

SELinuxを無効にしても治りませんでした。そのため、今回は諦めました。