location ~ \.php$ {
fastcgi_pass unix:/var/run/php-fpm/php.socket;
fastcgi_index index.php;
include /etc/nginx/fastcgi_params;
}
Все работает замечательно. Но, недавно заметил интересное поведение:
Если URI заканчивается на .php ( запрашивается php файл, пусть даже несуществующий ), nginx вернет мне 404 ошибку с текстом от fastcgi: No input file specified.
Полез читать документацию про location. Ищутся сначала простые location'ы, потом с регулярными выражениями. Если найден с регуляркой - выполняем. Если нет - найболее подходящий location без регулярки. Понимаем, что URI заканчивается на .php - тогда сразу скрипт передается на исполнение, и имел он ввиду первый location. Ладно. Делаем так, чтобы приоритетней был первый location.
Заменяем location /drupal на location ~ /drupal ( делая из него регулярное выражение ). Однако, с таким положением, хоть и реврайты срабатывают, возвращается текст php. Т.е., после нахождения нужного location'а, и применение rewrite'а, дальше поиск не идет.
Можно подумать, что идет зацикленность. После применение rewrite'а nginx все равно попадает в первый location. Но, в документации сказано, что таких переходов может быть до 10 штук. После этого nginx возвращает 500 ошибку. Так что, незнаю, почему такое поведение.