>백엔드 개발 >PHP 튜토리얼 >[nginx] 통계파일 다운로드 완료 여부(Flask)

[nginx] 통계파일 다운로드 완료 여부(Flask)

WBOY
WBOY원래의
2016-08-08 09:28:191134검색

실험 1

가장 독창적인 아이디어는 파일을 다운로드한 후 로그 전송의 파일 크기가 원본과 일치하는지 확인하는 것입니다. 파일 크기

    다운로드할 파일 크기 테스트

다운로드 완료 로그를 비교 가능 다운로드가 완료되지 않은 로그 섹션의 크기로 판단

이 방법은 로그를 기반으로 통계를 만들고, 결과를 얻는 데 시간이 좀 걸리고, 이는 약간 번거롭고 시기적절하지 않습니다.

실험 2:

관련 블로그 찾기

수-100-완료-다운로드
    post_action 사용(아래에 사용된 방법)

  • Nginx-post-action-to-trigger-successically-download-file 문제 발생 nginx-post-action-proxy-pass-track -downloading -file
  • x-accel-redirect 사용
  • nginx-x-accel-redirect-php-rails 영어

      x 활용 -nginx의 accel-redirect 헤더는 중국어로 다운로드 제어를 구현합니다
    대략적인 프로세스:

주요 작업은 다음과 같습니다. 2 1 nginx 구성을 수정하고 다운로드한 파일 정보를 통계 서비스 또는 URL로 전달합니다

2 통계 서비스는 파일 다운로드 상태를 기록하고 판단합니다


여기서 핵심은 nginx의 post_action 매개변수를 사용하는 것입니다. 다운로드 요청이 완료된 후 다운로드 상태가 다른 통계 서비스로 전송되고 통계 서비스가 이를 결정합니다.

구성은

과 유사하며, 통계 요청을 받기 위한 플라스크를 작성합니다.

<code>location / {
    limit_rate 20k;
    post_action @afterdownload;
}

location @afterdownload {
    proxy_pass http://127.0.0.1:8888/counting?FileName=$uri&ClientIP=$remote_addr&body_bytes_sent=$body_bytes_sent&status=$request_completion;
    internal;
}
</code>

액세스 로그

<code><span>#!/usr/bin/python</span><span>#-*- coding:utf-8 -*-</span><span>############################</span><span>#File Name: counting_file.py</span><span>#Author: orangleliu</span><span>#Mail: orangleliu@gmail.com</span><span>#Created Time: 2015-03-11 16:41:05</span><span>#License: MIT</span><span>############################</span><span>'''
    nginx统计用户下载文件字节

    '''</span><span>from</span> flask <span>import</span> Flask, request
    app = Flask(__name__)

    <span>@app.route("/counting")</span><span><span>def</span><span>counting</span><span>()</span>:</span>
        req = request.args.get(<span>"FileName"</span>)
        clientip = request.args.get(<span>"ClientIP"</span>)
        size = request.args.get(<span>"body_bytes_sent"</span>)
        status = request.args.get(<span>"status"</span>)
        <span>print</span><span>"request  "</span>, req
        <span>print</span><span>"ip  "</span>, clientip
        <span>print</span><span>"size  "</span>, size
        <span>print</span><span>"status  "</span>, status
        <span>return</span><span>"ok"</span><span>if</span> __name__ == <span>"__main__"</span>:
        app.run(port=<span>8888</span>, debug=<span>True</span>)</code>

플라스크에 있는 한 처리 후 사용자의 다운로드 수를 셀 수 있습니다.

위 기사에서도 사용자가 여러 연결을 사용하여 다운로드할 경우 문제가 발생할 수 있다고 했습니다. 통계가 반복되고 결과가 부정확할 수 있으므로 아직 개선의 여지가 많습니다.
<code>lzz@ubuntu:code$ python counting_file.py
 * Running on http://127.0.0.1:8888/
 * Restarting with reloader
request   /index.html
ip   10.0.1.16
size   0
status   OK
127.0.0.1 - - [12/Mar/2015 10:42:59] "GET /counting?FileName=/index.html&ClientIP=10.0.1.16&body_bytes_sent=0&status=OK HTTP/1.0" 200 -
request   /Pillow-2.3.0.zip
ip   10.0.1.16
size   225280
status
127.0.0.1 - - [12/Mar/2015 10:43:14] "GET /counting?FileName=/Pillow-2.3.0.zip&ClientIP=10.0.1.16&body_bytes_sent=225280&status= HTTP/1.0" 200 -
</code>


성명:

이 글은 "orangleliu Notebook" 블로그에서 가져온 것입니다. http://blog.csdn.net/orangleliu/article/details/44219213
재인쇄를 위해 이 소스를 꼭 보관해 주세요. 저자 orangleliu는 저작자표시-비영리-동일조건변경허락 라이선스를 채택합니다



위 내용은 [nginx]통계파일 다운로드(Flask)에 대한 전체적인 아이디어를 담고 있으며, PHP 튜토리얼에 관심이 있는 친구들에게 도움이 되기를 바랍니다.

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.