2015-11-03 10 views
6

Sto usando cakephp1.3 e alcune risorse sono risorse a tema (js, img ecc.) E altre non sono risorse a tema.Come si creano le risorse riscritte nella cache di nginx?

Le risorse non a tema sono memorizzate correttamente nella cache; ma le risorse tematiche non ottengono le intestazioni di scadenza corrette. Uso le riscritture nel blocco di posizione per aiutare a trovare risorse a tema, ma per qualche ragione, nginx non applica le intestazioni di cache corrette.

Ho allegato una copia della mia configurazione di nginx di seguito. Qualcuno ha risolto il modo in cui memorizzare le risorse riscritte?

user nginx; 
worker_processes 2; 

error_log /var/log/nginx/error.log; 

pid  /var/run/nginx.pid; 


events { 
    worker_connections 1024; 
} 

#----------------------------------------------------------------------------------------------------- 

http { 
    include  /etc/nginx/mime.types; 
    default_type application/octet-stream; 

    log_format main '$remote_addr - $remote_user [$time_local] "$request" ' 
         '$status $body_bytes_sent "$http_referer" ' 
         '"$http_user_agent" "$http_x_forwarded_for"'; 

    access_log /var/log/nginx/access.log main; 

    sendfile  on; 
    #tcp_nopush  on; 

    #keepalive_timeout 0; 
    keepalive_timeout 65; 

    fastcgi_cache_path /var/cache/nginx levels=1:2 keys_zone=my_cache:100m inactive=60m; 
    fastcgi_cache_key "$scheme$request_method$host$request_uri"; 

    # Load modular configuration files from the /etc/nginx/conf.d directory. 
    # See http://nginx.org/en/docs/ngx_core_module.html#include 
    # for more information. 
    include /etc/nginx/conf.d/*.conf; 

server { 
    listen  80; 
    server_name ag_production; 
    access_log /var/log/nginx/ag.access.log; 
    error_log /var/log/nginx/ag.error.log; 
    rewrite_log on; 
    root  /var/www/html/app/webroot/; 
    index  index.php index.html index.htm; 

    set $no_cache 0; 

    location/{ 
     try_files $uri $uri/ @rules; 
    } 

    location @rules { 
     rewrite ^(.+)$ /index.php?url=$1 last; 
    } 

    # Pass the PHP scripts to FastCGI server 
    # listening on 127.0.0.1:9000 
    location ~ \.php$ { 
     #try_files $uri =404; 
     fastcgi_cache my_cache; 
     fastcgi_cache_valid 200 60m; # Only cache 200 responses, cache for 60 minutes 
     fastcgi_cache_methods GET HEAD; # Only GET and HEAD methods apply 
     add_header X-Fastcgi-Cache $upstream_cache_status; 
     fastcgi_cache_bypass $no_cache; # Don't pull from cache based on $no_cache 
     fastcgi_no_cache $no_cache; # Don't save to cache based on $no_cache 
     fastcgi_buffer_size 128k; 
     fastcgi_buffers 256 4k; 
     fastcgi_busy_buffers_size 256k; 
     fastcgi_temp_file_write_size 256k; 

     # fastcgi_pass unix:/tmp/php-fastcgi.sock; 
     fastcgi_pass 127.0.0.1:9000; 
     fastcgi_index index.php; 
     fastcgi_intercept_errors on; # to support 404s for PHP files not found 
     fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; 
     include  fastcgi_params; 
    } 

    location ~* \.(?:manifest|appcache|html?|xml|json)$ { 
     try_files $uri $uri/ @rules; 
     expires -1; 
     access_log logs/static.log; # I don't usually include a static log 
    } 

    # Feed 
    location ~* \.(?:rss|atom)$ { 
     try_files $uri $uri/ @rules; 
     expires 1h; 
     add_header Pragma "public"; 
       add_header Cache-Control "public, must-revalidate, proxy-revalidate"; 
    } 

    # Media: images, icons, video, audio, HTC 
    location ~* \.(?:jpg|jpeg|gif|png|ico|cur|gz|svg|svgz|mp4|ogg|ogv|webm|htc)$ { 
     expires 1M; 
     access_log off; 
     add_header Pragma "public"; 
     add_header Cache-Control "public, must-revalidate, proxy-revalidate"; 
     try_files $uri $uri/ @rules; 

    } 

    # CSS and Javascript 
    location ~* \.(?:css|js)$ { 
     try_files $uri $uri/ @rules; 
     expires 1y; 
     access_log off; 
       add_header Pragma "public"; 
       add_header Cache-Control "public, must-revalidate, proxy-revalidate"; 
    } 

    # Deny access to .htaccess files, 
    # git & svn repositories, etc 
    location ~ /(\.ht|\.git|\.svn) { 
     deny all; 
    } 
} 
} 

risposta

4

Sì, le attività a tema sono più lenti in CakePHP, è stato anche descritto here nella loro documentazione ufficiale.

La soluzione è di servire questi asset del tema tramite nginx, utilizzando try_files.

Ecco una configurazione nginx esempio per lo scopo di cui sopra:

# Serve CakePHP plugin assets directly 
location ~ /(.+)/(img|css|js|files)/(.*) { 
    access_log off; 
    expires 10d; 
    add_header Cache-Control public; 
    try_files $uri $uri/ /../plugins/$1/webroot/$2/$3 /../../plugins/$1/webroot/$2/$3 /index.php?url=$uri; 
} 

(source)

+0

Questo non risponde alla mia domanda. È già chiaro che ho usato i file di prova, ciò di cui sono confuso è che Nginx non imposterà correttamente le intestazioni di scadenza, ma è sempre impostato su 24 ore. Per favore, leggi di nuovo la mia domanda. – user1658296

Problemi correlati