Со статикой очень просто.
Используйте конструкцию try_files
примерно это выглядит так:
upstream backend {
server backend1.example.com weight=5;
server backend2.example.com:8080;
server unix:/tmp/backend3;
}
location / {
try_files $uri $uri/ @cluster;
}
location @cluster {
proxy_pass
http://backend; }
Т.е. Клиент приходит на машину и запрашивает файлы. Сервер проверяет, есть ли файлы в указанной директории. Если их нет, он перенаправляет запрос на backend. Таким образом если файла нет на одном сервере, то запрос уйдет на второй и файлы будут отданы. Указанная выше конфигурация - пример. Точный синтаксис не проверялся.