1

I'm using a location config like this in Nginx for serving WEBP when the user supports it

 map $http_accept $webp_suffix { default ""; "~*webp" ".webp"; } server { #... location ~* \.(?:jpg|jpeg|png|webp)$ { root /usr/share/nginx/html; try_files $uri$webp_suffix $uri =404; } #... } 

my problem is that I want to use the same strategy but when I'm using an object-storage (Minio - S3 compatible)

so I'm wondering what is the best way to replace this part:

try_files $uri$webp_suffix $uri =404; 

with something like

try_proxy_pass http://minio$uri$webp_suffix http://minio$uri =404; 
3
  • Why would you proxy_pass to an object storage provider? That will negate most of the benefits of using object storage provider, because all the requests for images have to still go through your server? Also, image_filter is a filter running on your nginx server. It cannot do anything to the images in object storage. Commented Jul 27, 2022 at 14:19
  • 1
    First Because Im hosting my own HA minio object storage cluster secondly currently im testing that and image_filter also works with proxy_pass to minio Commented Jul 28, 2022 at 15:58
  • also, I edited my question to be less confusing Commented Jul 28, 2022 at 17:15

1 Answer 1

0

here is a solution for this that I put together myself.

if you want to read more here is a link to a repo that I made for testing and Proof of concept that this solution is working:https://github.com/erfantkerfan/cdn-nginx-image-optimization

 recursive_error_pages on; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; proxy_set_header Host $http_host; proxy_set_header Range $http_range; proxy_set_header If-Range $http_if_range; proxy_intercept_errors on; proxy_connect_timeout 300; proxy_http_version 1.1; proxy_set_header Connection ""; chunked_transfer_encoding off; proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504 http_404; location ~* \.(?:jpg|jpeg|png|webp)$ { root /usr/share/nginx/html; try_files /dev/null @image_webp; } location @image_webp { proxy_pass http://minio_servers$uri$webp_suffix; image_filter_jpeg_quality 95; image_filter_webp_quality 100; image_filter_interlace on; image_filter_buffer 100M; image_filter resize $width $height; image_filter crop $width $height; image_filter_transparency on; error_page 404 415 = @image; } location @image { proxy_pass http://minio_servers$uri; image_filter_jpeg_quality 95; image_filter_webp_quality 100; image_filter_interlace on; image_filter_buffer 100M; image_filter resize $width $height; image_filter crop $width $height; image_filter_transparency on; } } 

You must log in to answer this question.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.