nginx gzip 无法在 php js 和 css 处理器上运行

nginx gzip 无法在 php js 和 css 处理器上运行

我有一个通过 php 处理 css 和 js 的资产管理器。我正在使用 nginx 和 php5-fpm 来加载我的应用程序。但返回的 css 和 js 文件未被 gzip 压缩。

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

这是我的虚拟主机配置:

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

答案1

我刚刚遇到了同样的问题并最终解决了它。

问题在于 style.css.php 文件顶部有以下内容:

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

这阻止了 nginx 对文件进行 gzip 压缩。显然,“gzip_type text/css”不会因为“charset”部分而选择它。

我已经从 header() 参数中删除了“;charset:UTF-8”,并且 nginx 开始对输出进行 gzip 压缩。

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

后来我又补充道

charset  UTF-8;

在该 CSS 处理器的 nginx 位置块中,因此我得到了正确的标头并且 gzip 正在运行。

希望这也能帮助其他人。

答案2

  1. 您的 php 脚本是否Content-Type:正确设置了 HTTP 响应标头?它与您的gzip_types选项相对应吗?

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

  3. 您的相关文件或处理的文件是否http包含gzipserver压缩指令?当locationphp内部重定向发生在try_files从 a/ location到 a 的过程中php location,在中指定任何类型的 gzip 压缩都/ location将是无操作 — 您要么必须全局指定它,要么在最后location完成请求时指定它(中间位置不会影响最终处理)。

如果没有以上三项,您将无法进行任何 gzip 压缩。

try_files在您的特定情况下,重定向到另一个似乎location会给您带来麻烦,因为我看到您必须在 only 中指定 gzip 内容/ location,这可能是一个 noop。将 gzip 指令移出/ location。您同样可能希望将其他选项try_files / location也从 中移出。

相关内容