Nginx Proxy_pass try_files перетащить в обработчик местоположения

Я сталкиваюсь с небольшой проблемой с try_files в сочетании с proxy_pass (или псевдоним в этом отношении).

Текущая конфигурация:

location /staticsrv {
    alias /var/www/static/trunk/;
    #proxy_pass http://static.localtest.nl/;
}
location ~ ^/staticsrv/images/gallery/(.*)$ {
    try_files $uri @img_proxy;
}
location @img_proxy {
    rewrite ^(.*)$ /index.php/?c=media&m=index&imag=$uri;
}

Однако для каждого файла он сбрасывается в правило перезаписи, так как он не существует. Есть ли "хитрость" (прочитайте правильный конфиг), чтобы исправить мою неудачу? Или это просто невозможно? Оба домена будут в конечном итоге находиться на одном сервере, поэтому мы можем работать с псевдонимом и proxy_pass.

заранее спасибо

1 ответ

Ваш location ~ ^/staticsrv/images/gallery/(.*)$ нужен root или alias построить локальный путь для try_files пытаться. Кроме того, вам не обязательно нужно регулярное выражение здесь:

location /staticsrv/images/gallery/ {
    alias /var/www/static/trunk/images/gallery/;
    try_files $uri @img_proxy;
}
location @img_proxy {
    rewrite ^ /index.php/?c=media&m=index&imag=$uri last;
}

proxy_pass не будет работать с try_files как один имеет дело с удаленным контентом, а другой - с локальным контентом.

Я стараюсь избегать использования alias а также try_files в том же блоке локации из-за этой открытой ошибки.

Возможный обходной путь - использовать другой промежуточный URI, который близко соответствует корню документа:

location /staticsrv/images/gallery/ {
    rewrite ^/staticsrv(.+)$ /trunk$1 last;
}
location /trunk {
    internal;
    root /var/www/static;
    try_files $uri @img_proxy;
}
location @img_proxy {
    rewrite ^ /index.php/?c=media&m=index&imag=$uri last;
}
Другие вопросы по тегам