LinuxParty

NUESTRO SITIO necesita la publicidad para costear hosting y el dominio. Por favor considera deshabilitar tu AdBlock en nuestro sitio. También puedes hacernos una donación entrando en linuxparty.es, en la columna de la derecha.
Inicio desactivadoInicio desactivadoInicio desactivadoInicio desactivadoInicio desactivado
 

Todo el mundo sabe lo difícil que es llevar a cabo la carga de su servidor web. En mi trabajo diario como ingeniero de hosting ignifica que muy a menudo hago la misma pregunta, "Wow, sitio web es muy interesante, pero ¿se puede hacer frente a un mayor tráfico con el tiempo?".

La situación "normal"

Un sitio web "normal" corre sobre Apache con mod_php capaz de soportar 20 solicitudes por segundo con facilidad, pero si te pones en 50 solicitudes por segundo (no es extraño con algunos sitios web como sitios web de los partidos políticos, etc)? La respuesta, en mi opinión es dejar de usar Apache, ya que como está ahora Apache no podrá soportar más.

¡SÍ! Nginx!

 
Viene en Nginx! Así que ¿Configurar tu sitio Web en Nginx y ejecutar un rápido loadtest (por ejemplo con 1000 solicitudes con 200 usuarios simultáneos) y ves que no tienes más que Apache, pero ¿cómo? Es realmente simple, es debido al hecho de que Nginx no tiene un módulo de php construido, por lo que necesitará un procesador de fastcgi para procesar las páginas php (sugiero usar php-fpm como mejor medida que spawn-cgi). Así que ¿qué debo usar ahora? Usar de microcaching!

¿Qué demonios está Microcaching?

¿Qué es el microcaching? Bueno, la teoría es que los archivos de caché, durante un corto periodo de tiempo (como por ejemplo, 1 segundo) significa es que cuando un usuario pide la página se almacena en caché para que la próxima solicitud de cualquier otro, que vendrá de la caché, y con 100 usuarios que solicitado dentro de los siguientes 5 segundos, sólo 1 de cada 20 usuarios tendrán crearán la página completa (y con Nginx y un sitio bien estructurado no tiene ningún problema).

Yo no me lo creo!

Ya lo creo! Déjeme ponerle un ejemplo, tome este sitio web se encuentra en estos momentos. Digamos que tenemos un loadtest de 1000 solicitudes con 200 usuarios concurrentes. Si ejecuta este sitio web bajo Apache obtendría entre 10-40 peticiones por segundo, máximo! Y su servidor web se vendría abajo en alguna carga grave y se verían obligados a ampliar su tiempo de latencia. Bajo Nginx con PHP-FPM sin microcaching es lo mismo (tal vez unas pocas más peticiones pero su servidor tendría muchos procesos en ejecución php-fpm para procesar las solicitudes). Con microcaching obtiene la friolera de 300 a 450 solicitudes de un segundo!

Ok, me lo das!

Microcaching es realmente fácil de configurar, a continuación es un ejemplo de configuración que se puede ejecutar en cualquier sitio web hecho con PHP (en este caso es específico para Wordpress). Eche un vistazo:

#
# your website
#
server {
    listen       80;
    server_name  <your hostnames>;
    access_log  <your access log>  main;
    error_log <your error log>;
    root   <your root folder>;
    location / {
        index  index.php index.html index.htm;
    }
    if (!-e $request_filename) {
        rewrite ^(.+)$ /index.php?q=$1 last;
    }
    location ~ \.php$ {
        # Setup var defaults
        set $no_cache "";
        # If non GET/HEAD, don't cache & mark user as uncacheable for 1 second via cookie
        if ($request_method !~ ^(GET|HEAD)$) {
            set $no_cache "1";
        }
        # Drop no cache cookie if need be
        # (for some reason, add_header fails if included in prior if-block)
        if ($no_cache = "1") {
            add_header Set-Cookie "_mcnc=1; Max-Age=2; Path=/";
            add_header X-Microcachable "0";
        }
        # Bypass cache if no-cache cookie is set
        if ($http_cookie ~* "_mcnc") {
                    set $no_cache "1";
        }
        # Bypass cache if flag is set
        fastcgi_no_cache $no_cache;
        fastcgi_cache_bypass $no_cache;
        fastcgi_cache microcache;
        fastcgi_cache_key $server_name|$request_uri;
        fastcgi_cache_valid 404 30m;
        fastcgi_cache_valid 200 10s;
        fastcgi_max_temp_file_size 1M;
        fastcgi_cache_use_stale updating;
        fastcgi_pass localhost:9000;
        fastcgi_pass_header Set-Cookie;
        fastcgi_pass_header Cookie;
        fastcgi_ignore_headers Cache-Control Expires Set-Cookie;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        fastcgi_param  PATH_INFO          $fastcgi_path_info;
        fastcgi_param  PATH_TRANSLATED    $document_root$fastcgi_path_info;
        #fastcgi_intercept_errors on;
        include fastcgi_params;
    }
}

También se debe poner en el formato de caché y su zona caché en nginx.conf, añadir estas líneas a su bloque http {}:

fastcgi_cache_path /var/cache/nginx2 levels=1:2 keys_zone=microcache:5m max_size=1000m;
log_format cache '$remote_addr - $remote_user [$time_local] "$request" '
'$status $upstream_cache_status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';

Pruébelo!

Animo todos a probarlo por sí mismos y verá la mejora en el rendimiento! Sé que es un gran cambio pasar de Apache a Nginx (config-wise) pero usted conseguirá un acceso muy rápido!

Pin It

Escribir un comentario


Código de seguridad
Refescar



Redes:



 

Suscribete / Newsletter

Suscribete a nuestras Newsletter y periódicamente recibirás un resumen de las noticias publicadas.

Donar a LinuxParty

Probablemente te niegues, pero.. ¿Podrías ayudarnos con una donación?


Tutorial de Linux

Filtro por Categorías