Nginx url重写WordPress和ModPageSpeed冲突



我正在使用 Plesk with nginx + ModPagespeed + WordPress

要延迟加载图像,应该从这种URL加载一个占位符图像https://example.com/pagespeed_static/1.JiBnMqyl6S.gif 它是动态的,但没有实际的文件夹,所以WordPress尝试将其发送到index.php,因为nginx中设置了这个WordPress规则:

if (!-e $request_filename) { rewrite ^(.+)$ /index.php?q=$1 last; }

哪种是允许它加载图像的正确方法?我应该检查URL是否等于该请求,然后在内部添加WordPress规则吗?

if($url != 'pagespeed_static/1.JiBnMqyl6S.gif') {
   if (!-e $request_filename) { 
       rewrite ^(.+)$ /index.php?q=$1 last;
   }
}

附言。刚刚注意到,WordPress相关规则捕获的.js存在相同的问题,URL https://example.com/pagespeed_static/js_defer.I4cHjq6EEP.js

这里 nginx 指令文件的内容:

# PAGESPEED - - - - - - - - - - 
pagespeed on;
pagespeed FileCachePath /var/ngx_pagespeed_cache;
location ~ ".pagespeed.([a-z].)?[a-z]{2}.[^.]{10}.[^.]+" { add_header "" ""; }
location ~ "^/pagespeed_static/" { }
location ~ "^/ngx_pagespeed_beacon$" { }
pagespeed CriticalImagesBeaconEnabled true;
pagespeed PreserveUrlRelativity on;
pagespeed InPlaceResourceOptimization off;
pagespeed EnableFilters add_head;
pagespeed EnableFilters combine_heads;
pagespeed EnableFilters extend_cache;
pagespeed EnableFilters inline_import_to_link;
pagespeed EnableFilters outline_css;
pagespeed EnableFilters outline_javascript;
pagespeed EnableFilters remove_comments;
pagespeed EnableFilters collapse_whitespace;
pagespeed EnableFilters combine_css;
pagespeed EnableFilters rewrite_css;
pagespeed EnableFilters inline_css;
pagespeed EnableFilters inline_google_fonts_css;
pagespeed EnableFilters fallback_rewrite_css_urls;
pagespeed EnableFilters rewrite_style_attribute;
pagespeed EnableFilters rewrite_style_attributes_with_url;
pagespeed EnableFilters flatten_css_imports;
pagespeed EnableFilters prioritize_critical_css;
pagespeed EnableFilters sprite_images;
pagespeed EnableFilters rewrite_javascript;
pagespeed EnableFilters combine_javascript;
pagespeed EnableFilters inline_javascript;
pagespeed EnableFilters defer_javascript;
pagespeed EnableFilters inline_images;
pagespeed EnableFilters recompress_images;
pagespeed EnableFilters convert_png_to_jpeg;
pagespeed EnableFilters resize_images;
pagespeed EnableFilters convert_to_webp_lossless;
pagespeed EnableFilters insert_image_dimensions;
pagespeed EnableFilters inline_images;
pagespeed EnableFilters jpeg_subsampling;
pagespeed EnableFilters recompress_jpeg;
pagespeed EnableFilters recompress_png;
pagespeed EnableFilters recompress_webp;
pagespeed EnableFilters lazyload_images;
pagespeed LazyloadImagesAfterOnload off;
pagespeed EnableFilters strip_image_color_profile;
pagespeed EnableFilters strip_image_meta_data;
pagespeed EnableFilters resize_images;
pagespeed EnableFilters resize_rendered_image_dimensions;
pagespeed EnableFilters inline_preview_images;
pagespeed EnableFilters resize_mobile_images;
pagespeed DisableFilters elide_attributes;
pagespeed DisableFilters include_js_source_maps;
pagespeed EnableFilters insert_dns_prefetch;
# WORDPRESS - - - - - - - - - - - - -
location ~ /.ht { deny all; }
location ~* wp-config.php { deny all; }
location ~* "^/wp-content/(?!plugins/).*.php" { deny all; }
if (!-e $request_filename) { rewrite ^(.+)$ /index.php?q=$1 last; }

通过使用某些 plesk 支持页面上提出的另一种解决方案来解决。所以而不是使用

if (!-e $request_filename) { rewrite ^(.+)$ /index.php?q=$1 last; }

应该使用

if (!-e $request_filename) { set $test P; }
if ($uri !~ ^/(pagespeed|plesk-stat|webstat|webstat-ssl|ftpstat|anon_ftpstat|awstats-icon)) { set $test "${test}C"; }
if ($test = PC) { rewrite ^/(.*)$ /index.php?$1; }

我从未使用过 plesk,但通常我会用 try_files 替换那些if行,如下所示:

try_files $uri /index.php?q=$uri&$args;

这会将对现有文件的所有请求发送到这些文件,并将所有其他请求与请求的 URL 和可能的其他参数一起作为参数进行index.php,就像在代码中一样。

由于您只显示了配置的一部分,因此我无法判断try_files行是否需要在location块之外还是在块内。

作为一般准则,遵循nginx文档,我尽量避免if(有时,诚然,这是不可能的(。

最新更新