我有一个通过 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
您的 php 脚本是否
Content-Type:
正确设置了 HTTP 响应标头?它与您的gzip_types
选项相对应吗?您的客户端是否
Accept-Encoding: gzip
正确设置了 HTTP 请求标头?您的相关文件或处理的文件是否
http
包含gzipserver
压缩指令?当location
php
内部重定向发生在try_files
从 a/
location
到 a 的过程中php
location
,在中指定任何类型的 gzip 压缩都/
location
将是无操作 — 您要么必须全局指定它,要么在最后location
完成请求时指定它(中间位置不会影响最终处理)。
如果没有以上三项,您将无法进行任何 gzip 压缩。
try_files
在您的特定情况下,重定向到另一个似乎location
会给您带来麻烦,因为我看到您必须在 only 中指定 gzip 内容/
location
,这可能是一个 noop。将 gzip 指令移出/
location
。您同样可能希望将其他选项try_files
/
location
也从 中移出。