En esta serie de artículos, vamos a ver las diferentes formas que hay para definir una estructura de Apache Tomcat para su puesta en producción. Veremos cómo podemos configurar Apache Tomcat con Apache HTTP mediante <mod_jk> y cómo poner <squid-cache> como frontend haciendo de proxy reverso.
Como es una serie y no un unico post iremos viendo cómo montar la infraestructura, desde lo más básico, hasta -en las últimas entregas- cómo ponerlo en producción.
En esta tercera entrega, vamos a utilizar como base un post que escribí sobre Cómo poner Squid Cache como proxy reverso y haremos algunas modificaciones para adaptarlo a nuestras necesidades. Principalmente, modificaremos el inicio de squid-cache para gestionarlo mediante Solaris SMF e incluiremos acl para evitar el acceso al contenido.
Además, con esta entrega ya tenemos todo lo necesario para poner en producción nuestro tomcat de forma correcta.
Instalación de Squid-Cache como Proxy Reverso
Descargaremos la última versión stable de squid-cache en su branch 2.7 y la instalaremos
$ /usr/sfw/bin/wget http://www.squid-cache.org/Versions/v2/2.7/squid-2.7.STABLE9.tar.gz
$ /usr/sfw/bin/gtar zxpf squid-2.7.STABLE9.tar.gz
$ cd squid-2.7.STABLE9
$ export CFLAGS="-m64 -O3"
$ ./configure
--prefix=/opt/www/squid-2.7 \
--with-large-files \
--with-pthreads \
--with-maxfd=16000 \
--disable-internal-dns \
--enable-large-cache-files \
--enable-storeio=ufs,aufs \
--enable-devpoll \
--enable-x-accelerator-vary \
--enable-cache-digests \
--enable-http-violations \
--enable-snmp
$ make
# make install
Comprobamos que todo está correcto
$ ldd /opt/www/squid-2.7/sbin/squid
libpthread.so.1 => /lib/64/libpthread.so.1
libmd.so.1 => /lib/64/libmd.so.1
libm.so.2 => /lib/64/libm.so.2
libsocket.so.1 => /lib/64/libsocket.so.1
libnsl.so.1 => /lib/64/libnsl.so.1
libresolv.so.2 => /lib/64/libresolv.so.2
libthread.so.1 => /lib/64/libthread.so.1
libc.so.1 => /lib/64/libc.so.1
libmp.so.2 => /lib/64/libmp.so.2
libscf.so.1 => /lib/64/libscf.so.1
libuutil.so.1 => /lib/64/libuutil.so.1
libgen.so.1 => /lib/64/libgen.so.1
libsmbios.so.1 => /usr/lib/64/libsmbios.so.1
$ file /opt/www/squid-2.7/sbin/squid
squid: ELF 64-bit LSB executable AMD64 Version 1 [SSE2 SSE FXSR CMOV FPU], dynamically linked, not stripped
Configuración Squid-Cache
A continuación vamos a configurar squid-cache para utilizar nuestro syslog y poder gestionarlo a través de Solaris SMF.
Para hacer que squid-cache escriba en el syslog deberemos utilizar las opciones <-s> o, si queremos utilizar una facility diferente <-l facility>, en nuestro caso vamos a utilizar <local6> como nuestra facility
# vi /etc/syslog.confNota: recordar que debe ser un "tabulador" el separador entre <local6.debug> y </var/log/squid.log>
#
# SQUID Cache
#
local6.debug /var/log/squid.log
# touch /var/log/squid.logA continuación configuraremos nuestro squid-cache para poder gestionarlo mediante Solaris SMF, para ello, deberemos importar el manifest de Squid Cache 2 para Solaris SMF y el method para Squid Cache 2. He creado dos archivos manifest uno con sólo manifest para squid como proxy reverso y otro con manifest para squid como proxy reverso y http proxy para que podáis utilizarlo en varias instalaciones -pero sólo uno de los dos al mismo tiempo-, en nuestro caso utilizaremos el de proxy reverso, además, deberemos crear -si no lo hemos hecho antes- el directorio </var/svc/manifest/application/cache>
# chmod 600 /var/log/squid.log
# chown root:root /var/log/squid.log
# svcadm restart system-log
# mkdir -p /var/svc/manifest/application/cacheAhora el method
# cd /var/svc/manifest/application/cache
# /usr/sfw/bin/wget http://blog.sfchildren.com/blogger/put-tomcat-online/squid-conf/squid2_reverse.xml
# mv squid2_reverse.xml squid_2.xml
# svccfg
svc:> validate squid_2.xml
svc:> import squid_2.xml
svc:> quit
# svcs squid_2
STATE STIME FMRI
disabled 11:48:01 svc:/application/cache/squid_2:reverse_proxy
# cd /lib/svc/method
# /usr/sfw/bin/wget http://blog.sfchildren.com/blogger/put-tomcat-online/squid-conf/squid2
# chmod 555 squid2
# chown root:root squid2
Creación y Configuración de project
Una vez importada la configuración para Solaris SMF, necesitamos crear los project que hemos definido en nuestro archivo <squid_2.xml> en la propiedad <method_context project='squid.reverse'>, en nuestro caso squid.reverse
# projadd -c 'SQUID Reverse Proxy' squid.reverseConfiguración <$SQUID_HOME/etc/squid.conf>
# projmod -sK 'process.max-file-descriptor=(priv,8192,deny)' squid.reverse
# projmod -sK 'task.max-lwps=(priv,250,deny)' squid.reverse
Vamos a utilizar una configuración básica de squid y sobre ella realizaremos los cambios necesarios, puedes encontrar más información aquí sobre la instalación de squid cache en Solaris 10.
Para poder hacer que squid funcione como proxy reverso debemos realizar los siguientes cambios -vamos a continuar con el ejemplo de la serie y tenemos un VirtualHost (www.test.com) :
- visible_hostname _hostname_, debe ser nuestro dns público, es decir, <www.test.com>
- http_port _localip_:80 defaultsite=_default_virtual_host_ accel vhost, aquí indicaremos a squid que queremos que haga de proxy reverso donde <localip> será nuestra IP y <:default virtual host> será nuestro virtual host por defecto, en nuestro caso <test.com>
El formato de <cache_peer> es:
cache_peer hostname type http_port icp_port optionsDonde <hostname> será el dns/ip de nuestro servidor Apache HTTP, <type> será siempre parent, <http_port> será el puerto donde escucha nuestro Apache HTTP, <icp_port> lo estableceremos a 0 para que no utilice peticiones icp y por último, las opciones. En las opciones deberemos declarar un nombre único <name> para cada cache_peer y la opción <login=PASS> para indicarle a squid que si tiene una petición de login la envíe al padre, no la trate el.
Por lo tanto, para nuestro ejemplo -teniendo en cuenta que <htt1.test.com> es nuestro servidor Apache HTTP- quedará de la siguiente forma:
cache_peer http1.test.com parent 80 0 no-query originserver round-robin login=PASS name=primaryY si quiero que el virtual host <app1.test.com> lo proces <http1.test.com> y que el virtual host <app2.test.com> lo procese <http2.test.com>? Bien, pues declararemos dos cache_peer, de esta forma
acl sites_public dstdomain www.test.com app1.test.com app2.test.com
cache_peer_access primary allow sites_public
cache_peer_access primary deny all
cache_peer http1.test.com parent 80 0 no-query originserver round-robin login=PASS name=app1Tener en cuenta, que ahora los controles para denegar el acceso a la caché a los dominios que no son nuestros, debe ir en última posición
acl sites_public_app1 dstdomain app1.test.com
cache_peer_access app1 allow sites_public_app1
cache_peer http2.test.com parent 80 0 no-query originserver round-robin login=PASS name=app2
acl sites_public_app2 dstdomain app2.test.com
cache_peer_access app2 allow sites_public_app2
cache_peer_access app1 deny all
cache_peer_access app2 deny all
Como la configuración puede ser un poco dificil si se empieza desde cero, os dejo un archivo de configuración de ejemplo para squid cache como proxy reverso
Configuración DNS y Puesta en Marcha
Nuestro reverse proxy no debe tener resolución por dns -o mejor dicho, tiene que tener unos propios- por ello, una solución sencilla -en vez de montar un servidor dns exclusivo- si no tenemos muchos hosts es declararlos en nuestro </etc/hosts>
Pero, qué debemos declarar? Bueno todos los host que tengamos en nuestros <cache_peer>, es decir, nuestro servidores Apache http. Continuando con nuestro ejemplo, el archivo </etc/hosts> contendrá las siguientes entradas:
# vi /etc/hostsYa sólo nos queda verificar que las configuraciones están correctas, crear la caché de squid y activar el servicio.
# reverse proxy
172.26.17.20 www.test.com www.test.com
# real http server
172.26.17.1 http1.test.com http1.test.com
172.26.17.2 http2.test.com http2.test.com
Comprobamos la sintaxis del archivo <squid.conf>
# /opt/www/squid-2.7/sbin/squid -k parseCreamos la estrucutra de la caché
# mkdir -p /opt/www/squid-2.7/var/cacheActivamos el servicio squid-cache utilizando Solaris SMF
# mkdir -p /opt/www/squid-2.7/var/run
# cd /opt/www/squid-2.7/var/
# chmod -R 700 cache logs
# chown -R nobody:nobody cache logs
# /opt/www/squid-2.7/sbin/squid -z
2010/04/30 13:14:57| Creating Swap Directories
# svcs squid_2Ahora vamos a comprobar que nuestra instalación está correcta, para ello, utilizaremos el comando <squidclient> para realizar una petición http
STATE STIME FMRI
disabled 12:47:56 svc:/application/cache/squid_2:reverse_proxy
# svcadm enable squid_2
# svcs -p squid_2
STATE STIME FMRI
online 12:48:23 svc:/application/cache/squid_2:reverse_proxy
12:48:23 6164 squid
12:48:23 6166 squid
12:48:24 6167 dnsserver
12:48:24 6168 dnsserver
12:48:24 6169 dnsserver
12:48:24 6170 dnsserver
12:48:24 6171 dnsserver
12:48:24 6172 unlinkd
# /opt/www/squid-2.7/bin/squidclient -h www.test.com -p 80 -r http://www.test.comPodemos comprobar el registro de squid-cache en el archivo <access.log> para ver que, realmente ha ido por la caché
HTTP/1.0 200 OK
Accept-Ranges: bytes
Last-Modified: Tue, 09 Mar 2010 17:06:21 GMT
Content-Length: 7777
Content-Type: text/html
Date: Fri, 30 Apr 2010 10:49:55 GMT
Server: Apache/2.2.15 (Unix) mod_jk/1.2.30
ETag: W/"7777-1268154381000"
Age: 1770
Connection: close
# tail /opt/www/squid-2.7/var/logs/access.logRotación Logs de Squid
172.26.17.20 - - [30/Apr/2010:13:25:51 +0200] "GET http://www.test.com/ HTTP/1.1" 200 8041 TCP_CLIENT_REFRESH_MISS:ROUNDROBIN_PARENT
Por último, vamos a hacer que squid rote los archivos de logs utilizando una entrada en nuestro crontab que llame a squid con la opción <-k rotate> -puedes ver cómo editar el crontab en Solaris, si tienes problemas-:
# export EDITOR=vi
# crontab -e
##########################################
## ROTATE SQUID LOG
##########################################
00 0 * * * /opt/www/squid-2.7/sbin/squid -k rotate
:wq
Conclusiones
Con esta entrega hemos concluido los requistos necesarios para poder poner nuestro tomcat en producción de forma eficiente. Ahora ya podemos explicar cómo se hace!
En las próximas entregas, veremos como configurar Solaris 10 utilizando zonas -para reverse proxy, http y j2ee- y cómo hacerlo con OpenSolaris y Crossbow. Esto nos servirá para ver las principales diferencias entre hacerlo con Solaris 10 y con OpenSolaris -es muy interesante-
<< Instalación de Apache HTTP como frontend de Tomcat
<< Instalación de Apache Tomcat como stand alone con VirtualHosts
Referencias
- Configurar Squid Cache como Proxy Reverso en Solaris 10
- Squid cache configuration file index
- Squid Configuration File Example for Reverse Proxy
- Cómo limpiar la caché de squid
- Cómo editar el Crontab en Solaris
- Manifest para Squid 2 Solaris 10 SMF, proxy reverso y proxy http
- Manifest para Squid 2 Solaris 10 SMF, proxy reverso
- Method para Squid 2 Solaris 10 SMF
No hay comentarios:
Publicar un comentario