Петля при обращении к странице. 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