@vlzemtsov

Как проверить есть ли файл на сервере(nginx)?

Есть сервер, на котором nginx принимает запросы.

Иногда приходят запросы http://*server_name*/files/images/1.ipg

ngixn должен проверять есть ли на server01 этот файл, и если его нет - доставать этот же файл из server02

Долго тестировал, но никак не получается настроить именно такое.

Пробовал как-то так:
location ~ /files* {
        proxy_pass http://server01.ru ;
        if (!-f $request_filename) {
            proxy_pass http://server02.ru ;
        }
    }


Так же пробовал try_files, но не нашел как им проверять данные на удаленном сервере.
  • Вопрос задан
  • 362 просмотра
Решения вопроса 1
@RidgeA
проверить не получится, но можно переслать запрос на удаленный сервер, который и проверит
псевдокод:
location ~ /files* {
  error_page 404 http://server2/.....;
  root /var/www/static/images;
}

Единственное. я не уверен, что можно указывать другой домен в error_page, но, если нельзя, то это можно решить локальным урлом с редиректом или rewrite. - судя по документации - можно.

UPD:
Кстати, судя по документации через try_files это то же можно сделать
nginx.org/en/docs/http/ngx_http_core_module.html#t...

In the following example,

location / {
    try_files $uri $uri/ @drupal;
}
the try_files directive is equivalent to

location / {
    error_page 404 = @drupal;
    log_not_found off;
}
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
Комментировать
@miksir
IT
location / {
  proxy_pass http://a.a.a.a;
  proxy_intercept_errors on;
  error_page 404 = @server2;
}

location @server2 {
  proxy_pass http://b.b.b.b;
}
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы