Reverzní proxy na druhý server

cartman

Reverzní proxy na druhý server
« kdy: 28. 04. 2011, 15:59:53 »
zdar, mam server A , za A, za firewallom, server B, stranky su na servery B a chcem, aby ked zadam domenu, tak sa to pytalo web servera na B, cize nejakadomena.com z internetu pojde rovno na B server (cez A)

ide ale o to, ze ked citam manual k proxy, tak
Kód: [Vybrat]
ProxyPass /mirror/foo/ http://backend.example.com/
ProxyPassReverse /mirror/foo/ http://backend.example.com/

cize ked dam dns A + /mirror/foo tak ma to nasmeruje na beckend.example.com (cize nase B)

ja ale chcem, aby som nezadaval za A server nic, len proste aby redirectol moju poziadavku nejakadomena.com hned na B, cize aby som nezadaval ip/dns A servera + nejaku cestu ale rovno len domenu, ktora patri strankam na B

dakujem za rady
« Poslední změna: 28. 04. 2011, 16:59:18 od Petr Krčmář »


Nassir

Re: Reverzní proxy na druhý server
« Odpověď #1 kdy: 28. 04. 2011, 17:09:57 »
Jedna z moznosti je urobit si v apache virtualhost asi takto:
Kód: [Vybrat]
<VirtualHost *:80>
    ServerName www.example.com
    ProxyRequests Off
        <Proxy *>
                Order deny,allow
                Allow from all
        </Proxy>
    <Location />
        ProxyPassReverse  http://backend.example.com/
        ProxyPass         http://backend.example.com/
    </Location>
</VirtualHost>

Ale vsade sa tvrdi, ze nez zacnes s tymto tak si musis vyrazne vyriesit bezpecnost - nech to znamena cokolvek. Preto odporucam haproxy. Haproxy bude pocuvat na serveri A na verejnej ip na porte 80 a podla virtualhostov bude posielat poziadavky na localhost:80, alebo B:80. Proxy a apache nemozu bezat na tom istom porte, preto musis prinutit apache aby pocuval napriklad len na localhoste, alebo na inom porte.

cartman

Re: Reverzní proxy na druhý server
« Odpověď #2 kdy: 28. 04. 2011, 17:58:40 »
dakujem za radu, to haproxy vyzera rozumne

Ladislav Kepšta

Re: Reverzní proxy na druhý server
« Odpověď #3 kdy: 28. 04. 2011, 19:32:57 »
Ostal by som pri kombinacii Apache + mod_proxy+ mod_rewrite. Proxovat na B/E len tie URI ktore su validne (pomocou rewrite pravidiel). Ostatne zahadzovat, pripadne vhodne prepisovat.

Inkvizitor

Re: Reverzní proxy na druhý server
« Odpověď #4 kdy: 28. 04. 2011, 20:04:21 »
Ale vsade sa tvrdi, ze nez zacnes s tymto tak si musis vyrazne vyriesit bezpecnost - nech to znamena cokolvek. Preto odporucam haproxy. Haproxy bude pocuvat na serveri A na verejnej ip na porte 80 a podla virtualhostov bude posielat poziadavky na localhost:80, alebo B:80. Proxy a apache nemozu bezat na tom istom porte, preto musis prinutit apache aby pocuval napriklad len na localhoste, alebo na inom porte.

Bylo by možné být konkrétnější? Jaké zvýšené riziko to podle Tebe přináší?


Nassir

Re: Reverzní proxy na druhý server
« Odpověď #5 kdy: 29. 04. 2011, 09:07:54 »
Akakolvek zataz servera B zatazuje aj server A. A pri zlej konfiguracii sa vraj daju robit utoky na lubovolny pocitac pomocou serveru A. V manualoch a navodoch som vsak ukazky "zlej" konfiguracie nenasiel. Pisem to koli tomu, ze vsade, kde sa hovorilo o mod_proxy sa hovorilo aj o postupe: najprv vyries zabezpecenie a potom ries proxy.
Pri Haproxy nie je s vykonom problem: na ich stranke sa uvadza test, kde dokazali preposielat na c2d po 10Gbit kabli az 9,5Gbit, co by ti na zaciatok mohlo stacit.
U nas ho pouzivame na smerovanie podla vyrtualhostov, takze kazda poziadavka sa parsuje podla adresy a smeruje na spravny stroj. Vyriesili sme tak migraciu zo stareho servera na novy "bez vypadku". Pri celkovom load servera 0.5 (apache, mysql, php, dns) nie je haproxy v grafoch vobec vidiet.

PCnity

  • *****
  • 685
    • Zobrazit profil
    • E-mail
