Петля при обращении к странице. Nginx

У меня весь сайт хранится в s3 бакете storage.yandexcloud.net. Все html-страницы я обрабатываю следующей конфигурацией:

server {
    ...
    rewrite ^/(.*)/$ /$1 permanent;

    location = / {
        proxy_http_version     1.1;
        proxy_set_header       Host storage.yandexcloud.net;
        proxy_hide_header      x-amz-request-id;
        proxy_hide_header      Set-Cookie;
        proxy_ignore_headers   Set-Cookie;
        proxy_intercept_errors on;
        proxy_pass             https://storage.yandexcloud.net/my-bucket/index.html;

        proxy_cache            ServerCache;

    }
    location ~ ^([^.]*)$ {
        proxy_http_version     1.1;
        proxy_set_header       Host storage.yandexcloud.net;
        proxy_hide_header      x-amz-request-id;
        proxy_hide_header      Set-Cookie;
        proxy_ignore_headers   Set-Cookie;
        proxy_intercept_errors on;
        proxy_pass https://storage.yandexcloud.net/my-bucket$1.html;

        proxy_cache            ServerCache;

    }
}

То есть, при обращении к https://my-site.ru/page/123 идёт проксирование в бакет + добавляется .html в конце и открывается нужная страница 123.html, которая лежит в s3

Возникла необходимость сделать часть страниц, у которых URI начинается на https:/my-site.ru/sale - вести на новый бакет s3. Я использовал следующую конструкцию, чтобы проверить проксирование:

    location = ^~ /sale {
        proxy_http_version     1.1;
        proxy_set_header       Host storage.yandexcloud.net;
        ...
        proxy_intercept_errors on;
        proxy_pass https://storage.yandexcloud.net/bucket-sale$request_url;
        proxy_cache            ServerCache;
    }

это работает только тогда, когда явно указываешь в адресной строке страницу html(https://my-site.ru/sale/page/321.html), если указать просто https://my-site.ru/sale/page/321 - я получаю 404 Not Found. Отсюда следует, что нужно добавить обработчик таких запросов и добавлять .html, как в основном сайтe, для этого я использую конструкцию:

    location = ~ ^/sale/(.*)$ {
        proxy_http_version     1.1;
        proxy_set_header       Host storage.yandexcloud.net;
        ...
        proxy_intercept_errors on;
        proxy_pass https://storage.yandexcloud.net/bucket-sale$1.html;
        proxy_cache            ServerCache;
    }

и\или похожие интерпретации (location = ~ ^/sale(.*)$ , либо в proxy_pass https://storage.yandexcloud.net/bucket-sale/$1.html , либо ~ ^/sale([^.]*)$ )

но я получаю ЛИБО петлю - 301 Moved Permanently (sale и sale/), ЛИБО 404 Not Found. Прошу, подскажите, как правильно обработать html-файлы из другого бакета, при обращении именно по https://my-site.ru/sale


Ответы (0 шт):