Наступил тут. :-)
есть
location / { proxy_pass ... }
location /dir { alias ... }
Так вот, если дёргаю /dir или /dir/file, то всё хорошо и файл
берётся из
указанного альясом места, а вот если дёргаю /dir.php или /dir_foo.php,
то оно почему-то говорит 404 вместо того, чтобы проксировать. Или я
чего-то непонимаю, или это всё же грабли. :-) nginx 0.1.28.
PS Почитал ещё раз мануал насчёт location - вроде так и должно быть и
всё даже правильно, т.к. урл проверяется до максимального
совпадения, но
конструкция вроде
location ~ ^/dir(/.*)?$ { alias ... } даёт 404 на /dir/...
Это легко может быть, так как сочетание регулярного выражения в location
и alias сейчас не поддерживается. И я не знаю, делать ли поддержку,
когда ту же функциональность можно получить с помощью rewrite.
Вижу вариант только описать локейшн вроде ^/dir[^/].+ или что-нибудь
вроде того отдельно на проксирование - скорей всего так оно заработает.
Но как-то криво это и неправильно на мой взгляд. Попроще никак?
location / { proxy_pass ... }
location /dir/ { alias ... }
По моему, так проще.
Это я уже пробовал - ее работает так. 404 на непроксируемый контент.
Что именно пробовал - "location /dir" или "location /dir/" ? Это разные
вещи. /dir.php и /dir_foo.php попадают под /dir, но не попадют под /dir/.
Я понял почему 404 было - когда пишешь /dir/ для альяса, то nginx не
делает редирект при запросе GET /dir на /dir/ и запрос проксируется на
бэкенд. При запросе GET /dir/ всё хорошо. Может добавить редирект, чтобы
дополнительных локейшнов не городить? У меня похожие грабли во многих
местах, как оказалось, расставлены. Но не на все довелось наступить
пока. :-)