Routing a livello applicativo in IIS7

Il 14 Luglio avevo scritto l’articolo Accesso a TFS da Internet attraverso un reverse proxy in cui raccontavo come usare un Apache server in veste di reverse proxy per accedere da Internet ad un Team Foundation Server. In quell’articolo raccontavo che avevo scelto Apache per la facilita’ con cui realizzare un proxy server rispetto ad utilizzare un ISA Server, il quale in questo caso sarebbe stato il classico cannone per uccidere al mosca.

Oggi invece mi devo ravvedere soprattutto alla luce dell’uscita di un nuovo modulo per IIS 7 : Application Request Routing attualmente in versione CTP1. Si tratta di un modulo proxy con capacita’ anche di load balancing che pero’ fa routing a livello 7 anziche livello 4. Basta specificare delle semplici regole per realizzare un routing a livello HTTP. Era quello che mancava ad IIS e che aggiunge quelle funzioni che erano tipiche dei moduli modproxy, modloadbalance, modproxyhttp di Apache.

Rimando ad un articolo di Scott Hanselman per approfondimenti : New Modules for IIS7: Application Request Routing – Proxy and Load Balancing Module

Mentre per il download diretto : Application Request Routing CTP1X86 o X64

RAI 4

Forse non ve ne siete accorti ma dal 14 Luglio esiste il nuovo canale 4 della RAI ma solo sul digitale terrestre. Peccato per questa scelta che taglia fuori molti utenti che non credono nella bufala del digitale terrestre. Per ora la programmazione è solo agli inizi e consiste soprattutto di serie americane cult, film e telefilm, cartoni animati, programmi musicali.

In prima serata, il palinsesto della prima settimana prevede alcuni film d’autore: martedì 15 “Una canzone per Bobby Long”, mercoledì “Million dollar baby” di Clint Eastwood, giovedì “Final destination”, venerdì “Frequency – il futuro è in ascolto”, sabato “Nella morsa del ragno” e domenica “C’era una volta il West”.

La seconda serata propone ogni giorno una serie americana : lunedì c’è “Day Break”; martedì “Six Degrees”; mercoledì “Wath about Bryan”, giovedì “Codice Matrix”, venerdì “Veritas”.

Per il futuro gli autori dicono di volersi ispirare al web e ai contenuti prodotti dagli spettatori. Per il futuro dovro’ cominciare a pensare a come aggiungerla sulla TV del giorno prima

Seagate difettosi

Oggi porto un hard disk rotto presso una ditta di recupero dati sperando che possano farlo resuscitare. L’addetto guarda il disco e mi dice: questa serie di dischi nei tagli da 200, 250 e 500 GB sono difettose e si disallinea facilmente la testina per cui il recupero è possibile solo in camera bianca, il che richiede una spesa molto elevata.

Se avete dei Seagate Barracuda 7200 nei tagli sopra citate fate subito un backup.

Accesso a TFS da Internet attraverso un reverse proxy

Esperienze di configurazione di un reverse proxy per accedere da Internet ad un server TFS.

Problema: Si vuole permettere l’accesso da Internet ad un server TFS situato in una rete locale in modo da consentire la continuità delle attività anche in un contesto extranet.

Vantaggi: lo sviluppatore può lavorare in totale mobilità localizzandosi dove meglio preferisce purchè connesso ad Internet; accesso ai dati di progetti al di fuori della rete locale; non dover usare la modalità di lavoro offline di Visual Studio

Svantaggi: si lavora troppo (ma come? Dopo l’abolizione della scala mobile la nuova moda lanciata dai sindacati  è quella di aumentare la produttività per riportare i salari italiani allo stesso livello di quelli europei. Quindi muti e lavorate ! … anche di notte)

Analisi: Il problema dell’accesso extranet a risorse aziendale è ben noto e risolto elegantemente ricorrendo a RAS e VPN. Ma volevo trovare una soluzione più semplice e mirata solo al server TFS + TSWA (TSWA e’ un’applicazione che espone i contenuti di TFS attraverso un portale web).

Soluzione: Ho pensato di utilizzare un meccanismo di reverse proxy. La prima soluzione tentata si basava su ISA server, ma ho desistito quasi subito: troppo complicato da configurare e troppo esagerata come soluzione; a me serve solo un reverse proxy mentre ISA è molto di più. Ripiego allora su Apache che mi risolve egregiamente il problema con poco sforzo e poche risorse impiegate. Infatti posso utilizzare un vecchio pc anche poco performante con solo Windows XP.
Ecco la procedura per configurare un server Apache come reverse proxy per un server TFS.

Un server TFS ha bisogno di 3 cose per essere utilizzato dal client explorer di Visual Studi o altri tool basati su esso (es: Sidekicks) :

  1. l’accesso ai web services,
  2. l’accesso al portale Sharepoint dei contenuti,
  3. l’accesso al portale di configurazione di Sharepoint. In più se c’è anche TSWA allora ci vuole anche un accesso a questo portale.

Il reverse proxy deve permettere l’accesso a tutte queste risorse discriminando in base al numero di porta. I web services usano la porta 8080, il portale Sharepoint la porta 80 mentre quello di configurazione usa una porta che veniva scelta in fase di installazione del server TFS e che bisognava aversi salvato ed era un numero abbastanza strano tipo 31932.

Procediamo. Per prima cosa bisogna installare Apache, io ho utilizzato la 2.2.6. Poi bisogna modificare il file httpd.conf nel seguente modo:

