location = /errors/ {
root "/var/www/common";
internal;
}
error_page 400 /errors/index.php?400;
error_page 403 /errors/index.php?403;
error_page 404 /errors/index.php?404;
error_page 500 /errors/index.php?500;
location / { try_files $uri $uri/ =404; }
location ~ /errors/.+\.php {
root /var/www/common;
fastcgi_pass unix:/var/run/php5-fpm.sock;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
location ~ \.php$ {
try_files $uri =404;
//Остальные параметры fastcgi
}
try_files $uri @sub_example_com;
Та же самая проблема. Если файл найден - отдаем файл. А если не найден? Что отдавать? В данном случае идет перенаправление на именованный локейшн @sub_example_com. А сам локейшн @sub_example_com нигде не описан. Опять же, из-за отсутствия root, ваш try_files не может найти никаких файлов.
В вашем случае либо try_files вообще не нужен (если есть только один локейшн и все запросы уходят на бэкенд), либо надо еще описать location для тех файлов, которые не надо проксировать на бэкенд, если они имеются.
Ну а дальше - настраиваем log_format и смотрим логи... кто, кого и куда редиректит. И пока можете убрать proxy_set_директивы из основного location. Они сейчас больше захламляют конфиг, чем помогают осознать, что и зачем надо. Насчет log_format - где-то в моих ответах я приводил свой формат лога, с которым я работаю и в котором можно посмотреть взаимодействие с бэкендом (это чтобы исключить неправильный конфиг nginx, если вдруг бэкенд отдает редирект).