2015-11-03 20 views
6

cakephp1.3 kullanıyorum ve bazı varlıklar temalı varlıklar (js, img vb) ve diğerleri temalı varlıklar değildir.Nginx önbellek yeniden yazılan varlıkları nasıl yapabilirim?

Temassız öğeler doğru şekilde önbelleğe alınır; Ancak temalı varlıklar doğru son kullanma başlıklarını almıyor. Temalı varlıkları bulmaya yardımcı olmak için yer bloğunda tekrar yazma işlemleri yapıyorum, ancak bir nedenden ötürü, nginx doğru önbellek başlıklarını uygulamıyor.

Nginx yapılandırmasının bir kopyasını aşağıda ekledim. Yeniden yazılan varlıkları önbelleğe almayı kim çözdü?

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

cevap

4

Evet, tema varlıkları CakePHP'de yavaştır, aynı zamanda yapılmış resmi belgelerinde here tarif etmiştir.

Çözüm, bu tema öğelerini try_files kullanarak nginx aracılığıyla sunmaktır.

# 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

Bu benim soruya cevap vermez: Burada

yukarıdaki amaç için bir örnek nginx yapılandırmasıdır. Zaten denediğim, deneme dosyalarını kullanıyorum, şaşkın olduğum şey, Nginx'in zaman aşımlarını doğru bir şekilde ayarlamayacağıdır. Lütfen sorumu tekrar okuyun. – user1658296