29 novembre 2007

Oracle XE e Apache

Sto provando, a tempo perso, Oracle Application Express come framework per lo sviluppo rapido di applicazioni web. Lo scopo sarebbe di appoggiarsi su XE per piccole applicazioni web collaborative da utilizzare in gruppi limitati di persone, con tecnologia Oracle (gratuita).
Una delle prime cose che ho notato è che XE poggia direttamente sul db per quanto riguarda il protocollo HTTP, quindi non c'è Apache, ma risponde direttamente il listener.
La seconda cosa è che virtualmente il database è piuttosto lento nel rispondere alle chiamate da web, anche per un piccolo bacino di utenti; un buon indizio di ciò è anche che di default il listener risponde solo per localhost sulla porta 8080.

Un buon metodo per pubblicare l'interfaccia di XE con la flessibilità, la sicurezza e la velocità di un webserver è di utilizzare Apache come reverse proxy con il modulo mod_proxy.

Installate Apache a corredo della vostra distribuzione preferita, selezionando anche, se necessario, il modulo mod_proxy. Apache può fare da proxy per vari protocolli, in questo caso utilizziamo il proxy HTTP mod_proxy_http.

Configurate un VirtualHost di Apache. L'esempio è il seguente:
<VirtualHost *>
ServerName sbrillo2-xe
ServerAdmin your@email.address

<Proxy http://localhost:8080/*>
Order deny,allow
Allow from all
</Proxy>

ProxyPass / http://localhost:8080/
ProxyPassReverse / http://localhost:8080/
</VirtualHost>

In questo modo tutte le richieste mandate al server che risponde a sbrillo2-xe sulla porta 80 vengono automaticamente riindirizzate alla porta 8080 del loopback, con la possibilità ora di limitare gli accessi, impostare password HTTP, riscrivere gli URL.

C'è un ulteriore passo che si può fare: XE sarà comunque lento nelle risposte, visto che chi risponde non è sicuramente ottimizzato per servire pagine web. Possiamo utilizzare il modulo mem_cache, che sgrava il database da servire anche quegli oggetti statici che ogni pagina contiene. Aggiungete le seguenti righe nella vostra sezione del virtualhost:
<IfModule mod_mem_cache.c>
CacheEnable mem /
# 40 MB cache
MCacheSize 40960
MCacheMaxObjectCount 1000
MCacheMinObjectSize 1
# 20 KB max per oggetto
MCacheMaxObjectSize 20480
</IfModule>

modificando a piacere i valori di cache size, numero massimo di oggetti, dimensione massima degli oggetti da memorizzare, URL.

Ora la navigazione è molto più fluida e il vostro server è pronto per la pubblicazione su web. Nulla vi vieta, comunque, di usare reverse proxy come squid.
Da parte mia, servirebbe un po' di manualità nella programmazione.
Vi aggiornerò nel caso in cui riesca a mettere assieme una piccola applicazione.

2 commenti:

lorenzo.renzi ha detto...

Ottimo suggerimento.
Ho applicato con successo le tue impostazioni.

Mi occupo di sviluppo applicazioni su apex, strumento che trovo fantastico.

Un saluto

Lorenzo Renzi

Anonimo ha detto...

leggere l'intero blog, pretty good