Re: Reverzní proxy na druhý server
« Odpověď #6 kdy: 29. 04. 2011, 14:25:33 »
Nginx je na tento ucel uplne skvele. Tiez sa na nom oplati terminovat ssl spojenia. Jeho konfiguracia je uplne straight forward.

cartman

Re: Reverzní proxy na druhý server
« Odpověď #7 kdy: 29. 04. 2011, 14:53:30 »
nie som v tomto zbehnuty vobec ale potreboval by som najlepsie a najjednoduchsie riesenie. vyskusal som klasicke reverse proxy a celkom to ide pekne ale pravda ta zataz je momentalne vlastne nulova ... proste transparentne priamociare riesenie bez dalsich nastrovoj a obskurnosti, takze asi sa pozriem na to haproxy ...

to haproxy sa moze zist aj v buducnosti, za firewallom mame este 5 serverov a tak robit s tym nejaky loadbalancing je celkom pekne plus ...

PCnity

  • *****
  • 685
    • Zobrazit profil
    • E-mail
Re: Reverzní proxy na druhý server
« Odpověď #8 kdy: 29. 04. 2011, 15:05:35 »
Loadbalancing cez HAProxy je na L3 urovni ak sa nemylim... Cez NGX, Apache, etc sa riesi load balancing na L7.
Si zober napriklad session stickness... U nas moze konkretna sesna smerovat len na konkrent pool serverov. Ako vzdy je vsetko SSL a HAProxy ho neterminuje a teda netusi o aku sesnu sa jedna. Preto je celkom idelane riesenie --> request --> Firewall --> L2 loadbalancer --> L7 loadbalancer --> App server

Kedze tu asi netreba riesit moc, stacilo by L7 LB. Sample config ngx:

upstream xxxxxxxx {
        server xxxxxxxx:80 weight=300 srun_id=xxxxxxxx;
        server xxxxxxxx:80 weight=400 srun_id=xxxxxxxx;
        server xxxxxxxx:80 weight=400 srun_id=xxxxxxxx;
        server xxxxxxxx:80 weight=500 srun_id=xxxxxxxx;
        server xxxxxxxx:80 weight=500 srun_id=xxxxxxxx;
        #       
        jvm_route $cookie_JSESSIONID reverse;
}

# Main HTTP redirect
server {
        listen          80;
        server_name     _;
        access_log      /var/log/nginx/http.access.log;

        server_name_in_redirect off;

        location / {
                rewrite ^(.*) https://$host$1 permanent;
        }

}

# xxxxxxxx HTTPS loadbalanced
server {
        listen          xxxxxxxx:443;
        listen          xxxxxxxx:443;
        server_name     _;

        ssl on;
        ssl_certificate      /etc/nginx/ssl/wc.xxxxxxxx.crt;
        ssl_certificate_key  /etc/nginx/ssl/wc.xxxxxxxx.key;

        ssl_session_timeout  30m;

        ssl_protocols   SSLv2 SSLv3 TLSv1;
        ssl_ciphers     ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP;
        ssl_prefer_server_ciphers   on;

        access_log      /var/log/nginx/https.access.log;

        location / {
                proxy_set_header X-Real-IP $remote_addr;
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                proxy_set_header X-Forwarded-Server $proxy_add_x_forwarded_for;
                proxy_set_header Host $host;
                proxy_set_header X-FORWARDED_PROTO https;
                proxy_pass http://xxxxxxxx/;
        }
}

alfi

  • ****
  • 324
    • Zobrazit profil
    • E-mail
Re: Reverzní proxy na druhý server
« Odpověď #9 kdy: 29. 04. 2011, 15:14:05 »
pokud se má opravdu vše z A:80 posílat na B:80.. nestačí obyčený port forward na úrovní iptables? :-)

PCnity

  • *****
  • 685
    • Zobrazit profil
    • E-mail
Re: Reverzní proxy na druhý server
« Odpověď #10 kdy: 29. 04. 2011, 16:24:15 »
pokud se má opravdu vše z A:80 posílat na B:80.. nestačí obyčený port forward na úrovní iptables? :-)

Nie pokial ide o loadbalancing.
Na http -> http je uplne dostacujuci HAProxy alebo Ldirectord
Na https -> http je idealne nginx

alfi

  • ****
  • 324
    • Zobrazit profil
    • E-mail
Re: Reverzní proxy na druhý server
« Odpověď #11 kdy: 29. 04. 2011, 17:37:05 »
Nie pokial ide o loadbalancing.
o tom ale v původním dotazu nic není :-)

PCnity

  • *****
  • 685
    • Zobrazit profil
    • E-mail
Re: Reverzní proxy na druhý server
« Odpověď #12 kdy: 29. 04. 2011, 17:44:54 »
Reakcia dotazujuceho (14:53) ale uz LB zmienuje.