Portál AbcLinuxu, 27. dubna 2024 01:18


Dotaz: Umí Apache automaticky přepínat HTTP/HTTPS u virtuálních hostů?

Barbucha.eu avatar 23.10.2005 19:20 Barbucha.eu | skóre: 23 | Chrást u Plzně
Umí Apache automaticky přepínat HTTP/HTTPS u virtuálních hostů?
Přečteno: 1336×
Odpovědět | Admin
Má otázka je stručná, vyslovená v nadpisu. Zajímalo by mě, zda je možné Apache2 nastavit tak, aby na jedné IP-adrese byli dva virtuální hosté (např. www.neco.xx a ssl.neco.xx) tak, aby jeden běžel normálně a druhý jen přes protokol HTTPS?
Co Bůh rozbil, člověk neopravuj!
Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

23.10.2005 19:24 Zdeněk Burda | skóre: 61 | blog: Zdendův blog | Praha
Rozbalit Rozbalit vše Re: Umí Apache automaticky přepínat HTTP/HTTPS u virtuálních hostů?
Odpovědět | | Sbalit | Link | Blokovat | Admin
Ano, jde to. Dokonce je to naprosto běžné.
-- Nezdar není hanbou, hanbou je strach z pokusu.
23.10.2005 19:25 Kala | skóre: 9
Rozbalit Rozbalit vše Re: Umí Apache automaticky přepínat HTTP/HTTPS u virtuálních hostů?
Odpovědět | | Sbalit | Link | Blokovat | Admin
Ano, na jedné IP mužeš mít více domén (direktiva ServerName). Použitý protokol v apache určuje port. Vše je v dokumentaci.
Barbucha.eu avatar 23.10.2005 22:31 Barbucha.eu | skóre: 23 | Chrást u Plzně
Rozbalit Rozbalit vše Re: Umí Apache automaticky přepínat HTTP/HTTPS u virtuálních hostů?
Ano, v dokumentaci to je, ovšem problém je že http://www.neco.xx = http://ssl.neco.xx = 1. virtual host a https://www.neco.xx = https://ssl.neco.xx = 2. virtual host. Mně by ovšem více vyhovovalo, kdyby www.neco.xx se zobrazilo jako http://www.neco.xx 1. virtual host a ssl.neco.xx jako https://ssl.neco.xx 2. virtual host.
Prostě chtěl bych přepínat mezi HTTP a HTTPS tím, že zadám buď www.neco.xx nebo ssl.neco.xx a ne tím, že zadám buď http://cokoliv nebo https://cokoliv. Zároveň bych rád, aby ssl.neco.xx bylo vždy přes HTTPS a nikdy jinak. Chci rozlišovat v prohlížeči stránky jménem a o protokol se nestarat. Bohužel je to obráceně: Rozhoduje protokol, na jméno se kašle.
Podle manuálu se zdá, že konkrétně toto použití (aby na jedné IP byla jedna_doména:port1 a druhá_doména:port2) se nepředpokládá.
Ještě jedna možnost je použít mod_rewrite. Otázka je, zda dokáže tento modul přepsat samý začátek URL, tedy http://... Potom by šlo říci, aby se http://ssl... přepsalo na https://ssl... Bohužel, formování přepisovacích pravidel je značně složité a nejasné. Během hodiny se mi ani nepodařilo dokázat, zda mod_rewrite vůbec funguje a jak se projevuje.
Co Bůh rozbil, člověk neopravuj!
23.10.2005 23:12 Wombat | skóre: 4
Rozbalit Rozbalit vše Re: Umí Apache automaticky přepínat HTTP/HTTPS u virtuálních hostů?
Redirect permanent / https://www
Barbucha.eu avatar 23.10.2005 23:23 Barbucha.eu | skóre: 23 | Chrást u Plzně
Rozbalit Rozbalit vše Tak to také neklapne
Musím totiž zadat https://ssl.neco.xx, aby jsem se dostal na toho virtuálního hosta, ve kterém je Redirect. Virtualhost je totiž definován VirtualHost ssl.neco.xx:443, neboť není-li port uveden, tak se sice hosté střídají jak mají, tj. podle jména, ale pro změnu nefunguje SSL. Zadám-li https://ssl.neco.xx, vyběhne hláška, že spojední bylo přerušeno. Ze situace tak zatím není žádné východisko: Buď se hosté střídají přepsáním HTTP na HTTPS bez ohledu na jméno, nebo podle názvu, ale HTTPS nefunguje.
Co Bůh rozbil, člověk neopravuj!
24.10.2005 01:38 nowas
Rozbalit Rozbalit vše Re: Tak to také neklapne
vytvorit kontejner
<VirtualHost ssl.neco.xx:80>
se vsemi nalezitostmi a do nej
RewriteRule ^/(.*) https://%{SERVER_NAME}/$1 [L,R]
24.10.2005 14:49 cronin | skóre: 49
Rozbalit Rozbalit vše Re: Umí Apache automaticky přepínat HTTP/HTTPS u virtuálních hostů?
Pozorne si pozri rozdiel medzi ip-based virtual hosts a name-based virtual hosts. Popisana konfiguracia je pre ip-based; to, co chces, je potrebne nakonfigurovat pomocou name-based virtual hostu.
Barbucha.eu avatar 24.10.2005 20:41 Barbucha.eu | skóre: 23 | Chrást u Plzně
Rozbalit Rozbalit vše Řešení
Odpovědět | | Sbalit | Link | Blokovat | Admin

