在Nginx上cachingSymfony 2

我从Apache 2 + Varnish的设置单独移动到Nginx,我有点卡住我应该如何安装/使用ESI以及在这个设置fastcgi_cache。

首先,ESI的思想是我们在服务器前面设置一个反向代理层来caching一个页面的caching部分,然后用esi来检索dynamic部分。 在我之前的设置中,Varnish是作为反向代理的,Apache只在必要时处理esi请求。

我的问题是,现在Nginx作为唯一的服务器在这里,我如何使它工作? 我是否需要安装另一个作为反向代理服务器运行的Nginx实例? 我找不到任何文件。

第二个问题是关于fastcgi_cache。 我已经设置了如下所述,但caching似乎没有为我工作,没有caching文件填充,我总是得到“MISS”。 我想知道是不是因为我需要在每个控制器中设置max-age / shared-max-age来使其工作?

fastcgi_cache_path /run levels=1:2 keys_zone=www_mysite_com:100m inactive=60m; fastcgi_cache_key "$scheme$request_method$host$request_uri"; fastcgi_cache_use_stale error timeout invalid_header http_500; server { #listen 80; ## listen for ipv4; this line is default and implied #listen [::]:80 default ipv6only=on; ## listen for ipv6 root /var/www/mysite.com/w/w/w/www/web; index index.php index.html index.htm; # Make site accessible from http://www.mysite.com server_name www.mysite.com; # Specify a character set charset utf-8; # strip app.php/ prefix if it is present rewrite ^/app\.php/?(.*)$ /$1 permanent; # h5bp nginx configs # include conf/h5bp.conf; location / { index app.php; try_files $uri @rewriteapp; } location @rewriteapp { rewrite ^(.*)$ /app.php/$1 last; } # Deny access to .htaccess location ~ /\.ht { deny all; } # Don't log robots.txt or favicon.ico files location = /favicon.ico { log_not_found off; access_log off; } location = /robots.txt { access_log off; log_not_found off; } # 404 errors handled by our application, for instance Symfony error_page 404 /app.php; # pass the PHP scripts to FastCGI server from upstream phpfcgi location ~ ^/(app|app_dev|backend/app|backend/app_dev|config)\.php(/|$) { fastcgi_split_path_info ^(.+\.php)(/.*)$; # With php5-fpm: fastcgi_pass unix:/var/run/php5-fpm.sock; fastcgi_index index.php; include fastcgi_params; fastcgi_param SCRIPT_FILENAME web/$fastcgi_script_name; fastcgi_param HTTPS off; fastcgi_cache www_mysite_com; fastcgi_cache_valid 200 60m; } # Only for nginx-naxsi : process denied requests #location /RequestDenied { # For example, return an error code #return 418; #} # redirect server error pages to the static page /50x.html # #error_page 500 502 503 504 /50x.html; } 

默认情况下,来自Symfony 2应用程序的响应具有禁用缓存的缓存控制标题:

 Cache-Control: no-cache 

如果你想nginx缓存页面,你将不得不改变这些标题。

您可以在文档中找到有关缓存的一般信息

最简单的解决方案是使用SymfonyFrameworkExtraBundle (如果您使用SF2标准版本,则已经拥有它),并使用控制器上的注释和/或动作指定缓存标头。 你可以找到关于这个方法的更多信息,它是@Cache注释的文档 。