nginx gzip在php js和css处理器上不起作用

我有一个资产经理进程的CSS和JS通过PHP。 我使用nginx和php5-fpm来加载我的应用程序。 但返回的CSS和JS文件不gziped。

例如我的url是http://mysite.com/phpcssprocessor/mycssfile.css这个文件通过PHP生成。

这是我的虚拟主机configuration:

 # / location / { # gzip gzip on; gzip_static on; gzip_proxied any; gzip_types application/javascript application/json application/x-javascript application/xml text/css text/javascript text/plain text/x-component text/xml; # disable etag if_modified_since off; add_header 'Last-Modified' ''; # mvc rewrite try_files $uri $uri/ /index.php?$uri&$args; } 

我只是遇到了同样的问题,最终解决了这个问题。

问题是style.css.php文件在顶部:

 header("Content-type: text/css; charset: UTF-8"); 

而这阻止了nginx的gzip文件。 显然,“gzip_type text / css”不会select这个,因为“charset”部分。

我从header()参数中删除了“; charset:UTF-8”,nginx开始gziping输出。

 header("Content-type: text/css"); 

后来我补充说

 charset UTF-8; 

在那个CSS处理器的nginx位置块,所以我得到正确的头,gzip正在工作。

希望这可以帮助别人。

  1. 你的PHP脚本是否正确设置了Content-Type: HTTP响应头? 它对应于你的gzip_types选项吗?

  2. 您的客户端是否正确设置了Accept-Encoding: gzip HTTP请求标头?

  3. 你的相关的httpserverphp的处理location ,包括gzip压缩指令? 当内部redirect通过try_files/ locationphp location ,在/ location指定任何types的gzip压缩将是noop – 您必须全局指定它,或者在完成请求的最后一个location中间位置不影响最终处理)。

如果没有上述三个,你将不会得到任何gzip压缩。

在你的具体情况,似乎try_filesredirect到另一个location导致你的悲伤,因为我看到你必须在/ location指定gzip的东西,这可能是一个noop。 将gzip指令移到/ location外部。 同样,您也可以将其他选项从try_files / location移开。