ProgramingTip

nginx 1.5+ 파일 업로드 — 모범 사례

bestdevel 2021. 1. 8. 23:06
반응형

nginx 1.5+ 파일 업로드 — 모범 사례


nginx서버를 통해 파일을 업로드 합니다. 현재 실행 중이며 나는 필요 nginx-1.4.6에 따라 최신 안정 nginx-1.5*으로 이동할 의향이 있습니다.

커뮤니티에서 가장 좋아하는 것은 Valery Kholodkov의 nginx-upload-module이며 여기 에서 사용할 수 있습니다 . 안타깝게도 Valery는 더 이상이 모듈을 유지하지 않습니다 . 자세한 내용은 여기를 참조 하십시오 . 현재 nginx-1.3.9모듈은 모든 부분적 여부를 작동합니다.

컴파일 한 나는 nginx-upload-module로를 nginx-1.4.6과에서 수정 될 것으로 보인다 버그 (클라이언트 CXN은 휴관) 얻고 nginx-1.5.3 변경 집합을 . 그러나 나는 패치를 적용 운이 없었다.

Anatoly의 약간의 날짜가있는 게시물 인 여기 에서는 4 가지 솔루션을 포함하는 여러 솔루션을 제공합니다.

두 번째 및 네 번째 솔루션을 살펴보면서 ( lua종속성 을 선호하지 않지만 그럴 수도 있습니다)이 커뮤니티에 질문하는 것이 적절하다고 생각했습니다 .

파일 업로드에 대한 현재 모범 사례는 nginx-1.5+무엇입니까?

python POST명령 에서 파일을 업로드 하고 curl. PHP내 기술 스택에 없습니다.


php 나 lua가 마음에 들지에서 사용할 수 있습니다.

http://nginx.org/en/docs/http/ngx_http_perl_module.html#methods

$ r-> has_request_body (핸들러)

그러나 기본적으로 nginx는 수신 된 게시 요청을 저장하고 저장하는 도구가 아닙니다.

어쩌면 uWSGI은 ( https://uwsgi-docs.readthedocs.io/en/latest/ ) HTTP 소켓에 갈 수있는 더 방법입니다 https://uwsgi-docs.readthedocs.io/en/latest/HTTP.html 및 기능 앱.


당신의 의심에 대한 좋은 기사가 있습니다. https://coderwall.com/p/swgfvw

nginx-upload-module을 시도했습니다. 좋은 솔루션이지만 새 버전에서는 작동하지 않는 것입니다. Lua에는 도움이되는 몇 가지 모듈도 있습니다. 제 경우에는 비즈니스가 많은 앱에서 구현했습니다.

파일 업로드의 큰 문제는 FILER입니다. 이 botleneck입니다. 제가 만든 많은 부하 테스트는 결론을 보여줍니다.


Nginx는 큰 매개 변수를 사용할 수있는 'POST'방법을 지원합니다. 클라이언트는 php 또는 jsp를 사용하여 메소드를 사용하여 nginx 서버에 대한 요청을 수 있습니다.


나는 "nginx 업로드 모듈"에 대한 Google 검색의 첫 번째 단계 결과가 질문을 접하는 다른 사람에게 도움이 될 수 있습니다.

nginx 1.10.3에서 nginx-upload-module을 사용하고 있습니다. 원래 질문에서 언급했듯이 Valery Kholodkov는 더 이상 모듈을 유지 관리하지 않습니다. 그러나 몇 가지 다른 포크가 다른 사람들은 최신 nginx 버전에서 작동하도록 수정했습니다.

이 pull request는 업로드 모듈로 nginx를 수행하기 위해 가게 것입니다.

https://github.com/vkholodkov/nginx-upload-module/pull/88

업로드 모듈 인 IMO는 nginx 및 php-fpm을 사용하는 경우 여전히 최고의 솔루션입니다. 이 모듈을 사용하면 업로드가 완료 될 때까지 nginx에 의해 완전히 완전히 처리 된 다음 업로드 처리 작업이 PHP로 전달됩니다. 따라서 php-fpm 프로세스는 사용자가 많은 파일을 업로드 할 때 병목 현상을 일으키지 않습니다.


간단한 초안이지만 이것을 시도하십시오 ...

Upload.php
if (isset($_FILES['dlc_file']) && !empty($_FILES['dlc_file'])) {
    if (empty($_FILES['dlc_file']['name']) === true) {
        echo = "Please choose a file to upload";
    } else {
        $allowed = array('zip', 'rar', 'gzip', 'tar', '7z', 'png', 'jpg');

        $file_name = $_FILES['dlc_file']['name'];
        $file_extn = strtolower(end(explode('.', $file_name)));
        $file_temp = $_FILES['dlc_file']['tmp_name'];

        if (in_array($file_extn, $allowed) === true) {
            $file_path = 'dlc/' . substr(md5(time()), 0, 10) . '.' . $file_extn;
            move_uploaded_file($file_temp, $file_path);
            echo = "Successfully uploaded $file_name";
        } else {
            $file_types = implode(', ', $allowed);
            echo "File type is not allowed, Allowed file types $file_types";
        }
    }
}

index.php
<form action="upload.php" method="post" enctype="multipart/form-data>
    <input type="file" name="dlc_file">
    <input type="submit" name="submit" value="Upload">
</form>

참조 URL : https://stackoverflow.com/questions/22461341/nginx-1-5-file-upload-best-practices

반응형