Apacheのフォワードプロキシとリバースプロキシの設定

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.1610.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.16810.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リクエスト:

proxy1.png

実際には、要求は、要求またはwww.test.comで見つけることができますが、それは本当にされ  www.reverse.com扱い

reverse.com/proxy/login.phpはにリダイレクト  www.reverse.com/proxy/proxy/result.php

図HTTPリクエスト:

proxy2.png

また、リクエストがまだ見ることができますwww.test.com/proxy/result.php

ProxyPassReverseは、ここに遊びにされている場合ではない用語、リダイレクトHTTPは、次の図に要求した後:

proxy3.png

 

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秒でイコライザータイムアウトです。セットは、その自由作業単位を待っている最大時間である場合、デフォルトは不平等です。    

おすすめ

転載: www.cnblogs.com/Json159/p/11996984.html