Un módulo FastCGI está presente en Nginx. Este módulo contiene instrucciones. El contenido dinámico proporcionado por el back-end de PHP puede almacenarse en caché o guardarse con ellos. Esto resuelve su problema y no tiene que preocuparse por soluciones adicionales de almacenamiento en caché de páginas y complementos específicos de la aplicación.
Configure el almacenamiento en caché de FastCGI en su VPS
Primero, necesita instalar y configurar Nginx usando PHP en su VPS. Ahora debe editar el archivo de configuración del host virtual para el que debe habilitar el almacenamiento en caché.
nano /etc/nginx/sites-enabled/vhost
Nota especial: visite la página Mejor alojamiento VPS de Hosting mas Baratopara encontrar los mejores servidores web en esta categoría, incluidas las opiniones de expertos y usuarios.
Fuera de Servidor {} Directiva, debe agregar esta línea al comienzo del archivo:
fastcgi_cache_path /etc/nginx/cache levels=1:2 keys_zone=FASTCACHE:100m inactive=60m;
fastcgi_cache_key "$scheme$request_method$host$request_uri";
Verá la directiva “fastcachepath” que indica la ubicación de la caché, el tamaño, el nombre de la zona de almacenamiento, los niveles de subdirectorio y el temporizador inactivo.
Si bien puede usar cualquier ubicación en el disco duro, debe tener mucho cuidado al elegir el tamaño, pero debe ser más pequeño que la memoria de sus vps e intercambio combinados. Si el tamaño excede este criterio, recibirá un error que indica que no se puede asignar memoria. Deben mostrarse las opciones de nivel en la sección de limpieza: Nginx eliminará un caché si no se accede a él durante el tiempo especificado por la opción inactiva.
El hash de los nombres de archivo de la caché se especifica mediante la directiva ‘fastcgicachekey’. Según sus instrucciones, Nginx cifra un archivo al que se accede mediante MD5.
Ahora necesita mover la directiva Location que pasa la solicitud PHP a php5-fpm. Debe agregar estas líneas en la “ubicación ~ .php $ {}”:
fastcgi_cache FASTCACHE;
fastcgi_cache_valid 200 60m;
En las líneas anteriores, ‘fastcgi_cache’ alude a los nombres de las zonas de almacenamiento que ya mencionamos en las directivas ‘fastcgicache_path’ y el caché también se almacena en esta área.
De forma predeterminada, los objetos almacenados en caché son almacenados por Nginx por una duración que es especificada por uno de los encabezados proporcionados aquí: X-Accel-Expires, Expires, Cache-Control.
Si faltan estos encabezados, la vida útil predeterminada de la caché se especifica mediante la directiva ‘fastcgicachevalid’ en la línea anterior. De acuerdo con nuestra configuración en las líneas anteriores, solo se almacenan en caché las respuestas que tienen un código de estado de 200.
Prueba de configuración
Ahora se va a realizar una prueba de configuración.
service nginx configtest
Recargue Nginx si todo está bien
service nginx reload
Ahora verá el archivo vhost como este:
fastcgi_cache_path /etc/nginx/cache levels=1:2 keys_zone=FASTCACHE:100m inactive=60m; fastcgi_cache_key "$scheme$request_method$host$request_uri"; server { listen 80; root /usr/share/nginx/html; index index.php index.html index.htm; server_name yourdomainname.com; location / { try_files $uri $uri/ /index.html; } location ~ .php$ { try_files $uri =404; fastcgi_pass unix:/var/run/php5-fpm.sock; fastcgi_index index.php; include fastcgi_params; fastcgi_cache FASTCACHE; fastcgi_cache_valid 200 60m; } }
Probar el almacenamiento en caché de FastCGI en su VPS
Primero, necesita crear un archivo PHP que imprima un punto UNIX en el tiempo.
/usr/share/nginx/html/test.php
Luego pega lo siguiente:
<?php echo time(); ?>
Utilice su navegador web o curl para solicitar este archivo varias veces.
root@server:~# curl http://localhost/test.php;echo 1372986152 root@server:~# curl http://localhost/test.php;echo 1372986152 root@server:~# curl http://localhost/test.php;echo 1372986152
Si tiene la suerte de ver la misma marca de tiempo en todas las solicitudes, el almacenamiento en caché funciona de manera adecuada.
A continuación, debe encontrar el caché de esta solicitud haciendo una lista recursiva de la ubicación del caché.
root@vps:~# ls -lR /etc/nginx/cache/ /etc/nginx/cache/: total 0 drwx------ 3 www-data www-data 60 Oct 28 18:53 e /etc/nginx/cache/e: total 0 drwx------ 2 www-data www-data 60 Oct 28 18:53 18 /etc/nginx/cache/e/18: total 4 -rw------- 1 www-data www-data 117 Oct 28 18:53 b777c8adab3ec92cd43756226caf618e
Si desea agregar un encabezado ‘X-Cache’ a la respuesta, puede hacerlo con la ayuda de Nginx. Esto indica si el caché se perdió o se accedió.
Esto debe agregarse por encima de eso Servidor {} Directiva:
add_header X-Cache $upstream_cache_status;
Ahora mire el nuevo encabezado recargando el servicio Nginx y haciendo una consulta detallada con curl.
root@vps:~# curl -v http://localhost/test.php * About to connect() to localhost port 80 (#0) * Trying 127.0.0.1... * connected * Connected to localhost (127.0.0.1) port 80 (#0) > GET /test.php HTTP/1.1 > User-Agent: curl/7.26.0 > Host: localhost > Accept: */* > * HTTP 1.1 or later with persistent connection, pipelining supported < HTTP/1.1 200 OK < Server: nginx < Date: Tue, 27 April 2017 09:10:45 GMT < Content-Type: text/html < Transfer-Encoding: chunked < Connection: keep-alive < X-Cache: HIT < * Connection #0 to host localhost left intact 1373035828* Closing connection #0
Establecer excepciones de caché
En algunos casos, como la autenticación, no es necesario almacenar páginas en caché. Usando variables como ‘requesturi’, ‘rquestmethod’ y ‘http_cookie’ podemos excluir dicho contenido de la caché.
El siguiente es un ejemplo de una configuración que debe usarse en Servidor {}Contexto:
set $no_cache 0; if ($request_method = POST) { set $no_cache 1; } if ($query_string != "") { set $no_cache 1; } if ($request_uri ~* "/(administrator/|login.php)") { set $no_cache 1; } if ($http_cookie = "PHPSESSID") { set $no_cache 1; }
Deben introducirse las siguientes líneas Ubicación ~ .php $ {} para aplicar la variable ‘$ no_cache’ a las derivadas correspondientes:
fastcgi_cache_bypass $no_cache; fastcgi_no_cache $no_cache;
El caché existente para las solicitudes relacionadas con las condiciones que establecimos anteriormente es ignorado por la directiva ‘factcgicachebypass’, mientras que, si se cumplen los requisitos especificados, el ‘fastcginocache’ evita que la solicitud se almacene en caché.
limpiar cache
Las variables que establecemos para las derivadas ‘fastcgicachekey’ son la base de la convención de nomenclatura de la caché.
fastcgi_cache_key "$scheme$request_method$host$request_uri";
Según estas variables, estos habrían sido los valores reales cuando se nos solicitó “http: // localhost / time / php”:
fastcgi_cache_key "httpGETlocalhost/test.php";
La siguiente cadena sería la salida cuando esta cadena se pasa a través del hash MD5:
9552f2a3f53b52db6409e47b57ff63c0
El nombre de archivo de la caché se forma a partir de esto. Como hemos establecido “niveles = 1: 2” para los subdirectorios, el primer nivel del directorio se nombra con el primer carácter del último de esta cadena MD5, mientras que el segundo nivel tiene los dos últimos caracteres después del primer nivel.
Por lo tanto, la siguiente es la estructura de directorios completa de esta caché:
/etc/nginx/cache/e/18/ 9552f2a3f53b52db6409e47b57ff63c0
Ahora todo lo que tiene que hacer es desarrollar un script de limpieza en cualquier idioma basado en este caché. Para borrar el caché de una URL POST, a continuación se proporciona un script PHP.
/usr/share/nginx/html/purge.php
Insertar
<?php $cache_path="/etc/nginx/cache/"; $url = parse_url($_POST['url']); if(!$url) { echo 'Invalid URL entered'; die(); } $scheme = $url['scheme']; $host = $url['host']; $requesturi = $url['path']; $hash = md5($scheme.'GET'.$host.$requesturi); var_dump(unlink($cache_path . substr($hash, -1) . "https://hostadvice.com/" . substr($hash,-3,2) . "https://hostadvice.com/" . $hash)); ?>
Ahora debe enviar una solicitud POST a este archivo junto con la URL que desea eliminar.
curl -d 'url=http://www.yourwesitename.com/test.php' http://yourwebsitename.com/purge.php
Ahora verá la salida del script como Verdadero o Falso, lo que indica si la caché se ha borrado o no. Debe restringir el acceso y evitar que este script se almacene en caché.