Dzisiaj pokażę w jaki sposób skonfigurowałem moją domenę do działania z trzema fizycznymi komputerami. Było mi to potrzebne do uruchomienia hostingu swoich .NETowych projektów. Ale najpierw pokażę jaki jest cel a potem sposób dojścia.

Legenda:
K1 czyli zewnętrzny hosting w linuxpl.com
K2 czyli mój domowy serwer pod kontrolą linuxa
K3 czyli prywatny laptop windows XP z serwerem IIS
K2 i K3 mają jeden wspólny zewnętrzny adres IP który jest na domiar złego dynamiczny.
1. Ustawienie DNS
Po pierwsze, korzystając z serwisu dyndns.com (lub podobnego) neleży utworzyć domenę wskazującą na dynamiczne IP. W moim przypadku jest to pinochet.ath.cx. Następnie należy skonfigurować program który będzie aktualizował wpis w DNSie. W moim przypadku program nie był potrzebny, router miał możliwość skonfigurowania konta na popularniejszych serwisach dynamicznych domen. Dzięki temu router od razu po zmianie IP przez ISPa loguje się na konto dyndns i zmienia potrzebne dane.
Kolejnym krokiem jest edycja wpisu w DNSie dla naszej docelowej domeny. Konkretnie dodanie kilku rekordów CNAME. Nie wszystkie hostingi to umożliwiają, więc dobrze jest sprawdzić co się kupuje. Hosting w linuxpl daje taką możliwość. Podam tu kompletny wpis DNS dla mojej domeny i oddelegowanych subdomen.
jjroman.net. A 78.46.99.149 jjroman.net. NS dns10.linuxpl.com. jjroman.net. NS ns10.linuxpl.com. asp CNAME pinochet.ath.cx. www.asp CNAME pinochet.ath.cx. jsp CNAME pinochet.ath.cx. www.jsp CNAME pinochet.ath.cx.
Jak widać rekordy typu CNAME pozwalają mi uniknąć wpisywania na stałe adresu IP. Ostatnie 4 wpisy oznaczają po prostu, że ruch z subdomen: asp, jsp, będzie kierowany na adres pinochet.ath.cx czyli na dynamiczny adres IP mojego łącza internetowego.
2. Rozdzielenie ruchu według subdomeny.
Po dodaniu powyższych wpisów do DNSa wszystkie żądania o adresy asp.jjroman.net i jsp.jjroman.net są kierowane do mojej sieci lokalnej. Tu router ruch z portu 80 kieruje do lokalnego serwera linuxowego(K2).
Subdomena jsp jest obsługiwana przez serwer tomcat na komputerze K2, a subdomena asp przez IIS na komputerze K3. Najlepszym rozwiązaniem na rozdzielenie requestów pomiędzy te 2 komputery jest skorzystanie z dobrodziejstw proxy i cache. Często stosowanym rozwiązaniem jest postawienie proxy na porcie 80 a apacha na jakimś innym. Takie rozwiązanie powoduje, że strona jest niedostępna pod adresem bez końcowego slasha np:
http://jjroman.net/strona
ale
http://jjroman.net/strona/
Dzieje się tak dla tego że apache gdy otrzymuje żądanie o stronę http://jjroman.net/strona wysyła przekierowanie na stronę: http://jjroman.net/strona/ ale kiedy apache stoi na porcie np 83 to wysyła przekierowanie na stronę: http://jjroman.net:83/strona/ Oczywiście ten port jest z zewnątrz nie dostępny więc użytkownik dostaje błąd “przekroczono limit czasu połączenia”. Rozwiązań jest kilka.
1. Podobno odpowiednie ustawienie nazwy hosta w systemie oraz zmiennej visible_hostname w squid’zie daje oczekiwane rezultaty - niestety nie u mnie.
2. Ustawienie squida na porcie 81(lub inny) apacha na 80, A na routerze wejściowym do sieci ustawić forwardowanie w taki sposób aby port 80 -> K2:81, niestety moj router z standardowym softem tego nie potrafi.
3. Ustawienie squida oraz apacha na porcie 80 ale na różnych interfejsach - ten sposób nie może nie zadziałać ![]()
No to do dzieła. /etc/apache/sites-enabled/jjroman
NameVirtualHost 127.0.0.1
<VirtualHost 127.0.0.1>
ServerName pinochet.ath.cx
DocumentRoot /var/www
# ….
</VirtualHost>
Jako proxy wykorzystałem serwer SQUID. Oto listing konfiguracji:
visible_hostname pinochet.ath.cx
redirect_rewrites_host_header on# Define the HTTP port
http_port 192.168.1.101:80 vhost vport=80 defaultsite=pinochet.ath.cx#http_port 192.168.1.101:80 vhost vport=83 defaultsite=pinochet.jjroman.net
# Specify the local and remote peers
cache_peer 127.0.0.1 parent 80 0 no-query originserver name=server1
cache_peer 192.168.1.103 parent 80 0 no-query originserver name=server2
cache_peer 127.0.0.1 parent 8080 0 no-query originserver name=server3#ProxyPreserveHost yes
# Tell squid which domains to forward to which servers
acl sitedomains dstdomain .pinochet.ath.cx
acl sitedomains2 dstdomain .asp.jjroman.net
acl sitedomains3 dstdomain .jsp.jjroman.net
acl sitedomains4 dstdomain .pinochet.jjroman.netcache_peer_access server1 allow sitedomains
cache_peer_access server1 allow sitedomains4
cache_peer_access server2 allow sitedomains2
cache_peer_access server3 allow sitedomains3# some restriction definitions
acl all src 0.0.0.0/0.0.0.0
acl manager proto cache_object
acl localhost src 127.0.0.1/255.255.255.255
acl webcluster src 87.233.132.112/28
#acl webcluster src 192.168.1.100/28
acl purge method PURGE
acl CONNECT method CONNECT# some restrictions
http_access allow manager localhost
http_access allow manager webcluster
http_access deny manager
http_access allow purge localhost
http_access allow purge webcluster
http_access deny purge# Make sure that access to your accelerated sites is allowed
http_access allow sitedomains
http_access allow sitedomains2
http_access allow sitedomains3
http_access allow sitedomains4
# Deny everything else
http_access deny all# Do not cache cgi-bin, ? urls, posts, etc.
hierarchy_stoplist cgi-bin ?
acl QUERY urlpath_regex cgi-bin \?
acl POST method POST
no_cache deny QUERY
no_cache deny POSTacl apache rep_header Server ^Apache
broken_vary_encoding allow apache
refresh_pattern . 60 100% 4320# Do not cache 404s 403s, etc
negative_ttl 0 minutes# Debug info in cache.log?
# debug_options ALL,1 33,2# Cache properties
cache_mem 500 MB
maximum_object_size_in_memory 2048 KB
cache_replacement_policy heap LRU
memory_replacement_policy heap LRU
cache_dir ufs /var/spool/squid 20000 16 256
access_log /var/log/squid/access.log squid
hosts_file /etc/hosts
kluczowe dla konfiguracji wielu komputerów są dyrektywy:
acl sitedomainsX dstdomain …
cache_peer_access…
http_access allow…
No to chyba tyle. Mam nadzieję że się komuś przyda.

21 grudnia 2009 o 6:33
dlaczego nie:)
17 stycznia 2010 o 22:40
Helloł?! Helloł?! mod_proxy?! Helloł?!
17 stycznia 2010 o 23:09
że jak? masz coś do SQUIDA?
19 stycznia 2010 o 0:46
Po co wytaczać ciężką artylerię i tracić zasoby, skoro Apache sam działa jako proxy. O ile dobrze zrozumiałem to co napisałeś na blogasku, to idealnym rozwiązaniem dla Ciebie byłoby to http://pastebin.com/m39c3eb49 (nie chciało mi się wczytywać czy serwery JSP i ASP są na innym niż 80 porcie).
19 stycznia 2010 o 0:47
Jeszcze trzeba pozmieniać ProxyPassReverse oczywiście.