Clientbodyinfileonly - POST request is discarded

yurai nginx-forum at
Fri Oct 7 19:47:47 UTC 2016

Hi Francis,
I added return statement to my config as you suggested. Now config for
backend s2 looks like:

 server {
        listen       8080;
        server_name  s2;

        location / {
            root   /usr/share/nginx/html/foo/bar;
            return 200 "Do something sensible with $http_x_file\n";
            autoindex on;

Unfortunately still it doesn't work as I expect - upload.txt file content is
not saved on server side in /tmp/nginx-client-body.

My understanding is that transfer should be performed in 2 phases (2 POST
requests via 2x curl). First request should deliver file name, and second
should deliver actual file content without ingeration from backend side. I
analyzed HTTP flow in wireshark and it looks fine for me (details below).

1. curl --data-binary upload.txt http://localhost/upload

- s1 listening on 80 recive POST request with body = "upload.txt". S1 buffer
"upload.txt" in /tmp/0000001, generate new POST request with field
X-FILE="/tmp/0000001" and pass this request to backend (s2)
- s2 listening on 8080 recieve POST request with  X-FILE = "/tmp/0000001"
- s2 generate HTTP response 200 with body = "Do something sensible with
/tmp/0000001\n" and pass it to s1
- s1 recieve above response and pass it to client
- client recieve HTTP response 200 with body = "Do something sensible with

2. curl --data-binary '@upload.txt' http://localhost/upload  

If I understand this mechanism correctly now actual upload.txt transfer to
server without backend ingeration should be triggered.
So I should get reponse 200 and upload.txt content should be saved by server
under /tmp/nginx-client-body.
Anyway when I type curl --data-binary '@upload.txt' http://localhost/upload
whole scenario from previous point is performed again.

Posted at Nginx Forum:,270063,270122#msg-270122

More information about the nginx mailing list