Блог gigimon'а

Решение проблемы с русскими буквами в url django+nginx

Недавно переезжал на новый сервер и переносил один старый Django проект (на 1.2 еще) с cherokee+uwsgi на nginx+fscgi (скорость не нужна) Но была у этого проекта одна особенность, у него были местами русские буквы в ссылках. На cherokee все работало замечательно, на nginx сайт тоже запустился без проблем (хвала vierualenv), но при тыкании сайта, все ссылки с русским не работали, падали в 404, что не подходят ни по одному паттерну.

Пошел копать и дебажить, для этого добавил в джанго проект мелкую middleware, которая логировала request.path. Через пару запросов увидел, что на debug сервере и на cherokee, в request.path приходят русские буквы не экранированные ничем и не заквоченые (unquote, незнаю как по русски) (типа /goods/all/салфетки), а с nginx они вида /goods/all/%D0%91%D0%B5%D0%BB%D0%B8%D0%B7%D0%BD%D0%B0.

Для решения проблемы, оказалось надо поменять 1 fastcgi параметр в nginx:

fastcgi_param   REQUEST_URI     $request_uri;

заменить на

fastcgi_param   REQUEST_URI     $uri;

И все стало работать как надо. Потратил на дебаг минут 40 :(

2008 — 2018