Portál AbcLinuxu, 8. listopadu 2025 05:55
http://front.dom.cz --> http://back.dom.cz:8080/app1V adresním řádku prohlížeče se má zobrazovat http://front.dom.cz/app1 To už jsem s pomocí zdejší poradny zvládnul: na front.dom.cz inkluduju do httpd.conf soubor mod_proxy.conf s tímto obsahem
ProxyRequests Off ProxyPreserveHost On <Proxy *> Order deny,allow Allow from all </Proxy> ProxyPass /app1 http://back.dom.cz:8080/app1 ProxyPassReverse /app1 http://back.dom.cz:8080/app1 ProxyPass / http://back.dom.cz:8080/app1 ProxyPassReverse / http://back.dom.cz:8080/app1Schéma HTTPS
https://front.dom.cz --> https://back.dom.cz:8443/app1Zobrazovat se má
https://front.dom.cz/app1Popravdě, potřebuju šifrované spojení HTTPS jen pro přihlašování, ale to bych zatím neřešil. Klidně ať zatím běží celá aplikace na HTTPS, před přihlášením i po. To je ostatně věc aplikace. Na frontendu jsem zapnul SSL v Apache a definoval virtuálního hosta /etc/apache2/vhosts.d/front.dom.cz
<IfDefine SSL>
<IfDefine !NOSSL>
NameVirtualHost IPadresaFront:443
<VirtualHost IPadresaFront:443>
DocumentRoot "/srv/www/htdocs/front.dom.cz"
ServerName IPadresaFront:443
ServerAdmin admin@dom.cz
ErrorLog /var/log/apache2/error_log
TransferLog /var/log/apache2/access_log
SSLEngine on
SSLProtocol all -SSLv2
SSLCipherSuite HIGH:MEDIUM
SSLCertificateFile /etc/apache2/ssl.crt/ap2server.crt
SSLCertificateKeyFile /etc/apache2/ssl.key/ap2server.key
SSLCertificateChainFile /etc/apache2/ssl.crt/newca.crt
SSLCACertificateFile /etc/apache2/ssl.crt/newca.crt
<Files ~ "\.(cgi|shtml|phtml|php3?)$">
SSLOptions +StdEnvVars
</Files>
<Directory "/srv/www/htdocs/front.dom.cz">
Options Indexes
AllowOverride None
Allow from from all
Order allow,deny
</Directory>
CustomLog /var/log/apache2/ssl_request_log ssl_combined
</VirtualHost>
</IfDefine>
</IfDefine>
Ačkoli jsem na backendovém stroji SSL ještě nezprovoznil a proxy pro HTTPS nenastavil, funguje mi https://front.dom.cz/app1, tj. zobrazuje obsah z back.dom.cz/app1, ale jestli šifrovaně, to nepoznám.
Zdá se, že direktivy z mod_proxy.conf mi přesměrovávají i HTTPS provoz. Ale to nejspíš nebude v pořádku, když SSL je jen na proxy serveru, že? Rád bych, aby byla celá komunikace šifrovaná, nejen se tak tvářila.
Kde všude má být konfigurováno SSL a vložen certifikát? Potřebuju certifikát s Common Name=front.dom.cz.
Jak korektně nastavit proxy pro HTTPS provoz?
Díkes za každou radu!
https, je komunikace šifrovaná. V případě HTTPS bude šifrovaná komunikace vždy mezi klientem a proxy serverem, ten musí šifrovanou komunikaci vybalit, a pak s ní něco udělá dál. Pokud je Tomcat na stejném stroji nebo ve stejné důvěryhodné síti, je zbytečné komunikaci znovu šifrovat a je lepší mezi proxy a Tomcatem použít obyčejné HTTP. Certifikát a vše týkající se HTTPS pak bude jen na Apachi. Ještě můžete (snad) nastavit proxy tak, že bude Tomcatu v hlavičkách předávat informaci o tom, že komunikace byla šifrovaná, pak to lze i z Tomcatu ze servletu zjistit voláním ServletRequest.isSecure().
Část konfiguráku mi připadá zbytečná, nebo tam opravdu máte nějaké PHP nebo CGI skripty?
<Files ~ "\.(cgi|shtml|phtml|php3?)$"> SSLOptions +StdEnvVars </Files>Jinak máte nějaký důvod, proč tam cpát ten proxy server? Bude na tom portu 80 a 443 poskytovat ještě nějaké jiné služby? Jinak můžete vystavit do internetu rovnou Tomcat a bude to celé jednodušší...
Díky za radu. Ano, server s Tomcatem (backend) leží v důvěryhodné síti, takže komunikace Proxy - Tomcat nemusí být šifrovaná. Nebyl jsem si jist, zda HTTPS komunikace nutně musí být end-to-end, tedy z klienta až k backendovému serveru, nebo stačí, když bude šifrovaná jen část, která jde k frontendu. Proto tedy použiju obyčejné HTTP.
Část toho konfiguráku je opravdu zbytečná, půjde pryč.
Proxy je tam kvůli snížení zátěže na server s Tomcatem, a časem z něho taky bude load balancer - backendových serverů přibyde.
Nebyl jsem si jist, zda HTTPS komunikace nutně musí být end-to-end, tedy z klienta až k backendovému serveru, nebo stačí, když bude šifrovaná jen část, která jde k frontendu.Naopak, HTTPS je vždy mezi klientem a serverem/proxy, kde je dané HTTPS spojení zakončeno. Tam se musí dešifrovat, ověřit certifikáty atd., a případně je možné odsud navázat další spojení (HTTP i HTTPS), kterým se přenese dešifrovaný obsah spojení. Nejsnazší je vždy si uvědomit, že HTTPS chrání proti útokům MITM -- takže uprostřed komunikace nemůže být nikdo, kdo by s komunikací nějak manipuloval nebo ji mohl číst.
http://front.dom.cz) směrovala na http://back1.dom.cz/app1 a HTTPS (https://front.dom.cz) aby směrovala na http://back2.dom.cz/app1.
Vytvořil jsem dva virtual hosty s touto konfigurací:
front.dom.cz.conf
NameVirtualHost 10.0.0.1:80
<VirtualHost 10.0.0.1:80>
ServerName 10.0.0.1
ServerAdmin admin@dom.cz
ProxyRequests Off
ProxyPreserveHost On
<Proxy *>
Order deny,allow
Allow from all
</Proxy>
ProxyPass /app1 http://back1.dom.cz:8080/app1
ProxyPassReverse /app1 http://back1.dom.cz:8080/app1
ProxyPass / http://back1.dom.cz:8080/app1
ProxyPassReverse / http://back1.dom.cz:8080/app1
DocumentRoot /srv/www/vhosts/front.dom.cz
ErrorLog /var/log/apache2/front.dom.cz-error_log
CustomLog /var/log/apache2/front.dom.cz-access_log combined
#HostnameLookups Off
#UseCanonicalName Off
#ServerSignature On
<Directory "/srv/www/vhosts/front.dom.cz">
Options Indexes FollowSymLinks
AllowOverride None
Order allow,deny
Allow from all
</Directory>
</VirtualHost>
front.dom.cz_ssl.conf
<IfDefine SSL>
<IfDefine !NOSSL>
<VirtualHost 10.0.0.1:443>
ServerName 10.0.0.1:443
ServerAdmin adminn@dom.cz
ProxyRequests Off
ProxyPreserveHost On
<Proxy *>
Order deny,allow
Allow from all
</Proxy>
ProxyPass /app1 http://back2.dom.cz:8080/app1
ProxyPassReverse /app1 http://back2.dom.cz:8080/app1
ProxyPass / http://back2.dom.cz:8080/app1
ProxyPassReverse / http://back2.dom.cz:8080/app1
DocumentRoot "/srv/www/vhosts/front.dom.cz_ssl"
ErrorLog /var/log/apache2/front.dom.cz_ssl-error_log
TransferLog /var/log/apache2/front.dom.cz_ssl-access_log
CustomLog /var/log/apache2/front.dom.cz_ssl-request_log ssl_combined
<Directory "/srv/www/vhosts/front.dom.cz_ssl">
Options Indexes
AllowOverride None
Allow from from all
Order allow,deny
</Directory>
SSLEngine on
SSLProtocol all -SSLv2
SSLCipherSuite HIGH:MEDIUM
SSLCertificateFile /etc/apache2/ssl.crt/ap2server.crt
SSLCertificateKeyFile /etc/apache2/ssl.key/ap2server.key
SSLCertificateChainFile /etc/apache2/ssl.crt/newca.crt
SSLCACertificateFile /etc/apache2/ssl.crt/newca.crt
</VirtualHost>
</IfDefine>
</IfDefine>
Při startu Apache si mi webový server stěžuje
... Starting httpd2 (prefork) [Thu Mar 29 12:32:28 2012] [warn] worker http://back1.nkp.cz:8080/app1 already used by another worker [Thu Mar 29 12:32:28 2012] [warn] worker http://back2.nkp.cz:8080/app1 already used by another worker Apache/2.2.12 mod_ssl/2.2.12 (Pass Phrase Dialog) ...Na webu jsem našel, že se to stává, když je nějaká proxy direktiva zadaná vícekrát. Ale já tam nemám nic, co by se opakovalo... Nebo mám? Když v prvním konfiguráku zakomentuju řádky
ProxyPass / http://back1.dom.cz:8080/app1
ProxyPassReverse / http://back1.dom.cz:8080/app1
tak si Apache už nestěžuje, ale pak zas nefunguje přesměrování http://front.dom.cz na http://back1.dom.cz/app1
Nemám tušení, proč mu to vadí. Je to vlastnost Apache, nebo moje chyba?
/app1
ProxyPass /app1 http://back1.dom.cz:8080/app1
ProxyPassReverse /app1 http://back1.dom.cz:8080/app1
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.