Clientbodyinfileonly - POST request is discarded

yurai nginx-forum at forum.nginx.org
Tue Oct 4 19:28:18 UTC 2016


Hello Nginx community,

I try to perform big file upload on my Nginx server basing on instructions
from 
https://coderwall.com/p/swgfvw/nginx-direct-file-upload-without-passing-them-through-backend
Unfortunately I get "HTTP/1.1 405 Not Allowed" error code all the time.

1. My minimal configuration:

worker_processes  1;

events {
    worker_connections  1024;
}

http {
    include /etc/nginx/mime.types;
    default_type  application/octet-stream;

    sendfile        on;
    tcp_nopush on;
    tcp_nodelay on;
    types_hash_max_size 2048;
    keepalive_timeout  65;
    client_body_temp_path /tmp/nginx-client-body;

    server {
        listen       80;
        server_name  s1;

        location /upload {

                #auth_basic                 "Restricted Upload";
                #auth_basic_user_file       basic.htpasswd;

                client_body_temp_path /tmp/;
                client_body_in_file_only on;
                client_body_buffer_size 128K;
                client_max_body_size 1000M;

                proxy_pass_request_headers on;
                proxy_set_header X-FILE $request_body_file;
                proxy_set_body off;
                proxy_redirect off;
                proxy_pass http://127.0.0.1:8080/upload.txt;
        }
    }

    server {
        listen       8080;
        server_name  s2;

        location / {
            root   /usr/share/nginx/html/foo/bar;
            autoindex on;
        }
    }
}


2. GET works as expected:

curl -i http://localhost/upload

HTTP/1.1 200 OK
Server: nginx/1.11.4
Date: Tue, 04 Oct 2016 19:05:42 GMT
Content-Type: text/plain
Content-Length: 4
Connection: keep-alive
Last-Modified: Tue, 04 Oct 2016 18:44:59 GMT
ETag: "57f3f8ab-4"
Accept-Ranges: bytes

abc

It's OK - file upload.txt has "abc" content.

3. Unfortunately POST does not work:

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

<html>
<head><title>405 Not Allowed</title></head>
<body bgcolor="white">
<center><h1>405 Not Allowed</h1></center>
<hr><center>nginx/1.11.4</center>
</body>
</html>

I checked file content (actual request body) buffered in /tmp and it
contains expected file name ("upload.txt").
When I comment out auth_basic* directives in above config for both cases
(for GET and POST) I get "401 Authorization Required".
What did I miss?

Posted at Nginx Forum: https://forum.nginx.org/read.php?2,270063,270063#msg-270063



More information about the nginx mailing list