Назад | Перейти на главную страницу

Настройка обратного прокси Nginx для добавления index.html во входящие HTTP-запросы, когда существует только имя пути

Мне нужно настроить nginx в качестве обратного прокси для моего статического сайта, размещенного в пространствах DO (хранилище объектов типа S3).

Проблема с их s3 заключается в том, что если я запрашиваю имя пути без какого-либо конкретного имени файла, он не дает index.html по умолчанию (чего мы ожидали)

если я запрашиваю s3.example.com/some/path/, вместо того, чтобы обслуживать index.html в этой папке, выдается ошибка. DO знает об этой проблеме, но не собирается решать ее в ближайшее время.

Мы застряли, потому что потратили много времени и усилий на переход на DO. Все наши пути находятся в этом формате, потому что мы выполняем переход с какой-то другой установки. мы хотим, чтобы s3.example.com/some/path/ загружал s3.example.com/some/path/index.html - что является нормальным поведением веб-сервера.

Может ли nginx помочь в качестве обратного прокси? В любом случае мы будем использовать обратный прокси перед субдоменом и делать proxy_pass, т.е. example.com/some/path/ будет proxy_pass для s3.example.com/some/path/ - это будет использовать обычный proxy_pass

Я хотел знать, можем ли мы добавить index.html при выполнении proxy_pass - НО только для запросов, у которых нет имени файла. Для тех запросов, с которыми связано какое-то имя файла, например example.com/som/path/image.jpg или какой-либо другой html или другой файл, мы, конечно, не хотели бы добавлять index.html.

Проблема в том, что много раз в URL-адресе нет окончания /, URL-адрес похож на 1 example.com/some/path ИЛИ как 2 example.com/some/path/

А в некоторых других случаях это будет 3 example.com/some/path/ex.html (или jpg или что-то еще)

В первом случае мы хотим добавить index.html Во втором случае /index.html В третьем случае ничего

Как бы конфиг выглядел в этой ситуации?

Заранее спасибо...

Вы можете переписать каждый URI, заканчивающийся на / или не содержит . в последнем элементе пути перед его передачей вышестоящему серверу.

Например:

server {
    ...
    location / {
        ...
        rewrite ^(.*)/$ $1/index.html break;
        rewrite ^(.*/[^./]+)$ $1/index.html break;
        proxy_pass ...;
    }
}

Видеть этот документ для подробностей.