S laskavým přispěním zde zúčastněných a průzkumem internetu bylo nalezeno řešení, které uvádím s výpisem nastavení virtuálních hostů z konfiguračního souboru Apache pro případ, že kdyby někdo podobný problém někdy řešil, aby měl snažší práci.

Princip je jednoduše v tom, že oba hosty napíšeme dvakrát. Jednou oba pro port 80 a podruhé oba pro port 443 s tím, že ssl.neco.xx:80 provede jen přesměrování stejně jako www.neco.xx:443. Naproti tomu www.neco.xx:80 a ssl.neco.xx:443 jsou vlastní virtuální hosté, kteří se budou používat. Tím se zajistí, že zadáme-li v prohlížeči https://www.neco.xx, změní se to samo na http://www.neco.xx a podobně http://ssl.neco.xx se samo změní na https://ssl.neco.xx. Www běží tedy jen přes http a ssl jen přes https. Protokol použitý se mění s ohledem na název domény a bez ohledu na protokol zadaný v prohlížeči.

Výpis konfigurace

#Konfigurace virtuálních hostů na jedné
#IP-adrese tak, že s www se komunikuje jen
#pomocí protokolu HTTP a se ssl jen pomocí
#protokolu HTTPS. O změnu použitého protokolu
#se stará modul mod_rewrite, který přesměruje
#požadavky s nechtěným protokolem na kýžený
#protokol.

#Vyhodnocení požadavků na portu 80
NameVirtualHost 192.168.1.4:80
<VirtualHost 192.168.1.4:80>
	ServerName www.neco.xx
	DocumentRoot /www/http

	#ostatní nastavení

</VirtualHost>

#Virtuální host, který se stará jen o přesměrování
#z HTTP na HTTPS pro ssl.neco.xx
<VirtualHost 192.168.1.4:80>
	ServerName ssl.neco.xx
	DocumentRoot /www/https

	#Přepsání lokátoru URL tak, aby místo HTTP začínal HTTPS
	RewriteEngine On
	RewriteRule ^/(.*) https://%{SERVER_NAME}/$1 [L,R]
</VirtualHost>

#Vyhodnocení požadavků na portu 443
NameVirtualHost 192.168.1.4:443
<IfDefine SSL> #je-li zaveden modul mod_ssl...
	<VirtualHost 192.168.1.4:443>
		ServerName ssl.neco.xx
		DocumentRoot /www/https
		SSLEngine On
		SSLCipherSuite ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP:+eN:ULL
		SSLCertificateFile ssl/server.crt
		SSLCertificateKeyFile ssl/server.key
	</VirtualHost>
</IfDefine>

#Virtuální host, který se stará o případné přesměrování
#z HTTPS na HTTP pro www.neco.xx
<VirtualHost 192.168.1.4:443>
	ServerName www.neco.xx
	DocumentRoot /www/http

	#Přepsání lokátoru URL tak, aby místo HTTPS začínal HTTP
	RewriteEngine On
	RewriteRule ^/(.*) http://%{SERVER_NAME}/$1 [L,R]
</VirtualHost>
IP-adresa je tu 192.168.1.4, ale může být (samozřejmě) jakákoliv jiná
Co Bůh rozbil, člověk neopravuj!
25.10.2005 06:03 cronin | skóre: 49
Rozbalit Rozbalit vše Re: Řešení
No, takze bolo treba postupovat presne podla dokumentacie. Super ze si uverejnil hotove riesenie, takto by mali postupovat vsetci. :-)

Iba to presmerovanie sa mi zda kanon na vrabce, ale moze vyplyvat z konkretnej situacie. Ja by som pouzil jednoduche:
RedirectMatch  ^/$ https://ssl.example.org/
25.10.2005 06:05 cronin | skóre: 49
Rozbalit Rozbalit vše Re: Řešení
Teda az na ten regexp, ten musi zahrnat vsetky retazce, rovnako ako v predchadzajucom pripade.

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.