Неверная обработка/передача POST запроса типа Content-Type: multipart/form-data

trinex nginx-forum на nginx.us
Вт Окт 25 22:45:11 UTC 2011


Здравствуйте.
Nginx работает как проксирующий
веб-сервер, передавая динамические
запросы на apache + php, в общем, обычная и
распространенная схема. Конфиг nginx
выглядит так:


server {
...

location @fallback {
                        root /home/trinex.ru/public_html;
                        
                        proxy_cache off;
                        proxy_pass         http://127.0.0.1:8800;
                        proxy_redirect     off;
                        proxy_set_header   Host             $host;
                        proxy_set_header   X-Real-IP       
$remote_addr;
                        proxy_set_header   X-Forwarded-For 
$proxy_add_x_forwarded_for;
                        proxy_connect_timeout      90;
                        proxy_send_timeout         90;
                        proxy_read_timeout         90;
                        proxy_send_lowat           12000;
                        proxy_buffer_size          4k;
                        proxy_buffers              4 32k;
                        proxy_busy_buffers_size    64k;
                        proxy_temp_file_write_size 64k;
                        proxy_temp_path           
/usr/local/nginx/proxy_temp 1 2;
                        charset utf-8;
        }


        location ~*
\.(jpg|jpeg|gif|png|ico|css|html|zip|tgz|gz|rar|bz2|doc|xls|exe|pdf|ppt|txt|tar|mid|midi|wav|bmp|rtf|js)$
{
                root /home/trinex.ru/public_html;
                error_page 404 = @fallback;
                charset utf-8;
                access_log   off;
                expires      30d;
        }

...
}

Обнаружил такую вот неприятную
проблему (nginx 0.*, 1.*):
есть  форма: http://trinex.ru/data.php
Она отправляется постом и имеет Content-Type:
multipart/form-data, запрос через nginx
проксируется на apache+php, в котором данные
POST просто выводятся на страницу.
Иногда, и что характерно и удивительно
в некоторых браузерах, эти данные
ломаются. Эффект наблюдается в Firefox,
InternetExplorer,  в Chrome такого нет (версии
браузеров последние на данный момент)
Вот так это выглядит:

[14]=>
    string(1) "0"
    [15]=>
    string(115) "0
-----------------------\0-----1524538208863362381055335516
Content-Disposition: form-data; name=\"id[]\"

166"
    [16]=>
    string(1) "0"


Если убрать nginx и выставить наружу apache,
то такой проблемы не наблюдается.
Почему такое происходит, и как можно
поправить  эту неприятную ошибку?
Возможно, проблема не в nginx?

Posted at Nginx Forum: http://forum.nginx.org/read.php?21,217337,217337#msg-217337



Подробная информация о списке рассылки nginx-ru