# Listen: Allows you to bind Apache to specific IP addresses and/or ports
Listen <REVPROXY_SERVER_IP>:8080
Listen <REVPROXY_SERVER_IP>:80
Listen <REVPROXY_SERVER_IP>:31932

# LoadModule: Allows you to use the functionalities of an external module
LoadModule actions_module modules/mod_actions.so
LoadModule alias_module modules/mod_alias.so
LoadModule asis_module modules/mod_asis.so
LoadModule auth_basic_module modules/mod_auth_basic.so
LoadModule authn_default_module modules/mod_authn_default.so
LoadModule authn_file_module modules/mod_authn_file.so
LoadModule authz_default_module modules/mod_authz_default.so
LoadModule authz_groupfile_module modules/mod_authz_groupfile.so
LoadModule authz_host_module modules/mod_authz_host.so
LoadModule authz_user_module modules/mod_authz_user.so
LoadModule autoindex_module modules/mod_autoindex.so
LoadModule cgi_module modules/mod_cgi.so
LoadModule dir_module modules/mod_dir.so
LoadModule env_module modules/mod_env.so
LoadModule imagemap_module modules/mod_imagemap.so
LoadModule include_module modules/mod_include.so
LoadModule isapi_module modules/mod_isapi.so
LoadModule log_config_module modules/mod_log_config.so
LoadModule mime_module modules/mod_mime.so
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_ajp_module modules/mod_proxy_ajp.so
LoadModule proxy_connect_module modules/mod_proxy_connect.so
LoadModule proxy_http_module modules/mod_proxy_http.so
LoadModule negotiation_module modules/mod_negotiation.so
LoadModule rewrite_module modules/mod_rewrite.so
LoadModule setenvif_module modules/mod_setenvif.so
LoadModule userdir_module modules/mod_userdir.so

# ‘Main’ server configuration
NameVirtualHost *:8080
NameVirtualHost *:80
NameVirtualHost *:31932

# VirtualHost
<VirtualHost *:8080>
ServerName <REVPROXY_SERVER_IP>
RewriteEngine On
ProxyVia Block
ProxyPreserveHost On
RewriteRule ^/(.*)$ http://<TFS_SERVER_IP&gt;:8080/$1 [P,L]
</VirtualHost>

<VirtualHost *:80>
ServerName <REVPROXY_SERVER_IP>
RewriteEngine On
ProxyVia Block
ProxyPreserveHost On
RewriteRule ^/(.*)$ http:// <TFS_SERVER_IP>/$1 [P,L]
</VirtualHost>

<VirtualHost *:31932>
ServerName <REVPROXY_SERVER_IP>
RewriteEngine On
ProxyVia Block
ProxyPreserveHost On
RewriteRule ^/(.*)$ http:// <TFS_SERVER_IP>:31932/$1 [P,L]
</VirtualHost>

# ServerName gives the name and port that the server uses to identify itself.
ServerName <REVPROXY_SERVER_IP>:8080

Il resto del file httpd.conf non deve essere modificato.

E TSWA ? Dipende come si installa. Io l’ho installato sulla stessa porta dei web services riutilizzando in tal modo la porta 8080 ma si potrebbe dedicarci una porta ad hoc nel qual caso bisogna aggiungere una voce in più a quelle presentate sopra.

Lato Team Foundation Server bisogna intervenire su tutte le virtual directory in IIS per aggiungere l’autenticazione Basic. Questa è una forte semplificazione che ho fatto che lascia aperta qualche problema di sicurezza, ma non lavoro per i militari quindi un certo rilassamento e’ tollerato. Per una soluzione piu’ sicura bisognerebbe pensare almeno a delle connessioni SSL.
Dunque, dicevamo che in una installazione sigle server di TFS ci saranno 3 web sites: Share Point Central Administration, Default Web Site e Team Foundation Server. Il secondo contiene 2 virtual directories: Reports e ReportServer mentre il terzo contiene 5 virtual directories : Build, Services, VersionControl, Warehouse, WorkItemTracking. In piu’ come detto ho scelto di installare la virtual directory tswa.
Nelle 7 virtual directories sopra citate piu’ nel Share Point Central Administration web sites bisogna aggiungere la Basic Authentication mentre in tswa bisogna abilitare solo l’anonymous access essendo un generico portale web.

A questo punto il reverse proxy si comporta come se fosse il server TFS vero, quindi tutti i riferimenti nei progetti devono puntare al server TFS. Tuttavia mi piacerebbe lasciarmi la possibilità di poter accedere a TFS anche senza proxy. La soluzione e’ quella di aggiungere, su tutti i client che vogliono usare il nostro proxy, un nome simbolico, per esempio TFSERVER, al file hosts associandolo all’indirizzo del reverse proxy server. Quando creo un nuovo progetto o ci faccio riferimento dovro’ sempre usare come nome del server TFSERVER. Il file hosts si trova di solito sotto c:\windows\system32\drivers\etc ma potete trovarlo velocemente con il Search di Windows.

Fonti: Per comprendere il reverse proxy mi è stata utile questa lettura : https://www2.sans.org/reading_room/whitepapers/webservers/302.php

Phun

Qunado ho visto il video mi sono letteralmente emozionato. Phun e’ un simulatore di un mondo 2D di oggetti che rispondono alle leggi della fisica. Con la stessa facilita’ con cui si usa Paint per disegnare qui si creano oggetti di qualsiasi forma, acqua compresa, che possono muoversi, rotolare, scivolare, saltare, rimbalzare, fluttuare nell’aria, galleggiare, scontrarsi. Non c’e’ limite a cosa si puo’ costruire ed animare.

L’home page del progetto e’ http://www.phun.at/