ms-dred
@ms-dred
Вечно что то не то и что то не так...

Как в nginx обработать GET запрос?

С Nginx очень слабо знаком прошу помощи =(
Есть ссылки вида
img.domain.ru/o/99/image.jpg
img.domain.ru/o/99/image.jpg?width=500&height=500


В конфигурации я пытаюсь сделать так что если переданы GET параметры width и height то обрезать картинку, если их нет то отобразить оригинальное изображение.

server {
        listen       80;
        server_name  img.domain.ru;

        location ~* \.(gif|jpg|png)$ {
	     proxy_pass http://imageserver;
             image_filter crop $arg_width $arg_height;
             error_page 415 = /empty;
        }

        # Error handler
        location = /empty {
            empty_gif;          # Respond with empty image
        }
}

# Backend image server
server {
        listen       8082;
        server_name  localhost;
        root /var/www/img.domain.ru;

        rewrite  ^/(.*)$   /$1  last;
}

# Upstream
upstream imageserver {
    server localhost:8082;
}


При такой конфигурации картинки с GET запросом отображаются, без него нет так как $arg_width и $arg_height не определены. Пытался с if сделать условия но в логах была ошибка ("image_filter" directive is not allowed here in)
Как правильно обработать такие запросы?
  • Вопрос задан
  • 1597 просмотров
Решения вопроса 1
castomi
@castomi
Серверный администратор - tickets.settin.ru
location ~* \.(gif|jpg|png)$ {
 proxy_pass http://imageserver;
 if ($arg_width != "") { return 412; }
 error_page 412 = @img;
 error_page 415 = /empty;
}
location @img { image_filter crop $arg_width $arg_height; }

Возможно не хватает элегантности и ещё может под твою конфу прийдётся чуть подправить, но думаю направление ты поймёшь)
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@BorisKorobkov
Web developer
Сделайте другие URL. Например:
img.domain.ru/o/99/image.jpg
img.domain.ru/o/99/800/600/image.jpg

и два location.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы