Configurar Cache de Nginx php-fmp

  • Autor Autor Stron
  • Fecha de inicio Fecha de inicio
Stron

Stron

Eta
Diseñador
Verificación en dos pasos activada
Verificado por Whatsapp
Buenas Betas, tengo una web en vps con Vesta y nginx - php-fmp, estoy tratando de configurar el cache fastcgi, he leido varios tutoriales como este, pero no parece funcionar. simplemente no crea el cache, y ni manda los headers.


Cabe recalcar que no uso wordpress, es un script php. Si alguien me puede decir como configurarlo, ya que casi no hay tutoriales para configurar fastcgi en webs con vestaCP y menos con nginx - php-fmp. O me pueden dar otras alternativas para generar el cache?, ya que la conexión inicial en mi web es lenta.

Por si acaso, estoy editando una copia de un template web, para así no hacer cambios directamente en miweb.conf

Espero alguien me pueda ayudar, gracias!.
 
Y que es lo que no te funciona? no dices nada.

Pone la configuración que tienes.
 
Y que es lo que no te funciona? no dices nada.

Pone la configuración que tienes.
Pues basicamente lo tengo configurado como lo muestra el tutorial que puse ahi, pero simplemente no genera cache, no se cual sea el problema,

(fragmeto de codigo)
/usr/local/vesta/data/templates/web/nginx/php-fpm/mi_configuracion.tpl / stpl
Insertar CODE, HTML o PHP:
fastcgi_cache_path /etc/nginx/cache levels=1:2 keys_zone=%domain%:100m inactive=60m;
fastcgi_cache_key "$scheme$request_method$host$request_uri";
add_header X-Cache $upstream_cache_status;

server {
    listen      %ip%:%web_port%;
    server_name %domain_idn% %alias_idn%;
    root        %docroot%;
    index       index.php index.html index.htm;
    access_log  /var/log/nginx/domains/%domain%.log combined;
    access_log  /var/log/nginx/domains/%domain%.bytes bytes;
    error_log   /var/log/nginx/domains/%domain%.error.log error;

Insertar CODE, HTML o PHP:
#Cache everything by default
set $skip_cache 0;

    # POST requests and urls with a query string should always go to PHP
    if ($request_method = POST) {
        set $skip_cache 1;
    }

    #Don't cache if the URL contains a query string
    if ($query_string != "") {
        set $skip_cache 1;
    }
location / {
        try_files $uri $uri/ /index.php?$args;
        location ~* ^.+\.()$ {
            expires 1d;
        }

        location ~ [^/]\.php(/|$) {
            fastcgi_cache_valid 200 301 302 60m;
            fastcgi_ignore_headers Cache-Control Expires Set-Cookie;
            fastcgi_cache %domain%;
            fastcgi_cache_bypass $skip_cache;
            fastcgi_no_cache $skip_cache;

            
            fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
            try_files $uri =404;
            fastcgi_pass %backend_lsnr%;
            fastcgi_index index.php;
            include /etc/nginx/fastcgi_params;
        }
 
Existe el directorio /etc/nginx/cache/ con sus respectivos permisos 700.

Revisa si esta haciendo caching, pone tu web en esta url https://dnschecker.org/server-headers-check.php y revisa este parametro "X-Cache" si te sale HIT entonces funciona el cache sino te dirá MISS

Cabe mencionar que como mencionas que es un script a medida tienes que adaptar el cache a ti sitio porque como lo tienes ahi va hacer cache de todo, incluyendo logins que eso va a crear brechas de seguridad porque estas haciendo caching al login del usuario del primero que se trato identificarse así que cuidado.

PD: No se realmente si la key_zone acepta puntos por lo que te recomiendo mejor ponle un nombre ya fijo y no ocupar una variable
 
Última edición:
Existe el directorio /etc/nginx/cache/%domain% con sus respectivos permisos 700.

Revisa si esta haciendo caching, pone tu web en esta url https://dnschecker.org/server-headers-check.php y revisa este parametro "X-Cache" si te sale HIT entonces funciona el cache sino te dirá MISS

Cabe mencionar que como mencionas que es un script a medida tienes que adaptar el cache a ti sitio porque como lo tienes ahi va hacer cache de todo, incluyendo logins que eso va a crear brechas de seguridad porque estas haciendo caching al login del usuario del primero que se trato identificarse así que cuidado.
Claro, en e fragmento que pase no puse eso, pero si estoy excluyendo en login, En cuanto al directorio si existe, pero quiero pensar que el problema es el usuario / grupo que maneja el directorio, ¿que usuario y grupo debería poner al directorio?
 
El directorio te lo crea el nginx lo que esta adentro pero el principal debe de ir con nombre www-data:root /etc/nginx/cache/
 
Pues basicamente lo tengo configurado como lo muestra el tutorial que puse ahi, pero simplemente no genera cache, no se cual sea el problema,

(fragmeto de codigo)
/usr/local/vesta/data/templates/web/nginx/php-fpm/mi_configuracion.tpl / stpl
Insertar CODE, HTML o PHP:
fastcgi_cache_path /etc/nginx/cache levels=1:2 keys_zone=%domain%:100m inactive=60m;
fastcgi_cache_key "$scheme$request_method$host$request_uri";
add_header X-Cache $upstream_cache_status;

server {
    listen      %ip%:%web_port%;
    server_name %domain_idn% %alias_idn%;
    root        %docroot%;
    index       index.php index.html index.htm;
    access_log  /var/log/nginx/domains/%domain%.log combined;
    access_log  /var/log/nginx/domains/%domain%.bytes bytes;
    error_log   /var/log/nginx/domains/%domain%.error.log error;

Insertar CODE, HTML o PHP:
#Cache everything by default
set $skip_cache 0;

    # POST requests and urls with a query string should always go to PHP
    if ($request_method = POST) {
        set $skip_cache 1;
    }

    #Don't cache if the URL contains a query string
    if ($query_string != "") {
        set $skip_cache 1;
    }
location / {
        try_files $uri $uri/ /index.php?$args;
        location ~* ^.+\.()$ {
            expires 1d;
        }

        location ~ [^/]\.php(/|$) {
            fastcgi_cache_valid 200 301 302 60m;
            fastcgi_ignore_headers Cache-Control Expires Set-Cookie;
            fastcgi_cache %domain%;
            fastcgi_cache_bypass $skip_cache;
            fastcgi_no_cache $skip_cache;

       
            fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
            try_files $uri =404;
            fastcgi_pass %backend_lsnr%;
            fastcgi_index index.php;
            include /etc/nginx/fastcgi_params;
        }

@Stron la carpeta de Cache para Nginx va con usuario y grupo nginx:nginx sobre permisos 755 en /var/cache/nginx o /var/lib/nginx

el cache path si no esta duplicado en alguna ruta de Vesta en tu archivo tpl lo puedes incluir en la linea #1 de la siguiente forma por ej.

fastcgi_cache_path /var/lib/nginx/cache/%domain% levels=1:2 keys_zone=%domain%:512m max_size=10g inactive=60m use_temp_path=off;

Y retocar los settings de fastcgi de la siguiente forma..

fastcgi_cache %domain%;
fastcgi_cache_lock on;
fastcgi_cache_min_uses 2;
fastcgi_cache_revalidate on;
fastcgi_no_cache $skip_cache;
fastcgi_cache_bypass $skip_cache;
fastcgi_cache_valid 200 301 302 60m;
fastcgi_cache_valid 404 500 502 504 1m;
fastcgi_cache_key "$scheme$request_method$mobile_request$host$request_uri";
fastcgi_cache_use_stale error timeout updating invalid_header http_500 http_503;

Por fuera tal y como lo tenias anteriormente entre lineas.

set $skip_cache 0; if ($query_string != ""){ set $skip_cache 1; } if ($request_method = POST) { set $skip_cache 1; }

Pero agregando..

set $var_desktop "fullversion"; set $var_mobile "mobileversion";

y en nginx.conf estableciendo..

# VERSIONES map $http_user_agent $mobile_request { default fullversion; "~*ipad" mobileversion; "~*tablet" mobileversion; "~*android.*mobile" mobileversion; "~*iphone" mobileversion; "~*ipod.*mobile" mobileversion; "~*BlackBerry*Mobile Safari" mobileversion; "~*BB*Mobile Safari" mobileversion; "~*Opera.*Mini/7" mobileversion; "~*IEMobile/10.*Touch" mobileversion; "~*IEMobile/11.*Touch" mobileversion; "~*IEMobile/7.0" mobileversion; "~*IEMobile/9.0" mobileversion; "~*Firefox.*Mobile" mobileversion; "~*webOS" mobileversion; }

Si a pesar de esto no te funciona, el encabezado que llama al PHP la puedes cambiar por:

location ~ \.php$ {

Haces un rebuild con /usr/local/vesta/bin/v-rebuild-user y el usuario a cual le tienes asignada la plantilla, luego verificas que tan efectivos fueron los mismos. Cualquier cosa me puedes escribir por privado y lo vemos a detalle.

(Debes comprobar que las rutas de cache existen y tienen sus respectivos permisos)
 
@Stron la carpeta de Cache para Nginx va con usuario y grupo nginx:nginx sobre permisos 755 en /var/cache/nginx o /var/lib/nginx

el cache path si no esta duplicado en alguna ruta de Vesta en tu archivo tpl lo puedes incluir en la linea #1 de la siguiente forma por ej.

fastcgi_cache_path /var/lib/nginx/cache/%domain% levels=1:2 keys_zone=%domain%:512m max_size=10g inactive=60m use_temp_path=off;

Y retocar los settings de fastcgi de la siguiente forma..

fastcgi_cache %domain%;
fastcgi_cache_lock on;
fastcgi_cache_min_uses 2;
fastcgi_cache_revalidate on;
fastcgi_no_cache $skip_cache;
fastcgi_cache_bypass $skip_cache;
fastcgi_cache_valid 200 301 302 60m;
fastcgi_cache_valid 404 500 502 504 1m;
fastcgi_cache_key "$scheme$request_method$mobile_request$host$request_uri";
fastcgi_cache_use_stale error timeout updating invalid_header http_500 http_503;

Por fuera tal y como lo tenias anteriormente entre lineas.

set $skip_cache 0; if ($query_string != ""){ set $skip_cache 1; } if ($request_method = POST) { set $skip_cache 1; }

Pero agregando..

set $var_desktop "fullversion"; set $var_mobile "mobileversion";

y en nginx.conf estableciendo..

# VERSIONES map $http_user_agent $mobile_request { default fullversion; "~*ipad" mobileversion; "~*tablet" mobileversion; "~*android.*mobile" mobileversion; "~*iphone" mobileversion; "~*ipod.*mobile" mobileversion; "~*BlackBerry*Mobile Safari" mobileversion; "~*BB*Mobile Safari" mobileversion; "~*Opera.*Mini/7" mobileversion; "~*IEMobile/10.*Touch" mobileversion; "~*IEMobile/11.*Touch" mobileversion; "~*IEMobile/7.0" mobileversion; "~*IEMobile/9.0" mobileversion; "~*Firefox.*Mobile" mobileversion; "~*webOS" mobileversion; }

Si a pesar de esto no te funciona, el encabezado que llama al PHP la puedes cambiar por:

location ~ \.php$ {

Haces un rebuild con /usr/local/vesta/bin/v-rebuild-user y el usuario a cual le tienes asignada la plantilla, luego verificas que tan efectivos fueron los mismos. Cualquier cosa me puedes escribir por privado y lo vemos a detalle.

(Debes comprobar que las rutas de cache existen y tienen sus respectivos permisos)
Vale, probare los ajustes que menciona, ya les comento a ver que pasa.
 
Atrás
Arriba