upstream subexample.com {
и
proxy_pass http://sub.example.com;
Тут непонятно, зачем описывать апстрим и не использовать его. Или это опечатка?
Второе - непонятно назначение конструкции:
if (!-f $request_filename) {
proxy_pass http://sub.example.com;
break;
}
Читаю так - если файл не существует, то сделать proxy_pass на
самого себя и получить бесконечный редирект (это в случае, если там не опечатка и проксится на sub.example.com), либо по http-протоколу обратиться к бэкенду, который висит на сокете и тогда получим фигню, потому что результирующий урл довольно необычного вида
http://unix://....
Сразу возникает вопрос... а если файл найден? Откуда его отдать? Других опций как-то не видно.
Я бы порекомендовал:
- не называйте апстримы также, как реальные серверы - одна ошибка и получим непредсказуемое поведение, которое очень сложно отловить. В идеале, апстримы можно назвать одним словом, чтобы не путать с именем сервера.
- Постарайтесь обойтись без if в конфиге, особенно для проверки существования файла. Есть же try_files.