Plugin not working on Nginx
-
I have a wordpress installation on Ubuntu with nginx. I added the rewrite rule you have under the FAQ section to the bottom of my nginx.conf file in the root of the wordpress installation. When I do a test with GD it works but when testing with the URL (on chrome)
wp-content/plugins/webp-express/test/test.jpg?debug&time=1546830186
I’m seeing an image and the doc type is “document”. Is there anything else I may need to setup with nginx? I use W3 Total Cache as well and the rewrite urls in the nginx.conf seem to be working fine with that as the plugin is working as it should.
This is the bottom of my nginx.conf file:
if ($http_accept ~* "webp"){ rewrite ^/(.*).(jpe?g|png)$ /wp-content/plugins/webp-express/wod/webp-on-demand.php?xsource=x$request_filename&wp-content=wp-content break; }The page I need help with: [log in to see the link]
-
WebP on-demand?
The whole point of serving WebP is to reduce the time to load the images.
It takes time to create WebP on-demand (through PHP).
It just doesn’t make sense to use this plugin at all. Sorry for being off-topic. Coming back here (wp.org forums) after a long time and I saw this thread at first.
Coming back to on-topic… I’ve been using ewww plugin for webp for ages. It is a pain to setup, though. Here’s the relevant docs on how to use webp with ewww plugin… https://docs.ewww.io/article/16-ewww-io-and-webp-images . I hope that helps.
@tecshaun:
If you have a configuration file for the site (in/etc/nginx/sites-available), insert the rules there. The rules should not go completely to the bottom, but before the closing “}”. The structure of the configuration is such:server { listen 80; [...] # INSERT RULES HERE }@pothi: Bulk generation is on the roadmap. I however haven’t prioritized it because the on-demand strategy works great. Remember that each image only has to be converted one time. So, it is the first visitor on a page containing unconverted images that pays the price of waiting a bit longer for the images. This is often the editor. The *on-demand* strategy has the benefit that it only converts those images that are actually used. With WordPress you often have a lot of thumbnails generated, which are never used.
If you are on Linux, you can visit all the pages of your website, and thus have (most of) the images converted in one go with this command:
wget -e robots=off -r -np -w 2 http://www.example.comflags:
-e robots=offmakes wget ignore rules in robots.txt
-np(no-parent) makes wget stay within the boundaries (doesn’t go into parent folders)
w 2Waits two seconds between each request, in order not to stress the serverI understand. Thanks for clarifying.
Thanks for explaining where that should go and the quick reply! I applied the rule, restarted nginx and the test runs successfully now from the backend! It might be useful to put that in the Nginx FAQ to avoid any confusion with other users.
When checking the frontend of my site and check the network tab it looks like the images are still loading as type “jpeg” or “png”. Is there anything I need to do with the cdn or w3tc?
Please try clearing cache at both Cloudflare and Cloudfront CDN.
The issue is likely to be in Cloudfront CDN. Cloudflare is known to work correctly in similar situations.
Without CDN, the individual images are being served as WebP. Ref: https://www.dropbox.com/s/hw6b79p71602qhk/Screenshot%202019-01-08%2008.27.09.jpg?dl=0 . Please see the response header “content-type: image/webp” and “x-webp-convert-status: Serving freshly converted image (there were no existing to serve)”.
Cloudflare may be caching images on its own too. So, we need to see MISS header from both Cloudflare and Cloudfront CDN in order to see the WebP image for the first time. From there, both Cloudflare and Cloudfront CDN may be caching the images on their own. I am unsure how both are configured to cache the images. I am sure that CDN would be configured to cache images. In that case, it’d be interesting to know how Cloudfront CDN actually caches WebP equivalent. I think Cloudfront CDN didn’t cache WebP and I came across the same issue when configuring WebP with Cloudfront CDN. And, I think I used the following guidelines…
The Cloudfront CDN from Amazon (not to be confused with Cloudflare) can support WebP images without the Alternative rewriting. To enable Cloudfront to operate with any of the rewriting rules above, you need to make one small change in your Distribution settings. Under the Behavior tab, select the Behavior and click the Edit button. Choose Whitelist from Forward Headers, and then add the “Accept” header to the whitelist.
Source: https://docs.ewww.io/article/16-ewww-io-and-webp-images (under the header “Known working CDNs”, first paragraph).
Basically, this plugin works. We may just need to configure Cloudfront CDN correctly. I may be wrong. Please use multiple tests before making any major changes. It is easy to screw up things with Cloudfront CDN. I am just sharing what I observed and what I know from my experience working with WebP and Cloudfront CDN.
@tecshaun: Which CDN are you on? Not all CDN’s supports the varied response (the same image URL can both result in jpeg or webp – depending whether the browser supports webp or not). If your CDN doesn’t support it, you cannot use the “Standard” operation mode, but you can then use the “Just convert” operation mode, which is exactly for the purpose of avoiding the varied response, in order to make it work on all CDNs. I have something in the FAQ about CDN’s and Cloudflare.
Cloudfront supports varied response, but you have to set it up to forward the Accept header, like Pothi wrote.
KeyCDN does not support varied responses
Thanks Pothi and rosell.dk! I appreciate both of your time and help.
I’m using Cloudfront for my CDN. I’m also using Cloudflare as well. I’ve went ahead and added the Accept header to the whitelist to cloudfront and unfortunately not seeing any changes.
I’ve cleared my cache in Cloudfront / Cloudflare / and w3tc as well as browser cache as well.
Actually, a single image IS served as webp:
Request URL: https://shaunguckian.com/wp-content/themes/sg/images/slash.png Request Method: GET Status Code: 200 Remote Address: 104.31.94.97:443 Referrer Policy: no-referrer-when-downgrade cache-control: public, max-age=14400 cf-cache-status: HIT cf-ray: 495d4eb34c9ab4bc-RIX content-type: image/webp date: Tue, 08 Jan 2019 08:31:22 GMT expect-ct: max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct" expires: Tue, 08 Jan 2019 12:31:22 GMT last-modified: Tue, 08 Jan 2019 03:29:33 GMT server: cloudflare status: 200 vary: Accept, Accept-Encoding x-webp-convert-status: Serving existing converted imageThe difference seems to be that this particular image isn’t on the “images” subdomain
The issue could be related to using Cloudflare and Cloundfront at the same time. Can you provide a little information about the setup?
The following request:
https://images.shaunguckian.com/wp-content/uploads/2018/11/13160438/logobig-2.pngGives these response headers (among others):
content-type: image/png cf-cache-status: HIT x-cache: Miss from cloudfront vary: Accept-EncodingWe would of course have wanted to see
content-type: image/webp.
We would have expected to seevary: AcceptI’m not sure if Cloudfront or Cloudflare gets to process the request first?
Anyway, the problem seems to be
cf-cache-status: HIT. This tells us that Cloudflare has cached the result. But, unless you have a pro plan, Cloudflare cannot be configured to work with varied responses (see the “I’m on Cloudflare” item in the FAQ!). So you should probably setup Cloudflare to bypass cache for images. You do that adding the following page rule: If rule matches:example.com/*.jpg, set: Cache level to: BypassBoth CDNs must forward the Accept header. I assume you did that on Cloudfront, following the instructions given by pothi ? I’m not sure if Cloudfront forwards the Accept header.
If the above doesn’t work, you try switching to Just convert mode. I have just created a new item in the FAQ called “How do I configure my CDN? (Just convert mode)”. Check it out: https://wordpress.org/plugins/webp-express/#faq
The topic ‘Plugin not working on Nginx’ is closed to new replies.