nginx + php-fpm
Maxim Dounin
mdounin at mdounin.ru
Thu Apr 11 11:45:14 UTC 2013
Hello!
On Thu, Apr 11, 2013 at 03:34:52PM +0400, Anton Kiryushkin wrote:
> Максим, спасибо за ответ.
>
> Если вы про определение переменной $script, то даже если от него отказаться
> и использовать штатную переменную $fastcgi_script_name, то от этого то, к
> ему обращается nginx не меняется. Для меня остается вопросом, почему
> игнорируется / в пути, то есть почему nginx обращается к файлу:
> /ff9cf78666f326226e5328cd01e82e53804d7a44.png/.php
> А не к :
> /.php
Я даже и не знаю, что ответить. Так написано регулярное выражение
(точнее, все четыре).
> Что же до ничего не считает, то это абсолютно понятно и к этому вопросов
> нет.
>
>
> 11 апреля 2013 г., 15:17 пользователь Maxim Dounin <mdounin at mdounin.ru>написал:
>
> > Hello!
> >
> > On Thu, Apr 11, 2013 at 02:11:18PM +0400, Anton Kiryushkin wrote:
> >
> > > Всем добрый день
> > >
> > > Возможно это боян и только я не знаю как так получается. Но столкнулся с
> > > интересной вещью.
> > > Есть сайт, туда пользователи могут загружать картинки. И загружают. Но,
> > > если вместо картинки, под видом картинки, они загрузят php-код, то,
> > > казалось бы, и черт с ним. Сервер его не обработает. Но нашли ведь лаз
> > > обращаться к файлу так:
> > > ff9cf78666f326226e5328cd01e82e53804d7a44.png/.php
> > >
> > > В location nginx прописано тоже вроде бы корректно:
> > >
> > > location ~ "^(.+\.php)($|/)" {
> > > set $script $uri;
> > > if ($uri ~ "^(.+\.php)($|/)") {
> > > set $script $1;
> > > }
> > > if ($uri ~ "^(.+\.php)(/.+)") {
> > > set $script $1;
> > > }
> > > fastcgi_index index.php;
> > > fastcgi_split_path_info ^(.+\.php)(.*)$;
> > > fastcgi_param PATH_INFO $fastcgi_path_info;
> > > fastcgi_pass fpm-backend;
> > > include fastcgi_params;
> > > fastcgi_param SCRIPT_NAME $script;
> > > fastcgi_param SCRIPT_FILENAME
> > > $document_root$fastcgi_script_name;
> > > }
> > >
> > > То есть все, что оканчивается на .php. Соблюдается. Но ведь файла нет. Я
> > > имею ввиду ".php". Почему nginx считает файлом
> > > ff9cf78666f326226e5328cd01e82e53804d7a44.png/.php, ведь тут есть обычный
> > > слэш?
> >
> > Потому что nginx вообще ничего не считает, файла вообще может не
> > быть, или он может быть на другой машине. Если вы хотите, чтобы
> > nginx проверял существование файла, то добавьте try_files - и будет
> > проверять.
> >
> > В данном случае, однако, правильное решение - это не городить
> > костыли в nginx'е, а исправить поведение php, чтобы он открывал
> > ровно то, что сказали, а не пытался придумать правильное имя файла
> > сам. AFAIK, выключить cgi.fix_pathinfo - помогает.
> >
> > --
> > Maxim Dounin
> > http://nginx.org/en/donation.html
> >
> > _______________________________________________
> > nginx-ru mailing list
> > nginx-ru at nginx.org
> > http://mailman.nginx.org/mailman/listinfo/nginx-ru
>
>
>
>
> --
> Best regards,
> Anton Kiryushkin
> _______________________________________________
> nginx-ru mailing list
> nginx-ru at nginx.org
> http://mailman.nginx.org/mailman/listinfo/nginx-ru
--
Maxim Dounin
http://nginx.org/en/donation.html
Подробная информация о списке рассылки nginx-ru