我正在使用 Mod_Pagespeed Filters for Nginx,但合并和压缩 javascipt 或 css 不起作用。我检查了所有内容,但找不到原因:
1)错误日志中没有错误
2)Pagespeed 可以工作,因为它能够collapse_whitespace
,remove_comments
等等。
3)缓存文件夹权限似乎没有chown
问题www-data
4)尝试添加Domain
并LoadFromFile
查看是否有区别,但没有:
pagespeed Domain http://example.com;
pagespeed LoadFromFile "http://example.com/assets/"
"/var/www/example/public_html/assets";
5) 我在 nginx 中设置了身份验证锁,如下所示。当我禁用身份验证锁时,最小化似乎有时会起作用。我没有得到稳定的结果来得出这个结论:
location / {
auth_basic "Login";
auth_basic_user_file /etc/nginx/login_pass;
}
所以我的问题是,如果启用了 nginx 身份验证,pagespeed 是否会因最小化和合并 JS 或 CSS 而失败?或者可能是由于其他原因导致失败?我不知道下一步该去哪里,我很迷茫……
这是我的 Pagespeed 过滤器:
# PageSpeed
# Enable ngx_pagespeed
pagespeed on;
pagespeed FileCachePath /usr/share/nginx/pagespeed;
# Ensure requests for pagespeed optimized resources go to the pagespeed handler
# and no extraneous headers get set.
location ~ "\.pagespeed\.([a-z]\.)?[a-z]{2}\.[^.]{10}\.[^.]+" {
add_header "" "";
}
location ~ "^/ngx_pagespeed_static/" { }
location ~ "^/ngx_pagespeed_beacon$" { }
location /ngx_pagespeed_statistics { allow 127.0.0.1; deny all; }
location /ngx_pagespeed_global_statistics { allow 127.0.0.1; deny all; }
location /ngx_pagespeed_message { allow 127.0.0.1; deny all; }
pagespeed EnableFilters collapse_whitespace;
pagespeed EnableFilters remove_comments;
# Defer and minify Javascript
# pagespeed EnableFilters defer_javascript;
pagespeed EnableFilters rewrite_javascript;
pagespeed EnableFilters combine_javascript;
pagespeed EnableFilters canonicalize_javascript_libraries;
# Inline and minimize css
pagespeed EnableFilters rewrite_css;
pagespeed EnableFilters fallback_rewrite_css_urls;
pagespeed EnableFilters combine_css;
更新:看来身份验证锁并不是阻止 Pagespeed 合并和最小化的原因。我在想,如果可能的话,是否有任何包含的 JS 导致 Pagespeed 无法最小化所有文件。大约有 6 个 CSS 和 6 个 JS 文件需要最小化和合并。仍然不确定原因,正在调查。
解决方案:事实证明 Pagespeed 无法找到我的静态资产,因此无法最小化和合并 css。映射静态资产有效。已在下面添加了我的答案。
答案1
找到了!事实证明,pagespeed 无法找到我的 css 和 js 文件,因此它们没有被合并或压缩。这就是为什么只有collapse_whitespace
和remove_comments
能正常工作。我需要映射我的静态资产的位置,然后 pagespeed 才能找到它。所以我将它添加到我的 pagespeed 配置中,之后 pagespeed 就可以正常工作,并开始压缩和合并 css 和 js 文件,没有任何问题:
pagespeed LoadFromFile "http://example.com/"
"/var/www/example/html/";
阅读这个链接对我也有帮助,尽管这个链接是针对 ssl 的,而我的不是:https://www.eriaanna.com/how-to-setup-nginx-pagespeed-with-ssl
更多详细信息请参见此处:https://developers.google.com/speed/pagespeed/module/domains#ModPagespeedLoadFromFile
答案2
可以研究一些设置来防止这些组合发生。第一个问题也是由原始发帖人回答的:
pagespeed LoadFromFile remote_address local_address;
如果使用 CDN(只需确保能localhost
提供资产服务即可):
pagespeed MapOriginDomain http://localhost https://cdn.example.com;
如果使用 WordPress:
pagespeed PermitIdsForCssCombining *-css;
尽管可能是默认的,但要明确:
pagespeed EnableFilters combine_css;
pagespeed EnableFilters combine_javascript;
pagespeed CombineAcrossPaths on;
对于使用 NGINX、WordPress 和 CloudFlare 的设置的工作设置,您可能需要查看此网页:https://www.majlovesreg.one/adding-pagespeed-to-a-running-nginx-instance