nginx.conf # <NATIVE_UPLOAD> location /doupload { auth_request /upload/authenticate; #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_pass http://xxxxxxxxxxxxxx/upload.php; proxy_redirect off; } location = /upload/authenticate { internal; proxy_set_body off; proxy_pass_request_body off; proxy_pass http://xxxxxxxxxxxxxx/auth.php; proxy_set_header Content-Length ""; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; client_max_body_size 0; } # </NATIVE_UPLOAD> upload.php <?php analyze $_SERGER['HTTP_X_FILE']; ?> auth.php <?php if (!isset($_SERVER['PHP_AUTH_USER'])) { header('HTTP/1.0 401 Unauthorized'); } else { // OK! } ?> Для проверки можем кинуть файл с помощью CURL: $ curl --data-binary x1.dat http://xxxxxxxxxxxxxx/doupload Метод хорош тем, что позволяет использовать jQuery и Ajax и минимально нагружает веб-приложение, а плох тем, что не позволяет строить простой progress процесса загрузки.
Linux/Windows Справочник v0.05 © 2007-2024 Igor Salnikov aka SunDoctor