我有一个单一的服务器块,我的网站驻留在该块内,我已经添加了一个location块,如下所示:
server { ... location ~* \.(?:ico|css|js|gif|jpe?g|png)$ { expires 30d; add_header Pragma public; add_header Cache-Control "public"; } ... }
当我用Y检查过期标题时! 缓慢没有任何东西被caching!
注意:在testing之前,我已经重新载入了我的configuration文件。
编辑1:
我注意到,更改任何静态文件都不会反映浏览器的新变化。 这个caching是否意味着服务器端caching? 我们不能在客户端浏览器上caching吗?
编辑2:
HTTP/1.0 200 OK Server: nginx Date: Tue, 23 Sep 2014 07:41:20 GMT Content-Type: image/png Content-Length: 5597 Last-Modified: Wed, 30 Jul 2014 22:50:19 GMT ETag: "53d976ab-15dd" Accept-Ranges: bytes Age: 30396 Connection: close
编辑3:
完整的nginXconfiguration:
# You may add here your # server { # ... # } # statements for each of your virtual hosts to this file ## # You should look at the following URL's in order to grasp a solid understanding # of Nginx configuration files in order to fully unleash the power of Nginx. # http://wiki.nginx.org/Pitfalls # http://wiki.nginx.org/QuickStart # http://wiki.nginx.org/Configuration # # Generally, you will want to move this file somewhere, and start with a clean # file but keep this around for reference. Or just disable in sites-enabled. # # Please see /usr/share/doc/nginx-doc/examples/ for more detailed examples. ## server { # Port that the web server will listen on. listen 80; # Host that will serve this project. server_name localhost; # Useful logs for debug. location ~* \.(ico|css|js|gif|jpe?g|png)$ { expires 30d; add_header Pragma public; add_header Cache-Control "public"; } # The location of our projects public directory. root /var/www/html; # Point index to the Laravel front controller. index index.php; location / { # URLs to attempt, including pretty ones. try_files $uri $uri/ /index.php?$query_string; } # Remove trailing slash to please routing system. if (!-d $request_filename) { rewrite ^/(.+)/$ /$1 permanent; } # PHP FPM configuration. location ~* \.php$ { fastcgi_pass unix:/var/run/php5-fpm.sock; fastcgi_index index.php; fastcgi_split_path_info ^(.+\.php)(.*)$; include /etc/nginx/fastcgi_params; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; } # We don't need .ht files with nginx. location ~ /\.ht { deny all; } location ~ ^/(themes/\w+/views) { deny all; } #avoid processing of calls to unexisting static files by yii location ~ \.(js|css|png|jpg|gif|swf|ico|pdf|mov|fla|zip|rar)$ { try_files $uri =404; } } # Only for nginx-naxsi used with nginx-naxsi-ui : process denied requests #location /RequestDenied { # proxy_pass http://127.0.0.1:8080; #} #error_page 404 /404.html; # redirect server error pages to the static page /50x.html # #error_page 500 502 503 504 /50x.html; #location = /50x.html { # root /usr/share/nginx/html; #} # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000 # #location ~ \.php$ { # fastcgi_split_path_info ^(.+\.php)(/.+)$; # # NOTE: You should have "cgi.fix_pathinfo = 0;" in php.ini # # # With php5-cgi alone: # fastcgi_pass 127.0.0.1:9000; # # With php5-fpm: # fastcgi_pass unix:/var/run/php5-fpm.sock; # fastcgi_index index.php; # include fastcgi_params; #} # deny access to .htaccess files, if Apache's document root # concurs with nginx's one # #location ~ /\.ht { # deny all; #} # another virtual host using mix of IP-, name-, and port-based configuration # #server { # listen 8000; # listen somename:8080; # server_name somename alias another.alias; # root html; # index index.html index.htm; # # location / { # try_files $uri $uri/ =404; # } #} # HTTPS server # #server { # listen 443; # server_name localhost; # # root html; # index index.html index.htm; # # ssl on; # ssl_certificate cert.pem; # ssl_certificate_key cert.key; # # ssl_session_timeout 5m; # # ssl_protocols SSLv3 TLSv1; # ssl_ciphers ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv3:+EXP; # ssl_prefer_server_ciphers on; # # location / { # try_files $uri $uri/ =404; # } #}
原因是你有两个块匹配图像文件:
location ~* \.(?:ico|css|js|gif|jpe?g|png)$ { location ~ \.(js|css|png|jpg|gif|swf|ico|pdf|mov|fla|zip|rar)$ {
这意味着nginx只使用后者用于图像文件。
您需要像这样更改location声明:
location ~* \.(?:ico|css|js|gif|jpe?g|png)$ { expires 30d; add_header Pragma public; add_header Cache-Control "public"; try_files $uri =404; } location ~ \.(?:swf|pdf|mov|fla|zip|rar)$ { try_files $uri =404; }
现在图像文件只匹配第一个块,所以它被使用。
如果您想要控制浏览器caching文件的时间,而不需要从服务器重新validation它们,则还应该考虑添加Expires标头。