Birden çok hedef ve bir varsayılan hedef için ters proxy olarak Apache


5

Bir sonraki Apache'nin reverse-proxysorunu için yardım mı arıyorsunuz ?

  • localhost'ta Apache 2.4 var: 80 (aaaa: 80)
  • 3 farklı web uygulamasına sahip
    • biri localhost üzerinde çalışır: 8000 (aaaa: 8000)
    • diğer ikisi ise diğer makinelerde - yani xxxx: 8000 ve yyyy: 8000
  • Apache'de bazı statik içeriklere sahip (birkaç tane html sayfası): 80 's DocumentRoot

Gereksinimler :

Bu kolay yapılandırmak olduğunu appXve appYsonraki gibi:

ProxyPass         /appX/ http://x.x.x.x:8000/
ProxyPassReverse  /appX/ http://x.x.x.x:8000/

ProxyPass         /appY/ http://y.y.y.y:8000/
ProxyPassReverse  /appY/ http://y.y.y.y:8000/

Yukarıdakiler tamamdır. Yani erişim denendiğinde adresinden http://localhost/appX/bir yanıt aldı .appXx.x.x.x:8000

Ama bir sorun var default destinatonFor everything other. Eklemeye çalıştığınızda:

ProxyPass         /   http://127.0.0.1:8000/
ProxyPassReverse  /   http://127.0.0.1:8000/

Umarım gibi işe yaramaz.

Yukarıdaki ile apache'ye söylemek isteyin - başka bir şey olmayan /appX/ya da /appY/gönderilen 0:8000.

Ve bu, maalesef işler değil defappüzerinde çalışan neyi 0:8000taleplerini aldık appXve appYve çok statik sayfalar için istekleri.

Tanımların sırasını değiştirme,

#define first the "default destination"
ProxyPass         /   http://127.0.0.1:8000/
ProxyPassReverse  /   http://127.0.0.1:8000/

#and after the appX and appY
ProxyPass         /appX/ http://x.x.x.x:8000/
ProxyPassReverse  /appX/ http://x.x.x.x:8000/
ProxyPass         /appY/ http://y.y.y.y:8000/
ProxyPassReverse  /appY/ http://y.y.y.y:8000/

ya da çalışmıyor. Her şey proxy'ye verildi localhost:8000.

Öyleyse, soru şudur: Apache'yi yukarıda tanımlanan gereksinimleri yerine getirmek için ters bir vekil olarak ayarlamak mümkün mü?

Yanıtlar:


6

ProxyPass referanslarınızı şöyle <VirtualHost>tanımlayın:

<VirtualHost *:*>
ProxyPreserveHost On
ProxyPass / http://192.168.111.2/
ProxyPassReverse / http://192.168.111.2/
ServerName hostname.example.com
</VirtualHost>

İstediğiniz SunucuAdıları ile iki ayrı sunucu oluşturun, ardından SunucuAdı veya tanımlanmış Proxy seçenekleri olmadan başka bir tane oluşturun (sadece DocumentRoot). Sonuncuyu koy.

Daha fazla bilgi burada .


Bu, proxy olmayan bir yerel klasörle çalışır. Ancak, tüm klasörler diğer ana bilgisayarlarda ise bu nasıl çalışır? Mod_proxy kullanarak mümkün mü değil mi? Bu problemim var.
Michael

@Michael Sormanız gereken farklı bir soru olurdu.
Nathan C

0

Bayrakla yeniden yazma kurallarınıP kullanabilirsiniz .

Yeniden yazma kuralları, ProxyPass yönergelerine göre daha esnektir Lve kural kümesini işlemeyi durdurmak ve bahsettiğiniz sorunu önlemek için bayrağı kullanabilirsiniz (birden çok arka uca çarparak).

İşte bir örnek:

ProxyPreserveHost   On
RewriteEngine       On

RewriteRule         ^/app/(.*) http://127.0.0.1/$1 [P,L]
ProxyPassReverse    /app/ http://127.0.0.1/app

RewriteRule         ^/blog/(.*) http://127.0.0.1/blog/$1 [P,L]
ProxyPassReverse    /blog/ http://127.0.0.1/blog

RewriteRule         ^/(.*) http://127.0.0.1/$1 [P,L]
ProxyPassReverse    / http://127.0.0.1

Üzgünüm, ama bu çalışmıyor.
Garreth McDaid

0

Warren Seine'nin cevabındaki küçük gelişme (ilk RewriteRule'da "app /" yazılmadı (.... 127.0.0.1/$1 [P ....))

RewriteRule         ^/app/(.*) http://127.0.0.1/$1 [P,L]

olmalıdır

RewriteRule         ^/app/(.*) http://127.0.0.1/app/$1 [P,L]

Öyleyse, özetleyin - Tüm bağlantılarınızın birkaç ana bilgisayar arasında dağıtılması durumunda (durumunuzda olduğu gibi) şunu deneyin:

ProxyPreserveHost   On
RewriteEngine       On

RewriteRule         ^/appX/(.*) http://x.x.x.x:8000/$1 [P,L]
ProxyPassReverse    /appX/      http://x.x.x.x:8000/
RewriteRule         ^/appY/(.*) http://y.y.y.y:8000/$1 [P,L]
ProxyPassReverse    /appY/      http://y.y.y.y:8000/
RewriteRule         ^/(.*)      http://127.0.0.1:8000/$1 [P,L]
ProxyPassReverse    /           http://127.0.0.1:8000

Bağlantılarınızı bir ana bilgisayara yaymanız gerektiğinde (farklı bağlantı noktaları ve BaseURL'ler ile)

ProxyPreserveHost   On
RewriteEngine       On

RewriteRule         ^/appX/(.*) http://127.0.0.1:8001/appX/$1 [P,L]
ProxyPassReverse    /appX/      http://127.0.0.1:8001/appX
RewriteRule         ^/appY/(.*) http://127.0.0.1:8002/appY/$1 [P,L]
ProxyPassReverse    /appY/      http://127.0.0.1:8002/appY/
RewriteRule         ^/(.*)      http://127.0.0.1:8000/$1 [P,L]
ProxyPassReverse    /           http://127.0.0.1:8000
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.