Apacheのmod_proxyのモジュールは、代理店サービスの提供のために提供フォワードプロキシ、リバースプロキシ、透過プロキシ、キャッシング、ロードバランシング、いくつかの強力なHTTPプロキシ、FTPプロキシ、SSLおよび他の薬剤を含むサポートすることができます。
、シンプルでプロキシメソッドを設定し最初のApacheでのmod_proxyモジュールを有効にする、Apache-2.2ならば、あなたもmod_proxy_http呼ばれるモジュールをロードする必要があることに留意されたいです。2.2シリーズNが小さいモジュールに分割プロキシ機能ので。
コンパイル時に、私たち一般のApacheのこれらの機能は、一緒にコンパイル時に関連するパラメータで、モジュールの形で添加し、次にそれをコンパイルしてインストールされています。
./configure --prefix =は/ usr / local / apache2の--enable-SO --enable書き換え= --enableプロキシ=共有共有を
作る && make installを
私は私が最初にここにいないのApacheのプロキシモジュールがインストールされていない場合は、再コンパイルせずにモジュールを追加することができ、Apacheの中にはそのようなモジュールはありません見ました。
/ usr / local / apache2の/ binに/〜CをAPXS - I mod_proxy.c proxy_util.c(PS C 2が一緒にコンパイルされなければならない、またはエラーであろう)
は/ usr / local / apache2の/ binに/ -i mod_proxy_http.c APXS -C proxy_util.c
プロキシモジュールにコンパイルして、プロキシ設定ファイルの設定に追加、されていない場合、コンテンツ以下を追加し、#番号は、次の3行を削除します。
Proxy_moduleモジュールのLoadModule / mod_proxy.so#必要なモジュール Proxy_connect_moduleモジュールのLoadModule / などQQ、MSNなどmod_proxy_connect.so#アプリケーション・ソフトウェア・エージェント Proxy_http_moduleモジュールのLoadModule /mod_proxy_http.so #http要求プロキシアクセスのWebページ
まず、フォワードプロキシ
私はフォワードプロキシ(フォワードプロキシ)をお話しましょう、より一般的に普通のユーザーによって使用されている、それはフォワードプロキシです。つまり、プロキシサーバー経由のトランジットへのネットワーク接続のプロパティ]ボックスのブラウザ、塗りつぶしのプロキシサーバーのIPアドレスとポートは、ウェブを閲覧します。時には、プロキシIPアクセスを設定する操作の数が行われ、単一のIP制限の特定のサイト、常にサイトの制限を破るために、プロキシIPを変更するだけでなく、フォワードプロキシ。
このプロキシ設定は非常に簡単です:
図1に示すように、ApacheのCONFを開き、優れたプロキシモジュールを有効にした後、次の行:(グローバルコンフィギュレーション)を追加
ProxyRequestsをオン これは、ProxyViaです <プロキシ*> ご注文は、許可、拒否します 拒否からすべて 許可から 192.16。10.0 / 24 </プロキシ>
次のように2は、もちろん、また、仮想ホストで提供することができます。
仮想ホストを有効にします
NameVirtualHostで*:80 の<VirtualHost *:80 > SERVERADMIN [email protected] DocumentRootの / VAR / www /のテスト サーバー名www.test.com ErrorLogログ /dummy-host.example.com- のerror_log CustomLogログ /dummy-host.example.com- access_logの共通 <ディレクトリ" は/ var / www /のテスト" > オプションFollowSymLinksを AllowOverrideのなし ご注文は、許可、拒否します 許可からすべての </ディレクトリ> ProxyRequestsをオン これは、ProxyViaです <プロキシ*> ご注文は、許可、拒否します 拒否からすべて 許可から 192.168。10.0 / 24 </プロキシ> </ VirtualHost>の
その後、Apacheサービスがロードされ、ブラウザは、現在のネットワーク接続のプロパティまたはQQのログインボックスの設定、IPアドレスでyour_apache_server_ip塗りつぶし、ポート80は、エージェントから始まることができ、保存して終了して再起動します。
あなたは、クライアントのソースを制限するために、認証、またはACLの設定を追加することができ、アパッチが提供するプロキシを使用してください。これらの構成とApacheのサイトなどの一般的な構成。
実際には、キーはProxyRequestsをターンを持つことで、あなたは機能を使用することができるだろう。
第二に、リバースプロキシ
リバースプロキシは、非常に便利な機能です。リバースプロキシ(リバースプロキシ)モードでは、インターネット上の接続要求を受け入れるためにプロキシサーバを参照し、内部ネットワーク上のサーバへの転送要求、およびクライアントに接続されたサーバから得られた結果は、インターネットを要求返しますこの時点で、リバースプロキシサーバーのパフォーマンス上の外部プロキシサーバ。安全な、よりリアルバックエンドサーバーを非表示にするには、内部のセキュリティコンテンツサーバにファイアウォール、プロキシファイアウォールの外側から暗号化された接続を提供するWebサーバの設定を行うために使用します。このような負荷分散として、CDNキャッシュは、リバースプロキシです。以下のような構成は以下のとおりです。
図1は、良好なプロキシモジュールを有効にした後、次のコンテンツ:(グローバル設定を追加)
ProxyRequestsをオフ <プロキシ/テスト> ご注文は、許可、拒否します 許可からすべての </プロキシ> はProxyPass:/テストのhttp // www.reverse.com/proxy にProxyPassReverse /テストのhttp:// www.reverse.com/proxy
次のように2は、仮想ホストが設定されています。
仮想ホストを有効にします
NameVirtualHostで*:80 の<VirtualHost *:80 > SERVERADMIN [email protected] サーバー名www.test.com ErrorLogログ /dummy-host.example.com- のerror_log CustomLogログ /dummy-host.example.com- access_logの共通 ProxyRequestsをオフ <プロキシ/テスト> ご注文は、許可、拒否します 許可からすべての </プロキシ> はProxyPass /テストのhttp:// www.reverse.com/proxy にProxyPassReverse /テストのhttp:// www.reverse.com/proxy </ VirtualHost>の
ProxyPass /テストhttp://www.reverse.com/proxy:ドメインへwww.test.com/test転送し、すべての要求 www.reverse.com/proxy剤、例えばwww.test.com/test/login。 PHPが得られます www.reverse.com/proxy/login.phpエージェントを。
ProxyPassReverse /テスト http://www.reverse.com/proxy :
次のコードを持っているwww.reverse.com/proxy/login.php:
<?PHPの ヘッダ( '場所:http://www.reverse.com/proxy/result.php' )。 ?>
その後、時間をリダイレクトは、Apache HTTPリクエストはHTTPに再設定されます。// www.reverse.com/proxy/result.php、そのような役割は後で説明
www.reverse.com/proxy/result.phpあり次のコード:
<?PHP のエコー「こんにちは」; ?>
結果にアクセスするためのブラウザ、訪問:www.test.com/proxy/login.php
図HTTPリクエスト:
実際には、要求は、要求またはwww.test.comで見つけることができますが、それは本当にされ www.reverse.com扱い
reverse.com/proxy/login.phpはにリダイレクト www.reverse.com/proxy/proxy/result.php
図HTTPリクエスト:
また、リクエストがまだ見ることができますwww.test.com/proxy/result.php
ProxyPassReverseは、ここに遊びにされている場合ではない用語、リダイレクトHTTPは、次の図に要求した後:
www.reverse.com www.test.comではないにProxyPassReverse、www.reverse.com /プロキシ/ login.phpの構成はwww.reverse.com/proxyにリダイレクトするので、これはGETリクエストで見つけることができます/result.php、Apacheはwww.test.com/proxy/result.phpそれをスイッチバックした後、Apacheのプロキシwww.test.com/proxy/result.php www.reverse.com/proxy/resultのとき.php、これにProxyPassReverseの構成は、プログラムの下でさえwww.reverse.com/proxyは(そのようresult.phpにlogin.phpリダイレクトなど)他のwww.proxypss.com/proxyファイルにリダイレクトされていることを、あなたにあなたは、要求に影www.reverse.comを見つけることができません。
三、ProxyPassディレクティブと概要ProxyVia、にProxyPassReverseとのProxyPassMatch
1、はProxyPass:
構文:ProxyPassの[パス] | URLを!
它主要是用作URL前缀匹配,不能有正则表达式,它里面配置的Path实际上是一个虚拟的路径,在反向代理到后端的url后,path是不会带过去的,使用示例:
(1)、ProxyPass /images/ !
这个示例表示,/images/的请求不被转发。
(2)、ProxyPass /site/foo/ http://back.reverse.com/
我们假设当前的服务地址是http://test.com/,如果我们做下面这样的请求:
http://test.com/siter/foo/bar
那将被转成内部请求:
http://back.reverse.com/bar
注:配置的时候,不需要被转发的请求,要配置在需要被转发的请求前面。
2、ProxyVia
语法:ProxyVia [OPTION]
ProxyVia On:控制位于代理服务器链中的代理请求的流向
引用 Apache2.2 官方文档中对 ProxyVia 的解释如下:
如果设置为默认值 Off ,将不会采取特殊的处理。如果一个请求或应答包含 "Via:" 头,将不进行任何修改而直接通过。
如果设置为 O n每个请求和应答都会对应当前主机得到一个 "Via:" 头。
如果设置为 Full ,每个产生的 "Via:" 头中都会额外加入 Apache 服务器的版本,以 "Via:" 注释域出现。
如果设置为 Block ,每个代理请求中的所有 "Via:" 头行都将被删除。且不会产生新的 "Via:" 头。
3、ProxyPassMatch:
语法:ProxyPassMatch [regex] !|url
这个实际上是 url 正则匹配,而不是简单的前缀匹配,匹配上的 regex 部分是会带到后端的 url 的,这个是与 ProxyPass 不同的。使用示例:
(1)ProxyPassMatch ^/images !
这个示例表示对 /images 的请求,都不会被转发。
(2) ProxyPassMatch ^(/.*\.gif)$ http://img.reverse.com$1
这个示例表示对所有 gif 图片的请求,都被会转到后端,如此时请求 http://test.com/foo/bar.gif,那内部将会转换为这样的请求 http://img.reverse.com/foo/bar.gif。
4、ProxyPassReverse
语法:ProxyPassReverse [路径] url
它一般和 ProxyPass 指令配合使用,此指令使 Apache 调整 HTT P重定向应答中 Location, Content-Location, URI 头里的 URL,这样可以避免在 Apache 作为反向代理使用时,后端服务器的 HTTP 重定向造成的绕过反向代理的问题。参看下面的示例:
ProxyPass /example http://www.reverse.com/
ProxyPassReverse /example http://www.reverse.com/
ProxyPassReverse 的作用就是反向代理,如果没有加这样的反向代理设置的情况下,访问 http://www.test.com/example/a,如果 www.reverse.com 对请求进行了 redirect 至 http://www.reverse.com/b,那么,客户端就会绕过反向代理,进而访问 http://www.reverse.com/example/b 。如果设置了反向代理,则会在转交 HTTP 重定向应答到客户端之前调整它为 http://www.test.com/example/a/b,即是在原请求之后追加上了 redirect 的路径。
四、Apache 负载均衡配置
我们同样可以利用 mod_proxy 来做负载均衡,mod_proxy_balancer 是 Apache httpd 自带的负载平衡支持。其优点可以根据实际的运行时机器的环境来决定负载均衡的策略,实现 Session 在 node 上进行共享传递。
1、轮询均衡策略的配置
配置负载均衡时,还要在加上一个模块:
LoadModule proxy_balancer_module modules/mod_proxy_balancer.so <VirtualHost *:80> ServerAdmin [email protected] ServerName www.test.com ErrorLog logs/dummy-host.example.com-error_log CustomLog logs/dummy-host.example.com-access_log common <Proxy balancer://mycluster> BalancerMember http://192.168.10.121:80/ BalancerMember http://192.168.10.122:80/ BalancerMember http://192.168.10.123:80/ </Proxy> ProxyRequests Off ProxyPass / balancer://mycluster/ ProxyPassReverse / balancer://mycluster/ </VirtualHost>
我们来观察上述的参数“ProxyPass / balancer ://www.test.com/”,其中,“ProxyPass ”是配置虚拟服务器的命令,“/”代表发送 Web 请求的 URL 前缀,如:http://www.test.com/ 或者 http://www.test.com/test,这些URL都将符合上述过滤条件;“balancer ://www.test.com/”表示要配置负载均衡,proxy 代表负载均衡名;Balancer Member 及其后面的 URL 表示要配置的后台服务器,其中 URL 为后台服务器请求时的 URL。以上面的配置为例,实现负载均衡的原理如下:
假设 Apache 接收到 http://localhost/test 请求,由于该请求满足 ProxyPass 条件(其URL前缀为“/”),该请求会被分发到后台某一个 Balancer Member,比如,该请求可能会转发到 http://192.168.10.121:80/test 进行处理。当第二个满足条件的 URL 请求过来时,该请求可能会被分发到另外一台 Balancer Member,转发到 http://192.168.10.122:80/ 或 http://192.168.10.123:80/ 上 。如此循环反复,便实现了负载均衡的机制。
2、按权重分配均衡策略的配置
<VirtualHost *:80> <Proxy balancer://mycluster> BalancerMember http://192.168.10.121:80/ loadfactor=3 BalancerMember http://192.168.10.122:80/ loadfactor=1 BalancerMember http://192.168.10.123:80/ loadfactor=2 </Proxy> ProxyRequests Off ProxyPass / balancer://mycluster/ ProxyPassReverse / balancer://mycluster/ </VirtualHost>
参数”loadfactor”表示后台服务器负载到由 Apache 发送请求的权值,该值默认为 1,可以将该值设置为 1 到 100 之间的任何值。以上面的配置为例,介绍如何实现按权重分配的负载均衡,现假设 Apache 收到 http://www.test.com/test 6 次这样的请求,该请求分别被负载到后台服务器,则有 3 次连续的这样请求被负载到 Balancer Member 为 http://192.168.10.121:80 的服务器,有 1 次这样的请求被负载 Balancer Member 为 http://192.168.10.122:80 后台服务器 。有 2 次这样的请求被负载 Balancer Member 为 http://192.168.10.123:80 后台服务器实现了按照权重连续分配的均衡策略。
3、权重请求响应负载均衡策略的配置
ProxyPass / balancer://mycluster/ lbmethod=bytraffic
或
<Proxy balancer://mycluster lbmethod=bytraffic>
或
<VirtualHost *:80> <Proxy balancer://mycluster> BalancerMember http://192.168.10.121:80/ loadfactor=3 BalancerMember http://192.168.10.122:80/ loadfactor=1 BalancerMember http://192.168.10.123:80/ loadfactor=2 </Proxy> ProxyRequests Off ProxyPass / balancer://mycluster/ ProxyPassReverse / balancer://mycluster/ ProxySet lbmethod=bytraffic </VirtualHost>
在这三的地方配置都可以,Apache 可以识别这三种配置方法。
参数“lbmethod=bytraffic”表示后台服务器负载请求和响应的字节数,处理字节数的多少是以权值的方式来表示的。“loadfactor”表示后台服务器处理负载请求和响应字节数的权值,该值默认为 1,可以将该值设置在 1 到 100 的任何值。根据以上配置是这么进行均衡负载的,假设 Apache 接收到 http://www.test.com/test 请求,将请求转发给后台服务器,如果Balancer Member为 http://192.168.10.121:80 后台服务器负载到这个请求,那么它处理请求和响应的字节数是 Balancer Member 为 http://192.168.10.122:80 服务器的3倍(回想(2)均衡配置,(2)是以请求数作为权重负载均衡的,(3)是以流量为权重负载均衡的,这是最大的区别)。
lbmethod可能的取值有:
lbmethod=byrequests 按照请求次数均衡(默认)
lbmethod=bytraffic 按照流量均衡
lbmethod=bybusyness 按照繁忙程度均衡(总是分配给活跃请求数最少的服务器)
4、管理界面配置
<Location /balancer-manager> SetHandler balancer-manager Order Allow,Deny Allow from all </Location>
负载管理模块,一般用来管理集群节点,可以动态设置“权重”,“主机状态”等信息。
5、热备份(Hot Standby)
热备份的实现很简单,只需添加 status=+H 属性,就可以把某台服务器指定为备份服务器:
<VirtualHost *:80> <Proxy balancer://mycluster> BalancerMember http://192.168.10.121:80/ BalancerMember http://192.168.10.122:80/ status=+H </Proxy> ProxyRequests Off ProxyPass / balancer://mycluster/ ProxyPassReverse / balancer://mycluster/ </VirtualHost>
从 balancer-manager 界面中可以看到,请求总是流向 192.168.10.121 ,一旦 192.168.10.121 挂掉,Apache 会检测到错误并把请求分流给 192.168.10.122。Apache 会每隔几分钟检测一下 192.168.10.121 的状况,如果 192.168.10.121 恢复,就继续使用 121。
6、http-header 配置
<VirtualHost *:80> Header add Set-Cookie "ROUTEID=.%{BALANCER_WORKER_ROUTE}e; path=/" env=BALANCER_ROUTE_CHANGED <Proxy balancer://mycluster> BalancerMember http://192.168.10.121:80/ loadfactor=3 route=1 nofailover=Off BalancerMember http://192.168.10.122:80/ loadfactor=1 route=2 nofailover=Off BalancerMember http://192.168.10.123:80/ loadfactor=2 route=3 nofailover=Off ProxySet stickysession=ROUTEID nofailover=Off </Proxy> ProxyRequests Off ProxyPass / balancer://mycluster/ ProxyPassReverse / balancer://mycluster/ </VirtualHost>
或加在
ProxyPass / balancer://mycluster/ nofailover=Off
使用 Apache 的 http-header 这个模块,由 Apache来自动生成 cookie。
stickysession session粘连,就是说用户一旦访问了某个 Balancer Member,就给他个 cookie,让他在后面的请求都访问那个 Balancer Member 。
ProxyPass 那行 最后的 stickysession=ROUTEID,表示从 cookie 中读取 ROUTEID,并自动分配到相应的服务上去。如果后端服务器使用不同的cookie名称或者URL编码的ID(像servlet容器),使用|来分开他们。第一个部分针对cookie,第二个针对路径。如:
ProxyPass / balancer://mycluster
stickysession=JSESSIONID|jsessionid
nofailover 是否打开失败转移,默认为‘Off’,如果设为‘On’,当工作单元被禁用或者出错时,如果这样配置,当提供给你服务的服务器发生异常,那么你将一直看着它返回给你503,直到系统恢复正常!
还有其它参数可以添加:
maxattempts 默认值是 1,在放弃之前的故障转移的最大尝试次数。
デフォルトのタイムアウト値は0秒でイコライザータイムアウトです。セットは、その自由作業単位を待っている最大時間である場合、デフォルトは不平等です。