Subir ficheros de forma directa (RFC 1867) en Nginx con "client_body_in_file_only"
Los formularios HTML permiten subir ficheros al servidor web de forma cómoda para el usuario pero tiene sus limitaciones. Una de las limitaciones es la subida de ficheros de forma automatizada por parte del cliente.
El estándar RFC 1867 permite facilitar la subida directa haciendo que la subida / recepción de ficheros sea directa, se va a mostrar como configurar de forma básica y simple el servidor web Nginx para implementar este tipo de subidas.
Uso recomendado: Ficheros binarios o texto sin caracteres ascii imprimibles de poco tamaño.
Documentación: http://nginx.org/en/docs/http/ngx_http_core_module.html#client_body_in_file_only
Configuración Nginx: /etc/nginx/nginx.conf
location /uploads { limit_except POST { deny all; } client_body_temp_path /tmp/; client_body_in_file_only on; client_body_buffer_size 128K; client_max_body_size 50M; proxy_pass_request_headers on; proxy_set_header X-FILE $request_body_file; proxy_set_body off; proxy_redirect off; proxy_pass http://dominio.com/receptor.php; }
Para la configuración dada, si un cliente envía un fichero al servidor (por ejemplo con Curl) a la URL http://dominio.com/uploads, Nginx actúa como proxy y coloca el archivo automáticamente en el directorio /tmp del servidor. Después, el servidor web cede el control de ese fichero al wackend http://dominio.com/receptor.php, que es el que trabajará con ese fichero una vez subido (hacer comprobaciones, gurdarlo, transformarlo, etc). el script “receptor.php” utiliza la cabecera “X-FILE” enviada por nginx para conocer la ruta y nombre del fichero subido (Ej. /tmp/000001).
Subir ficheros http / https con curl (RFC 1867) de forma directa.
curl --data-binary '@fichero_subir.rar' http://dominio.com/uploads