[megoldva] Reverse proxy két szerver között

Fórumok

Sziasztok!

Szeretnék egy transzparens squid proxyt 2 szerver között. Az egyik neve legyen proxy-srv a másik meg web-srv. Mindkét gépen Lucid Server fut. A cél az, hogy a felhasználó a böngészőjébe begépelve a példa.hu oldalt a proxy-srv által cache -elt tartalmat kapja, de persze anélkül, hogy neki foglalkoznia kellene a szerveres háttérrel vagy proxyt beállítani, stb.
A proxy-srv -t a web-srv szolgálná ki, utóbbi gépen lighttpd + php5 + mysql kombináció fut. Mindkét gépben csak egy ethernet interface van, de mindkettő rendelkezik publikus IP -vel.

Az is elképzelhető, hogy több virtual hostot kellene kezelni a lighty -val, azaz több különböző domaint kiszolgálni egyszerre, de lehetőleg nem közvetlenül a web-srv gépről, hanem a proxy-srv gépen keresztül.

1. kérdés: ugye jól gondolom, hogy a domain nevek A rekordjainak a proxy-srv gép címére kell mutatniuk? Az én logikám szerint értelmetlen lenne ez az egész, ha az A rekord a web-srv -re mutatna.
2. kérdés: ugye a squid át tudja dobálni a kéréseket úgy a másik gépen található lighty -nak, hogy a lighty képes legyen megkülönböztetni, milyen virtual hostot kell kiszolgálnia?
3. kérdés: ha a squid átdobálja a kéréseket a másik gépen lévő lighty -nak, akkor a lighty a kliens IP címeként mit fog érzékelni? Az eredeti kliens IP címét (a felhasználóét, aki a böngészőben felütötte a példa.hu oldalt) vagy a proxy-srv gépét?
4. kérdés: hogyan érdemes hozzákezdeni?

Jelenleg ott tartok, hogy van két virtuális gépem, a fent leírtaknak megfelelően telepítve (web-srv: lighty+php5+mysql és van rajta két lighty virtual host [weblap], próbaképp; proxy-srv: squid).

Azért érdekes nekem ez a kérdés többek között, mert neten rengeteg transzparens proxy -val foglalkozó leírás van, de azok általában arról szólnak, hogy van egy de facto router gép két darab hálózati interface -szel, az egyik egy kis otthoni vagy céges belső hálón lóg, a másik meg az interneten publikus IP -vel és ezen a gépen keresztül tud mindenki netezni otthonról/cégtől, tehát a belső hálóról. Viszont én meg két darab olyan gép között szeretném ezt megoldani, amelyekben csak egy hálózati kártya van, s ráadásul mindkettő publikus IP címmel, de egymástól távol (nem is egy alhalózatban).

Köszönöm előre is a segítséget!

szerksz: a téma eredeti címe "Transzparens proxy két szerver között" volt, átneveztem

Hozzászólások

szvsz nem nagyon fogsz választ kapni, de azért én is beülök:) subscribe

Visszakérdés: tehát te egy fordított működésű proxy-t szeretnél? Azaz a proxy-srv cache-eli a web-srv szolgáltatását a világnak?

Válaszok:
1. válasz: igen, de egy hálókártyával ez nem lesz egyszerű, sőt az is lehet hogy lehetetlen...
2. válasz: igen.
3. válasz: a proxy-srv IP-je lesz minden kérésben. Ezt nem tudod megkerülni. (Lehet hogy tévedek, akkor fexme :) )
4. válasz: gondold át még egyszer mit is szeretnél, és azt hogy érdemes-e ehhez proxy-t csinálni. Ha egymástól távol levő gépekről van szó, akkor igen csak lassítani fogod a kapcsolatokat.

---
"A megoldásra kell koncentrálni nem a problémára."

Nem feltétlenül fogsz vele gyorsítani rajta. Ismerek egy módszert apachehoz, amivel lehet gyorsítani a dinamikus weblapokon ( a statikus részein :) ). ott is proxizni kell plusz még vannak nyalánkságok :s lightyn nincs proxy modul?

