Nginx Pagespeed 不会合并或压缩 JS 或 CSS

Nginx Pagespeed 不会合并或压缩 JS 或 CSS

我正在使用 Mod_Pagespeed Filters for Nginx,但合并和压缩 javascipt 或 css 不起作用。我检查了所有内容,但找不到原因:

1)错误日志中没有错误

2)Pagespeed 可以工作,因为它能够collapse_whitespaceremove_comments等等。

3)缓存文件夹权限似乎没有chown问题www-data

4)尝试添加DomainLoadFromFile查看是否有区别,但没有:

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_whitespaceremove_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

相关内容