2011-11-15 19 views
15

Uygulamamın bağlamsal kökü maskelemek için mod yeniden yazma özelliğini kullanıyorum. Örneğin,Mod yeniden yazımı kullanıyorsanız ProxyPassReverse kullanmalı mıyım?

RewriteRule ^/directory/(.*) balancer://appcluster/directory/$1 [P] 

appcluster şuna benzer:

<Proxy balancer://appcluster> 
BalancerMember http://localhost:8080/App route=app_01 keepalive=On loadfactor=1 ttl=300 min=3 smax=5 max=15 

ProxySet lbmethod=byrequests stickysession=JSESSIONID|jsessionid timeout=120 nofailover=On 
</Proxy> 

ben hiç ProxyPassReverse kullanmak gerekir mi? Apaçi tarayıcının göndermeden önce

ProxyPass /App balancer://appcluster lbmethod=byrequests stickysession=JSESSIONID|jsessionid timeout=120 nofailover=On 

ProxyPassReverse /App http://localhost:9013/App 

cevap

47

ProxyPassReverse, Apache üzere uygulamaların (appcluster) tarafından gönderilen başlıklarını değiştirmek için kullanılır: Eski web sunucusu kod böyle görünüyordu çünkü kullanmak için kullanılır. Örneğin, uygulama http://localhost:9013/'da oturur ve tarayıcıyı /new_location/ olarak yeniden yönlendirmeye çalışırsa, http://localhost:9013/new_location/ yönlendirmesi ve konum üstbilgisi ile yanıt verir ve Apache bunu alıp tarayıcıya gönderir. Sorun şu ki, tarayıcı (başka bir yerde olduğunu varsayarak) http://localhost:9013/new_location/'a bir istek göndermeye çalışır ve bir hata alır.

ProxyPassReverse, bu üstbilgileri engeller ve proxy uygulamasının yaptığı Apache sunucusunun neye benzediğini eşleştirmek için yeniden yazar. Benim apache server http://myhost.com/ barındıran ve ben işaret eden bir ProxyPass varsa localhost oturan uygulama Yani eğer http://localhost:9013/App için /: 9013 http://localhost:9013/App/new_location/ yönlendirme döndürür, ben daha önce Apache tarafından http://myhost.com/new_location/ için yeniden alır böylece ProxyPassReverse kullanmanız gerekir isteği tarayıcıya geri gönderir.

Yönlendirmeler yayınlamıyorsanız, bu bir sorun olmayacaktır, ancak 301/302 yönlendirmesinin döndürülmesi durumunda oraya sahip olmak zarar vermez. Mod_rewrite'e gelince, RewriteRule, App'den gelen istek için değil, Uygulama'dan gelen istek için de geçerlidir. Bu yüzden karşılıklı olarak özel olaylar.

+0

Bu nedenle, proxy'mizin geri dönüşü aşağıdaki gibi olur: ProxyPassReverse/App/directory http: // localhost: 9013/App/directory? –

+0

Sanırım sahip olduklarınız doğru. İnsanları, sağdaki URL'nin localhost değil, dış alan adı olduğu yerlerde kullandığını gördüm. Jboss dağıtımlarım, ProxyPassReverse'ı tıpkı kullandığınız gibi kullanıyor ve yalnızca iyi yönlendiriyorlar. –

+0

ProxyPassReverse ve bunun gerekliliği hakkında çok güzel Açıklama. @jon lin .. Teşekkür ederim –