nginx正在削减dynamic页面的结束并caching它们

我把我的一个旧站点从Apache移到了一个nginx服务器上。 一切工作正常,但该网站有一些长的内容(一个+ 100K生成的HTML文件)。

我的第一个试验是禁用分块传输编码,但没有帮助。

这里是我的nginxconfiguration:

$ cat /etc/nginx/nginx.conf user www-data; worker_processes 1; error_log /var/log/nginx/error.log; pid /var/run/nginx.pid; events { worker_connections 1024; } http { include /etc/nginx/mime.types; sendfile on; keepalive_timeout 65; tcp_nodelay on; gzip on; gzip_static on; gzip_http_version 1.0; gzip_disable "MSIE [1-6]\."; gzip_vary on; gzip_comp_level 1; gzip_proxied any; gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript application/javascript text/x-js; gzip_buffers 16 8k; include /etc/nginx/conf.d/*.conf; include /etc/nginx/sites-enabled/*; } $ cat /etc/nginx/sites-enabled/example.com server { listen 443 ssl; server_name example.com; access_log /var/log/nginx/example.com.access.log; error_log /var/log/nginx/example.com.error.log; charset iso-8859-2; root /var/www/public/example.com; chunkin off; chunked_transfer_encoding off; location ~ ^.+\.php { fastcgi_split_path_info ^((?U).+\.php)(/?.+)$; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_param SCRIPT_NAME $fastcgi_script_name; fastcgi_param PATH_INFO $fastcgi_path_info; fastcgi_pass 127.0.0.1:9000; include fastcgi_params; } location / { index index.php; try_files $uri /index.php?$args; } ssl_certificate /etc/nginx/ssl/server.crt; ssl_certificate_key /etc/nginx/ssl/server.key; } 

有一些奇怪的事情正在进行。 萤火虫显示我的网页正在被caching ,但我不知道为什么。

更新:

最后,我可以通过使用下面的PHP脚本重现该问题:

 <?php //error_reporting(E_ALL ^ E_NOTICE ^ E_DEPRECATED); //the whole content printed as expected error_reporting(E_ALL & ~E_DEPRECATED); //truncated content header("Content-Type: text/plain; charset=iso-8859-2"); $i = 500000; while ($i) { $i--; printf("%10s", $i); if (!($i%50)) { echo "\n"; } $a = $undefined; } 

如果我从错误报告中排除E_NOTICE ,则此脚本正常运行并终止。

检查这些目录的权限:

  • client_body_temp_path
  • proxy_temp_path
  • fastcgi_temp_path

这些目录中的一个或所有目录可能不可写入nginx。 这些临时文件夹在处理大请求时充当nginx的缓冲区,如果nginx不能写入,那么nginx只是返回存储在内存中的内容。

如果不是再次检查日志级别/日志path,您还应该在错误日志中看到类似于以下的错误。

 2013/10/07 11:01:09 [crit] 3307#0: *33 open() "/var/lib/nginx/tmp/proxy/2/00/0000000002" failed (13: Permission denied) while reading upstream 

可能的连接与这个错误http://www.ruby-forum.com/topic/4080504 ,尝试更新nginx。

不一定只使用html,而是JS和CSS文件,sendfile选项也可能是一个问题。

正如http://www.conroyp.com/2013/04/25/css-javascript-truncated-by-nginx-sendfile/车削报&#x544A;

 sendfile off 

可以意味着你的文件不被截断

sendfileclosures解决scheme不适合我。 我已经通过禁用open_file_cache解决了这个问题。