Skip to content
SHOPAII

nginx image-proxy server conf

nginx · Published · 2 min read

Feel free to change this path of course (and keys_zone value as well, but also change the usage of it below).

proxy_cache_path /var/www/cache/resized levels=1:2 keys_zone=resizedimages:10m max_size=1G;

Gzip was on in another conf file of mine…You may need to uncomment the next line.

gzip on;

gzip_disable msie6; gzip_static on; gzip_comp_level 4; gzip_proxied any;

Again, be careful that you aren’t overwriting some other setting from another config’s http {} section.

gzip_types image/jpeg image/jpg image/png image/gif;

server {

Replace with your sub/domain.

server_name image.yoursite.com; root /var/www/cache/store/img; index index.html;

resolver 8.8.8.8 8.8.4.4;

This requests the original file from itself and then resizes the image.

location ~ ^/resize/(\d+)x(\d+)/(.*) {

Again replace with your sub/domain.

proxy_pass http://image.yoursite.com/$3;

proxy_cache resizedimages; proxy_cache_key “$host$document_uri”; proxy_cache_valid 200 1d; proxy_cache_valid any 1m; proxy_cache_use_stale error timeout invalid_header updating;

image_filter resize $1 $2; image_filter_jpeg_quality 90; image_filter_buffer 20M; image_filter_interlace on; }

Access denied.

location /resize { return 403; }

RESIZED: http://image.yoursite.com/200×200/example.jpg

location ~ /(\d+x\d+/.*) { try_files /$1 @img; }

ORIGINAL: http://image.yoursite.com/example.jpg

location / {

If we don’t find the file locally download it.

error_page 404 = @proxy; }

This saves the resized image locally.

location @img { set $remote_uri $uri; set $protocol “http”; if ($uri ~ “^/https?\:\/(.)”) { set $remote_uri $1; } if ($uri ~ “^/https.“) { set $protocol “https”; } set $full_uri “${protocol}://${remote_uri}”;

proxy_pass $full_uri; proxy_store /var/www/cache/store/img/$full_uri; }

This gets the remote image and saves it locally.

location @proxy {

set $remote_uri $uri; set $protocol “http”; if ($uri ~ “^/https?\:\/(.)”) { set $remote_uri $1; } if ($uri ~ “^/https.“) { set $protocol “https”; } set $full_uri “${protocol}://${remote_uri}”;

i thought with merge_slashes off this would work… =(

if ($uri ~ “^/(.*)”) {

set $full_uri $1;

}

set $full_uri $uri;

proxy_pass $full_uri; proxy_connect_timeout 30s; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_store /var/www/cache/store/img$uri; }

}


Related posts