Título: [Apache] Problemas para servir contenido comprimido .gz ! (solved) Publicado por: Diabliyo en 10 Agosto 2011, 04:53 am Buenas.
Quiero implementar la opcion de servir contenido comprimido para ahorrar ancho de banda y alijerar el peso de mi sitio, lo primero la idea es que los scripts JS y estilo CSS se sirvan comprimidos y se puedan interpretar. Me refiero a algo asi: Código: # css Hasta este punto he implementado algunas cosas pero mi servidor no consigue interpretar los *.gz, vaya, es como si no interpretara el style CSS y el sitio se ve todo mal. Lo que he implementado es: Habilitar mod_deflate.so - Por defecto esta instalado. OJO, en Apache menor a 2.0 se usaba mod_gzip.so, ahora en 2.0 para arriba es mod_deflate.so Código: shell# cd /etc/httpd/modules/ Configurando mod_deflate.so Código: shell# cd /etc/httpd/conf.d/ Habilitando interpretacion de *.gz en httpd.conf [Ver httpd.conf completo] Código: shell# nano /etc/httpd/conf/httpd.conf Configurar php.ini para habilitar zlib compression Código: shell# cat /etc/php.ini | grep zlib Reiniciar apache Código: shell# /etc/init.d/httpd restart Subo los estilo.css.gz, script.js.gz, los invoco tal cual en el HTML, y al refrescar el sitio sale sin los estilos. en pocas palabras, no se interpreta. Les dejo la trama recepcionada para que verifiquen que el Header de Encoding esta en gzip. Sigo sin entender proque no funciona :(. GET a turundus.net Código: Date Wed, 10 Aug 2011 02:54:00 GMT Título: Re: [Apache] Problemas para servir contenido comprimido .gz ! Publicado por: madpitbull_99 en 10 Agosto 2011, 11:57 am Quiero implementar la opcion de servir contenido comprimido para ahorrar ancho de banda y alijerar el peso de mi sitio, lo primero la idea es que los scripts JS y estilo CSS se sirvan comprimidos y se puedan interpretar. Me refiero a algo asi: Código: # css Las hojas de estilo CSS y los scripts javascript se cargan en el navegador del cliente, no tiene nada que ver con el servidor. Por lo que no deberían tener extensión .gz. Hay algunas herramientas online que te permiten comprobar si tu servidor envía el contenido comprimido: _HTTP Compression (http://www.whatsmyip.org/http_compression/) _Compression / Deflat / Gzip test tool (http://www.gidnetwork.com/tools/gzip-test.php) Te interesará saber, que con PHP también puede comprimir los datos que se envía, mediante ZLib (Explicación (http://es.debugmodeon.com/articulo/activar-copresion-web-con-php-en-3-pasos)). Resumiendo, el servidor hace bien la compresión de los datos, el problema es el cliente/navegador, porque no carga ni las CSS ni los JS (al haberlos comprimido). Título: Re: [Apache] Problemas para servir contenido comprimido .gz ! Publicado por: Diabliyo en 10 Agosto 2011, 18:39 pm Las hojas de estilo CSS y los scripts javascript se cargan en el navegador del cliente, no tiene nada que ver con el servidor. Por lo que no deberían tener extensión .gz. Hay algunas herramientas online que te permiten comprobar si tu servidor envía el contenido comprimido: _HTTP Compression (http://www.whatsmyip.org/http_compression/) _Compression / Deflat / Gzip test tool (http://www.gidnetwork.com/tools/gzip-test.php) Te interesará saber, que con PHP también puede comprimir los datos que se envía, mediante ZLib (Explicación (http://es.debugmodeon.com/articulo/activar-copresion-web-con-php-en-3-pasos)). Resumiendo, el servidor hace bien la compresión de los datos, el problema es el cliente/navegador, porque no carga ni las CSS ni los JS (al haberlos comprimido). Buenas... Gracias por las recomendaciones... Me creeras loco men, pero si se pueden interpretar como style.css.gz, y es un servicio mismo del apache o del php (nose)... pero de que se puede, se puede, y mejora un buen el peso del sitio y la rapidez. Como ejemplo habilite la modalidad en otro sitio que tengo, es: http://lab.sie-group.net... Mirate el codigo fuente html y observa como esta llamado el estilo.css Ahora diras.. "pues hazlo"... El punto es que mi Blog (lab.sie-group.net) esta sobre un servidor GoDaddy, vaya, YO NO gestiono el server, ellos lo configuran. Y para mi otro sitio tengo un Servidor Dedicado, así que, no hayo como activar esa opción :(. Cabe resaltar que en el servidor de GoDaddy cuando yo llamo la URL: http://misitio.com/mitemplate/estillo.css.gz , me resulta el GZ descomprimido. Y cuando en mi servidor dedicado visito la URL: http://miserver.com/mitemplate/estilo.css.gz, me resulta el codigo comprimido en GZ, vaya, veo puros garabatos ! Saludos ! Título: Re: [Apache] Problemas para servir contenido comprimido .gz ! Publicado por: madpitbull_99 en 10 Agosto 2011, 22:10 pm No siempre hace falta poner la extensión .gz, ya que en teoría, la compresión-descompresión se hace en segundo plano.
En tu sitio (lab.sie-group) al crear la hoja de estilos le pusiste tú esa extensión? O la agrega el servidor de forma dinámica? En teoría no hace falta ponerle la extensión .gz si en las cabeceras HTTP le envías: Código: Accept-Encoding: gzip Los de GoDaddy creo que hacen algo así: Código
Fuente: Compressing Web Pages for Faster Load Times (http://help.godaddy.com/article/4485). Mediante .htaccess también puedes detectar si el navegador del usuario tiene GZip: Código: <files *.js.gz> O si vas a incluir los recursos (css y js) con la extensión .gz, lo más probable es que se lo tengas que indicar al servidor, al igual que arriba, mediante .htaccess: Código: AddEncoding gzip .gz Otro ejemplo de configuración del .htaccess es: Código: # compress text, html, javascript, css, xml: Si te fijas en los comentarios, le estás indicando que sirva "comprimidos" todos esos tipos MIME. Título: Re: [Apache] Problemas para servir contenido comprimido .gz ! Publicado por: Diabliyo en 10 Agosto 2011, 22:23 pm No siempre hace falta poner la extensión .gz, ya que en teoría, la compresión-descompresión se hace en segundo plano. En tu sitio (lab.sie-group) al crear la hoja de estilos le pusiste tú esa extensión? O la agrega el servidor de forma dinámica? En teoría no hace falta ponerle la extensión .gz si en las cabeceras HTTP le envías: Código: Accept-Encoding: gzip Los de GoDaddy creo que hacen algo así: Código
Creo que aun tomas bien el dato que te quiero decir, yo entiendo al habilitar Encoding gzip el sitio se envia compreso y apache hace todo el proceso, pero cuando yo me refiero a los script.js y script.css me refieo a comprimir los CSS y JS antes de subirlos al server por eso toman la extensión gz. Vaya: Código: micasa# cd /miproyecto/tema/css/ El peso del estilo.css.gz (80kb) es menos de la mitad de estilo.css (200kb), asi que el que subo es estilo.css.gz, pero obviamente al estar compreso e intentar abrirlo con un editor se ven puros garabatos. Despues lo subo al server de GoDaddy (lab.sie-group.net) y en el HTML invoco el estilo.css.gz, y sucede que en vez de mostrar los garabatos el mismos server GoDaddy lo traduce a legible. El punto aqui es que se reduce drasticamente el peso del sitio y la rapidez con que se visualiza el sitio. Lo demas que me dijiste segun entiendo es para que reconozca el GZ y lo asocie, pero deja lo implemento y subo los archivos compresos y haber si funciona. Por cierto, en el test de compresion http://www.gidnetwork.com/tools/gzip-test.php me indica que SI esta comprimido el sitio.... Saludos ! Otro ejemplo de configuración del .htaccess es: Código: # compress text, html, javascript, css, xml: Esta lineas si las uso, pero en una sola en el mod_deflate asi: Código: shell# cat /etc/http/conf.d/deflate.conf No siempre hace falta poner la extensión .gz, ya que en teoría, la compresión-descompresión se hace en segundo plano. En tu sitio (lab.sie-group) al crear la hoja de estilos le pusiste tú esa extensión? O la agrega el servidor de forma dinámica? En teoría no hace falta ponerle la extensión .gz si en las cabeceras HTTP le envías: Código: Accept-Encoding: gzip Los de GoDaddy creo que hacen algo así: Código
Fuente: Compressing Web Pages for Faster Load Times (http://help.godaddy.com/article/4485). Mediante .htaccess también puedes detectar si el navegador del usuario tiene GZip: Código: <files *.js.gz> O si vas a incluir los recursos (css y js) con la extensión .gz, lo más probable es que se lo tengas que indicar al servidor, al igual que arriba, mediante .htaccess: Código: AddEncoding gzip .gz Otro ejemplo de configuración del .htaccess es: Código: # compress text, html, javascript, css, xml: Si te fijas en los comentarios, le estás indicando que sirva "comprimidos" todos esos tipos MIME. Te confirmo que no funciona, vaya el sitio SI ESTA COMPRESO (eso lo se porque siempre lo ha estado desde que acitve mod_deflate), pero al pasarle los estilo.css y script.js comprimidos estos no se interpretan al visitar el sitio. Saludos ! Título: Re: [Apache] Problemas para servir contenido comprimido .gz ! Publicado por: Diabliyo en 10 Agosto 2011, 23:31 pm He puesto un test.php en donde se invoca un codigo.css.gz, alguien me ayude a que se pueda descomprimir al momento de entrar al sitio y pueda verse el estilo ?
Enlace: http://turundus.net/test.php Título: Re: [Apache] Problemas para servir contenido comprimido .gz ! Publicado por: madpitbull_99 en 11 Agosto 2011, 00:22 am (http://madzone.comoj.com/image_host/images/12041637154e430464a001b6.09883994captura.png)
Se ve perfectamente. Y en el código fuente me sale: Código Por lo tanto, lo está descomprimiendo bien. Título: Re: [Apache] Problemas para servir contenido comprimido .gz ! Publicado por: Diabliyo en 11 Agosto 2011, 15:58 pm (http://madzone.comoj.com/image_host/images/12041637154e430464a001b6.09883994captura.png) Se ve perfectamente. Y en el código fuente me sale: Código Por lo tanto, lo está descomprimiendo bien. Despues de colocar el enlace, horas despues quedo solucionado, mas tarde pongo la solucion... Título: Re: [Apache] Problemas para servir contenido comprimido .gz ! Publicado por: Diabliyo en 11 Agosto 2011, 23:21 pm Les dejo la solución explicada desde 0s.
---> Descargar Manual PDF (http://localhostr.com/file/QenQ2HN/_110811_5sngaemoservir_contenido_comprimido.pdf) <---- Concepto Cuando realizamos un sitio web y lo tenemos funcionando al 100% por lo general nuestro sitio llega a pesar mas de 1, 2, 3 o hasta 10Kb, esto resulta muy pesado cuando tenemos un servidor dedicado, ya que tenemos una cuota limite de consumo del ancho de banda, por lo cual es el momento en que debemos empezar a pensar en economizar codigo, disminuir tama~o del sitio y asu vez hagilizar el despliegue del sitio,he aqui donde tocamos el tema de Servidor Contenido Comprimido. La estrategia solo es valida para Seridores Dedicados o un Servidor Casero, ya que tocaremos la configuracion del apache y del php. Sobre mod_rewrite pues ya saber que pueden definirla desde su .htacces. Consejos Si usan un servidor dedicado o servidor casero no se les ocurra poner configuraciones en el HTACCESS, ya que es mas rapido la digestion y procesamiento de las reglas mod_rewrite desde el <VirtualHost> (donde declaramos nuestro dominio en httpd.conf). Cuestiones de renderizado ;) Antes de seguir con el manual es bueno primero vean cuando pesa su web y lo rapido con que se despliega, asi cuando implementen esto vean los resultados. Les dejo una implementacion para verificar el renderizado del sitio y tiempo: Código: <?php En misitio.com tenia los siguientes tiempos.... Antes de la implementacion... Código: Tiempo de Carga: 1.50 | Peso Web: 14.43 kb Despues de la implementacion... Código: Tiempo de Carga: 1.04 | Peso Web: 0.23 kb Configurando PHP Con PHP no es mucho rollo, solamente editamos el php.ini para habilitar la compresión usando zlib. Les mencionare solamente las lineas como deben estar, asi que, si ustedes las ven comentadas, entonces descomentarlas... Código: shell# catwc /etc/php.ini |grep zlib Configurando APACHE Es importante mencionar que en Apache versión mayor o igual a 2.0 se utiliza mod_deflate y en versiones menores a 2.0 se usa mod_gzip. En mi caso utilizo la versión reciente (solo un loco pone una desactualizada), asi que les planteare todo sobre mod_deflate. Primero dentro de nuestro <VirtualHost> debemos activar la encodeo con gzip y declarar los tipos de formatos. OJO, yo pongo todo en el <VirtualHost> porque solo me interesa para mi espacio, el de mis clientes pues ya deberan pedirlo o simplemente debe dar mas $$ (gajes de Hosting Básico y otros niveles xD). El VirtualHost Código: shell# cat /etc/httpd/conf/httpd.conf Ahora explicamos las lineas: Código: # estas son MIME types El Encodeado de los tipos: Código: # aqui indicamos que vamos a encodear con el compresor GZIP los tipos: .gz, .cgz y .jsz Mucho OJO, si no tenemso estas lineas, lo que sucedera es que al subir nuestros CSS o JS compresos en GZIP estos no se interpretaran sino que seran tomados como archivos compresos e interpretados con el MIME Type de applicacion/x-gzip y esto causara que no tengamos los STYLES puestos y el SCRIPT JS no existirá. Ahora debemos habilitar mod_deflate. Código: shell# cat /etc/httpd/conf/httpd.conf |grep deflate Y la configuracion... en mi caso todo lo tengo en el directorio /etc/httpd/conf.d/ Código: shell# cat /etc/httpd/conf.d/deflate.conf Creacion de Comprimidos Ya que tenemos todo configurado, ahora falta comprimir los estilos CSS y script JS. Código: # comprimiendo CSSs La razon del porque cambiamos de css.gz a .cgz, es porque mas arriba en la configuracion del Apache indicamos el MIME Type .cgz y .jgz. Adaptación en el Sitio Ahora solo falta mandar llamar los comprimidos en el sitio, aqui un ejemplo de antes y despues. Antes......... Código
Despues..... Código
Ofuscación en PHP Ahora debemos hacer la ofuscacion, y esto debe ser directamente en PHP, y veras como magicamente su sitio pasa de pesar muchisimos, a simples Kilobytes xD. Les dejo la idea basica sobre como se haria, ustedes ya en sus codes lo arman al gusto, pero deben seguir el siguiente lineamiento a fuerzas Código: <?php URL Amigables El uso de URL Amigables como muchos sabran sirven para evitar acceder a las noticias de la forma comun que es http://sitios.com/?id_noticia=12 y hacerlo mas amigable y legible, que seria: http://misitios.com/noticias/10-tituto_de_la_noticia.html. El punto de mencionar las URLS Amigables es porque posiblemente muchos digan no quiero usar la extensión CGZ o JGZ, y desean seguir usando CSS y JS. Pues si se puede, para ello hacemos uso de las mod_rewrite en Apache, la cual deben saber como activarlas (sino, entonces google). Para seguir usando la "nomenclatura" estilo.css o script.js, pero que este llame al comprimido GZ, usamos Reglas que deben ser establecidas mas o menos asi, cabe mencionar que para cada caso es distinto, dependiendo como tienen organizado su sitio. Donde tengo mis JGZ y CGZ ?? Código: # aqui tengo mis CGZ Editamos el <VirtualHost> (de preferencia... Yo aqui lo tengo) o bien el HTACCES (muchos tambien ponene aqui las reglas). Y dejamos mas o menos asi: Código: shell# cat /etc/httpd/conf/httpd.conf Ahora podran invocar las etiquetas: Código: <link rel="stylesheet" type="text/css" href="css/estilo.css"> Y mod_rewrite estaria llamando los JGZ y CGZ que son los que en realidad existen en el sitio. Herramientas Les dejo las herramientas web para que peudan testear la configruacion en su sitio y verificar que este bien implementada: http://www.whatsmyip.org/http_compression/ http://www.gidnetwork.com/tools/gzip-test.php Agradecimientos Pues de nada, al rato formalizo el texto y subo en PDF.... Visiten mi blog: <spam> Saludos ! |