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-2025 Igor Salnikov aka SunDoctor