Почему proxy_pass в Nginx не обрабатывает sub uris?

Я пытаюсь проксировать дополнительный путь в своем веб-приложении на сервер ресурсов (чтобы избежать проблем с перекрестными доменами).

Я добавил эту конфигурацию в контекст сервера в nginx.conf.

location /assets2/ {
    proxy_pass http://itype-assets/videos/transparent/classroom.png;
}

location /assets/ {
    proxy_pass http://itype-assets/;
}

После добавления этой конфигурации я обнаружил, что:

http://localhost:8080/assets2/ - отображает ожидаемое изображение

http://localhost:8080/assets/videos/transparent/classroom.png - возвращает 404

Что мне здесь не хватает?

Редактировать :

При дальнейшем исследовании я обнаружил, что удаление следующего правила решает проблему:

    location ~ ^.+\..+$ {
        try_files $uri =404;
    }

Однако мне нужно это правило для обслуживания моих статических файлов. Изменение порядка объявления правил не меняет поведения.

Итак, мой вопрос: как я могу использовать правило proxy_pass вместе с правилом try_files?


person Programming Guy    schedule 19.05.2020    source источник


Ответы (1)


Оказывается, nginx всегда разрешает совпадения местоположения регулярных выражений по совпадениям префиксов.

Это поведение можно изменить, изменив объявление моего местоположения на:

location ^~ /assets/ {
    proxy_pass http://itype-assets/;
}
person Programming Guy    schedule 19.05.2020