1. Uno de los cachés tradicionales (404)
Este método consiste en dirigir el error 404 de nginx al backend y luego usar proxy_store para guardar la página devuelta por el backend.
Configuración:
ubicación/{
raíz /home/html/;#directorio de inicio
caduca 1d;#Tiempo de vencimiento de la página web
error_page 404 =200 /fetch$request_uri;#404 dirigido al directorio /fetch
}
ubicación /fetch/ {#404Directo aquí
internal;#Indica que no se puede acceder directamente a este directorio externamente
caduca 1d;#Tiempo de vencimiento de la página web
alias /home/html/;#La dirección del sistema de archivos del directorio virtual debe ser coherente con la ubicación/, proxy_store guardará el archivo en este directorio
proxy_pass http://www.sudone.com/;#Dirección ascendente del backend, /fetch también es un proxy
proxy_set_header Accept-Encoding '';# Deje que el servidor no devuelva contenido comprimido ( gzip o deflate). Guardar el contenido comprimido causará problemas.
proxy_store on;#Especifique nginx para guardar el archivo devuelto por el proxy
proxy_temp_path /home/tmp;#Directorio temporal, este directorio debe estar en la misma partición del disco duro que /home/html
}
Al usarlo, tenga en cuenta que nginx debe tener permiso para escribir archivos en /home/tmp y /home/html. En Linux , nginx generalmente está configurado para ejecutarse como el usuario nadie, por lo que estos dos directorios deben configurarse como nadie. Para que sea exclusivo del usuario nadie, por supuesto también puedes usar chmod 777, pero todos los administradores de sistemas experimentados te recomendarán no usar 777 casualmente.
2. Caché tradicional 2 (!-e)
El principio es básicamente el mismo que el del salto 404, pero más conciso:
ubicación/{
raíz /inicio/html/;
proxy_store activado;
proxy_set_header Aceptar codificación '';
proxy_temp_path /home/tmp;
si (!-f $nombre_archivo_solicitud)
{
proxy_passhttp://www.sudone.com/;
}
}
Puede ver que esta configuración ahorra una gran cantidad de código en comparación con 404. Utiliza! -f para determinar si el archivo solicitado existe en el sistema de archivos. Si no existe, proxy_pass al backend y la devolución también se guarda usando. tienda_proxy.
Ambos cachés tradicionales tienen básicamente las mismas ventajas y desventajas:
Desventaja 1: los enlaces dinámicos con parámetros, como read.php?id=1, no son compatibles. Debido a que nginx solo guarda el nombre del archivo, este enlace solo se guarda como read.php en el sistema de archivos, para que los usuarios accedan a leer. php?id= 2 devolverá resultados incorrectos. Al mismo tiempo, no admite la página de inicio en forma de http://www.sudone.com/ ni el directorio secundario http://www.sudone.com/download/, porque nginx es muy honesto y escribirá dicha solicitud en un archivo de acuerdo con el sistema de enlace, y este enlace es obviamente un directorio, por lo que el guardado falla. En estos casos, es necesario volver a escribir para guardar correctamente.
Desventaja 2: No existe ningún mecanismo para la caducidad y limpieza del caché dentro de nginx. Estos archivos almacenados en caché se almacenarán permanentemente en la máquina. Si hay muchas cosas para almacenar en caché, llenarán todo el espacio del disco duro. Para ello, puede utilizar un script de shell para limpiarlo periódicamente y puede escribir programas dinámicos como php para realizar actualizaciones en tiempo real.
Desventaja 3: solo se pueden almacenar en caché 200 códigos de estado, por lo que los códigos de estado como 301/302/404 devueltos por el backend no se almacenarán en caché. Si se elimina un enlace pseudoestático con una gran cantidad de visitas, continuará. penetrar y provocar que la parte trasera lleve mucha presión.
Desventaja 4: nginx no seleccionará automáticamente la memoria o el disco duro como medio de almacenamiento. Todo está determinado por la configuración. Por supuesto, habrá un mecanismo de almacenamiento en caché de archivos a nivel del sistema operativo en el sistema operativo actual, por lo que no es necesario. Preocuparse demasiado por las grandes lecturas simultáneas si se almacena en el disco duro causa problemas de rendimiento.
Las desventajas del caché tradicional de nginx son también sus características diferentes del software de almacenamiento en caché como Squid, por lo que también puede considerarse una ventaja. En aplicaciones de producción, a menudo se usa como socio de Squid. Squid a menudo no puede bloquear enlaces con ?, pero nginx puede bloquear su acceso, como: http://sudone.com/? y http://sudone. com / será tratado como dos enlaces en Squid, por lo que provocará dos penetraciones; mientras que nginx solo lo guardará una vez, sin importar que el enlace sea http://sudone.com/?1 o http://sudone.com/. ? 123, nginx no puede almacenarlo en caché, lo que protege eficazmente el host backend.
nginx guardará fielmente el formulario del enlace en el sistema de archivos, de modo que para un enlace, pueda verificar fácilmente el estado y el contenido de la caché en la máquina de caché, y también pueda cooperar fácilmente con otros administradores de archivos como rsync. Es completamente una estructura de sistema de archivos.
Ambos cachés tradicionales pueden guardar archivos en /dev/shm en Linux. Generalmente hago esto para que la memoria del sistema pueda usarse para el almacenamiento en caché. Si se usa la memoria, el contenido caducado se limpiará mucho más rápido. Al usar /dev/shm/, además de apuntar el directorio tmp a la partición /dev/shm, si hay una gran cantidad de archivos y directorios pequeños, también debe modificar la cantidad de inodos y la capacidad máxima de esta memoria. dividir:
montar -o tamaño=2500M -o nr_inodes=480000 -o noatime,nodiratime -o remontar /dev/shm
El comando anterior se usa en una máquina con memoria 3G. Debido a que la memoria máxima predeterminada de /dev/shm es la mitad de la memoria del sistema, que es 1500 M, este comando la aumentará a 2500 M. Los inodos del sistema pueden no ser suficientes de forma predeterminada, pero lo interesante es que se puede ajustar a voluntad. El ajuste aquí es 480000, que es un poco conservador, pero básicamente es suficiente.
3. Caché basado en memoria caché d
nginx tiene cierto soporte para memcached , pero la función no es particularmente sólida y el rendimiento sigue siendo muy bueno.
ubicación /mem/ {
si ( $uri ~ "^/mem/([0-9A-Za-z_]*)$" )
{
establecer $memcached_key "$1";
memcached_pass 192.168.1.2:11211;
}
expira 70;
}
Esta configuración apuntará http://sudone.com/mem/abc a la clave abc de memcached para recuperar datos.
Actualmente, nginx no tiene ningún mecanismo para escribir en Memcached, por lo que la escritura de datos en Memcached debe realizarse utilizando el lenguaje dinámico en segundo plano. Puede usar 404 para dirigirse al backend para escribir datos.
4. Basado en el complemento ncache de terceros
ncache es un buen proyecto desarrollado por Sina Brothers. Utiliza nginx y memcached para implementar algunas funciones similares al almacenamiento en caché de Squid. No tengo experiencia en el uso de este complemento.
http://code.google.com/p/ncache/
5. La función proxy_cache recientemente desarrollada de nginx
A partir de la versión nginx-0.7.44, nginx admite una función de caché más formal similar a Squid. Todavía está en la etapa de desarrollo y el soporte es bastante limitado. Este caché guarda el enlace después de codificarlo con codificación md5, por lo que puede admitirlo. cualquier enlace Al mismo tiempo, también se admiten estados distintos de 200, como 404/301/302.
Configuración:
Primero configure un espacio de caché:
proxy_cache_path /ruta/a/niveles de caché=1:2 key_zone=NOMBRE:10m inactivo=5m max_size=2m clean_time=1m;
Tenga en cuenta que esta configuración está fuera de la etiqueta del servidor. Los niveles especifican que el espacio de caché tiene dos niveles de directorios hash. El directorio del primer nivel tiene 1 letra y el segundo nivel tiene 2 letras. El nombre del archivo guardado será similar a /ruta/. to/cache /c/29/b7f54b2df7773722d382f4809d65029c;keys_zone le da un nombre a este espacio, 10 m significa que el tamaño del espacio es 10 MB; 5 m de inactivo significa que el tiempo de caché predeterminado es de 5 minutos; 2 m de max_size significa que un solo archivo que supere los 2 m no se almacenará en caché; clean_time especifica un minuto. Borre el caché una vez.
ubicación/{
proxy_passhttp://www.sudone.com/;
proxy_cache NOMBRE;#Usar NOMBRE claves_zona
proxy_cache_valid 200 302 1h; los códigos de estado #200 y 302 se guardan durante 1 hora
proxy_cache_valid 301 1d; el código de estado #301 se guarda por un día
proxy_cache_valid cualquier 1m;#Otros se guardan durante un minuto
}