2015-11-03 92 views
6

我使用的是cakephp1.3,一些資產是主題資產(js,img等),其他資產不是主題資產。如何使nginx緩存重寫資產?

非主題資產緩存正確;但主題資產沒有得到正確的到期標題。我在位置塊中使用重寫來幫助查找主題資產,但由於某些原因,nginx不會應用正確的緩存標頭。

我附上了我的nginx配置下面的副本。有沒有人解決了如何緩存重寫的資產?

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; 
    } 
} 
} 

回答

4

是的,主題資產在CakePHP的速度較慢,所以一直也其官方文檔中描述here

解決方案是通過使用try_files通過nginx提供這些主題資產。

下面是用於上述目的的例子nginx的配置:

# 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

這不回答我的問題。我已經清楚,我一直在使用try文件,我感到困惑的是Nginx不會正確設置過期頭文件,它總是默認爲24小時。請再讀一遍我的問題。 – user1658296