Root-Tech

Ha egy világvégén lévő webszervered szeretnéd proxy mögé rejteni egy esetleges razzia elől, vagy egyéb megfontolásból úgy, hogy kliens oldalon ne kelljen semmit állítgatni és ezt squiddel akarod megcsinálni, akkor:

  • 1: a domain nevek A, vagy CNAME rekordjait irányítsd a proxy-srvre.
  • 2: a squid tud forward és reverz proxyként is működni. Itt a reverz részre lesz szükséged. A request headerekben utazik a Host: paraméter is, amiből a lighttpd tudni fogja, hogy melyik virtual hostot kell kiszolgálnia name based virtualhost esetén.
  • 3: alapesetben a squid új kapcsolatot nyit a web-srvhez, ezért a lighty a kapcsolatoknál a squid ip-jét fogja látni. A request headerben benne van az x-forwarded-for is a kliens ip-jével, de csak akkor, ha a squid a --enable-follow-x-forwarded-for kapcsolóval lett fordítva és a konfigfájlban is benne van, hogy használja. Régebben a debianos csomagokaban ez alapból nem volt bennne. Gyanítom, hogy most sincs. Másik megoldás lenne még a tproxy, amivel a távoli gép már ténylegesen a kliens ip-jét kapja meg, de távoli hálózatoknál ez annyira nem járható út.
  • 4: nézd meg inkább a varnisht, ami erre a célra szerintem sokkal megfelelőbb lenne. http://varnish-cache.org

Köszi neked is a segítséget! Virtuális gépeken kipróbáltam, működik a reverse-proxy szépen (vhost -tal is), de a --enable-follow-x-forwarded-for az tényleg nem megy, hiába állítom be a squid.conf -ban (gugli 2007 -es fórumtémákat dobott ki. Majd meggondolom, mennyire fontos ez nekem (annyira lehet nem, hogy forrásból forgassak squid -et).

Leforgattam a squid 2.7.STABLE9 -et forrásból. Ezt kaptam:


root@vbox:~/#squid -v
Squid Cache: Version 2.7.STABLE9
configure options:  '--enable-ssl' '--enable-follow-x-forwarded-for' '--prefix=/usr' '--localstatedir=/var' '--libexecdir=/lib/squid' '--srcdir=.' '--datadir=/share/squid' '--sysconfdir=/etc/squid'

Megy is, működik, a kéréseket átdobálja a web-srv részére, működik a név alapú vhost a lighty -val. De hiába van a /etc/squid.conf -ban egy ilyen ACL -em:


acl mysite dstdomain tesztsite.local
follow_x_forwarded_for allow mysite
http_access allow mysite
cache_peer_access myAccel allow mysite

mégis a proxy szerver IP címe van a /etc/lighttpd/access.log -ban (amikor megnézem a tesztsite.local oldalt egy másik kliensgép böngészőjéből) és nem a kliens IP -je.

Valakinek van ötlete, hogy miért nem működik a kliens IP címének továbbítása?

A kliens ip-je valóban a proxy ip-je marad, de a request headerben benne van az, ami neked kell. Az egyik megoldás az általad is megtalált extforward modul, a másik pedig a logformat módosítása, hogy a host ip helyett az x-forwarded-for headert logolja:

accesslog.format = "%{X-Forwarded-For}i %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\""

Ugyan a kérdésed nem értem (nem jöttem rá, mi a te gondod), de a linked rávezetett a nekem szükséges megoldásra. :)
Az én problémámra a megoldás: Ligty -ban engedélyezni kell a mod_extforward -ot és persze beállítani. Link: http://redmine.lighttpd.net/wiki/1/DocsModExtForward

Nekem az a problémám, hogy próba jelleggel akartam egy reverse proxy-t rakni egy Apache elé. Az Apache maradt a 80-as porton, a Squid-et a 81-re raktam. Minden megy is szépen, de ha jelszóval védett oldalt szeretnék megnyitni a proxyn keresztül akkor fogja magát és átdob az Apache portjára, de csak akkor.