Nginx динамическое изменение размера изображения с поддержкой подпапок - PullRequest
0 голосов
/ 04 ноября 2019

Я реализовал прокси Nginx для автоматического изменения размера и кэширования изображений, которые сохраняются в определенном месте и которые работают нормально. Моя проблема в том, что если я пытаюсь поместить подпапки в мою структуру, система не распознает их. Я пробовал несколько вариантов, но ничего не работает. Моя текущая конфигурация Nginx такова:

#main server

server {
    listen         xxx.xxx.xxx.xxx:443 ssl http2;
    server_name    cdn.example.com;
    server_name    www.cdn.example.com;

    client_max_body_size 128m;
    disable_symlinks if_not_owner from=$document_root;

    root "/var/www/cdn.example.com/someclient";

    if ($host ~* ^www\.cdn\.example\.com$) {
        rewrite ^(.*)$ https://cdn.example.com$1 permanent;
    }

    location ~ "^/images/(?<width>(180|208|268|308|334|360|400|416|480|536|616|668|800|960|1072|1336|1920))/(?<image>.+)$"{
        proxy_pass http://localhost:9000/images/$width/$image;
        proxy_cache sawitaly;
        proxy_cache_valid 200 720h;

        allow all;

        add_header Allow "GET, HEAD" always;
        if ($request_method !~ ^(GET|HEAD)$){
            return 405;
        }

        expires max;
        add_header Vary "Accept, Accept-Encoding";
        add_header X-Image-Cache $upstream_cache_status;
        add_header Cache-Control "public";
        add_header Strict-Transport-Security "max-age=31536000; preload" always;
    }

    location /images/ {
        proxy_pass http://localhost:9000/;
    }
}

#proxy server

server {
    listen 9000;
    server_name localhost;

    allow 127.0.0.1;
    deny all;

    location ~ "^/images/(?<width>\d+)/(?<image>.+)$" {
        alias /var/www/cdn.example.com/someclient/srcimg/$image;

        image_filter resize $width -;
        image_filter_jpeg_quality 75;
        image_filter_webp_quality 75;
        image_filter_interlace on;
        image_filter_buffer 16m;
    }
}

# Cache settings

proxy_cache_path /tmp/nginx-someclient-cache/ levels=1:2 keys_zone=someclient:64m inactive=240h max_size=1024m;

Я не смог заставить ее работать, если изменил структуру папок и поместил изображения во вложенные папки, например /var/www/cdn.example.com/someclient/srcimg/somefolder1/$image или /var/www/cdn.example.com/someclient/srcimg/somefolder2/$image.

Чтобы предотвратить любой непреднамеренный доступ к ресурсам на машине, все обращения, кроме расположений изображений, блокируются с помощью 403.

Проблема в том, что я не знаю ни номера, ни имени подпапок, онидинамически генерируются. Любая помощь будет принята с благодарностью!

...