Подскажите по хитрой настроечке nginx

AN
На сайте с 05.06.2004
Offline
243
623

Хотелось бы сделать такую штуку: если приходит запрос на статический файл, например хттп://site.ru/kartinka.jpg, то чтобы происходило следующее:

- если такой файл есть, то чтоб он и отдавался nginx-ом стандартным образом;

- если такого файла нет, то чтоб вызывался определенный php-скрипт, которому параметром бы передавалось это имя несуществующего файла.

Как такое можно сделать?

Сейчас nginx настроен стандартным образом: фронтенд к апачу, с отдачей через него статики (по расширениям файлов).

Размещу ваши баннеры на посещаемых сайтах. Места еще есть! Возможен безнал. (/ru/forum/324945) Нужны копирайтеры/рерайтеры - медики. Пишите в личку. (/ru/forum/676932)
Himiko
На сайте с 28.08.2008
Offline
560
#1

Можно сделать просто.

Если файла не существует, то перебрасывать на бэкенд (apache). Т.е. ошибку 404 направлять к нему.

Типа так:

location ~* ^.+\.(jpg|jpeg|gif|png|svg|js|css|mp3|ogg|mpe?g|avi|zip|gz|bz2?|rar)$ {

root /home/.......;

error_page 404 = @fallback;

}

location @fallback {

proxy_pass http://127.0.0.1:8080;

proxy_set_header Host $host;

proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

proxy_set_header X-Real-IP $remote_addr;

}

А уже через там обрабатывать запросы. Можно через .htaccess настроить перенаправление на скрипт с нужным параметром.

Профессиональное администрирование серверов (https://systemintegra.ru). Круглосуточно. Отзывы (/ru/forum/834230) Лицензии (http://clck.ru/Qhf5) ISPManager,VDSManager,Billmanager e.t.c. по низким ценам.
AN
На сайте с 05.06.2004
Offline
243
#2

Himiko, спасибо.

А если еще усложнить задачку: чтоб на обработку Апачу отправлялось только файлы с одним расширением, например .jpg, и только в определенном каталоге (включая вложенные в него)? А все остальное - стандартно nginx-ом, в т.ч. и 404?

Т.е., например хитрая обработка php-скриптом нужна только для .jpg и только для файлов, лежащих в хттп://site.ru/dir1/dir2, и во всех подкаталогах в dir2 (хттп://site.ru/dir1/dir2/kartinka.jpg, хттп://site.ru/dir1/dir2/...../dir10/kartinka.jpg), а хттп://site.ru/dir1/kartinka.jpg, хттп://site.ru/dir1/dir2/kartinka.png и т.п. - стандартная обработка nginx-ом, включая выдачу 404.?

Himiko
На сайте с 28.08.2008
Offline
560
#3
AnNik:
Himiko, спасибо.
А если еще усложнить задачку: чтоб на обработку Апачу отправлялось только файлы с одним расширением, например .jpg, и только в определенном каталоге (включая вложенные в него)? А все остальное - стандартно nginx-ом, в т.ч. и 404?

Т.е., например хитрая обработка php-скриптом нужна только для .jpg и только для файлов, лежащих в хттп://site.ru/dir1/dir2, и во всех подкаталогах в dir2 (хттп://site.ru/dir1/dir2/kartinka.jpg, хттп://site.ru/dir1/dir2/...../dir10/kartinka.jpg), а хттп://site.ru/dir1/kartinka.jpg, хттп://site.ru/dir1/dir2/kartinka.png и т.п. - стандартная обработка nginx-ом, включая выдачу 404.?

Сделайте отдельный location и там свои настройки

т.е.

location /dir/

{

...

}

AN
На сайте с 05.06.2004
Offline
243
#4

А, ну конечно:)

Спасибо!

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий