IIS 7.5 a Apache/Subversion na jednom stroji
Před rokem a půl jsem si v tomto článku poznamenal konfiguraci souběžného fungování IIS 7 a Apache na jednom serveru. Ne že by to v IIS 7.5 bylo jinak, začíná se však kromě IPv4 používat i IPv6, tak si neuškodí poznamenat ještě pár drobností.
Příkaz netsh s níže uvedenými parametry upravuje tento záznam v registrech - HKLM\SYSTEM\CurrentControlSet\Services\HTTP\Parameters, ListenOnlyList.
netsh http add iplisten ipaddress=127.0.0.1
netsh http add iplisten ipaddress=192.168.0.10
netsh http add iplisten ipaddress=192.168.0.11
netsh http add iplisten ipaddress=::
Poslední řádek zajistí naslouchání IIS 7.5 na všech IPv6 adresách, které jsou na stroji nakonfigurovány.
Tato kombinace zajistí bezproblémovou funkčnost IIS 7.5 a třeba VisualSVN Serveru, který obsahuje Apache httpd server. Ale teď pozor. Nemám pořádně otestováno, že to naprosto bez problémů funguje na serveru kde běží i Exchange 2007/2010. Důvodem jsou ty hromady záznamů ve web server bindings, které tam instalace založí. A rozhodně se to nemůže použít na serveru, kde běží Active Directory. Důvod je jasný. AD se moc nemá rádo s vícero síťovkami (a potažmo vícero IPv4 adresami), případně s vícero IPv4 adresami na jedné síťovce. Jelikož si AD server zaregistruje v dopředné i reverzní zóně záznamy ke všem přiděleným adresám, je pak neštěstí na světě – klient může náhodně některou z adres, ta nemusí být povolena na firewallu, případně na ní může poslouchat jiná aplikace (typicky na portech 80, 443).
To je také důvodem, proč SBS 2008 i 2011 nepodporuje jinou kombinaci než jen jednu síťovou kartu a na ní jednu IP adresu (myšleno jednu IPv4 adresu). Jak potom splnit zadání o souběžném běhu obou web serverů? Jde to vyřešit, ale krapet s obtížemi.
Vzhledem k tomu, že SBS 2011 či 2008 (na rozdíl od SBS 2003) není koncipován jako hraniční prvek sítě, musí mezi ním a Internet být vždy router/firewall. A jelikož interní IPv4 adresa SBS serveru musí být z privátního rozsahu, je evidentní, že toto hraniční zařízení bude provádět též NAT. A v případě NATu již není problém mít na chytřejším routeru více veřejných IP adres a pak překládat porty 80/443 na jiné porty té jediné interní adresy přiřazené SBS serveru. Apache tak může běžet např. na portu 8080 (http) a 8443 (https). Zvenku se uživatel nic nedozví.
Z interní sítě je to však trochu problém. HTTP (tj. port 80) by ještě mohl jít snadno vyřešit pomocí redirektovacího webu v IIS, který by přesměroval uživatele na nestandardní port. U HTTPS (port TCP/443) to už bude složitější – přesměrování by sice mohlo fungovat, ale na serveru by musel být nasazen certifikát s alternativními CNAME, případně wildcard certifikát, a pak vytvořen speciální redirektovací web. Jednodušší asi bude rozdat interním uživatelům odkazy obsahující nestandardní port. Obdobně to řeší i SBS, které má u Sharepoint serveru běžícího na HTTPS nakonfigurovaný nestandadní port 987.