실험 1
가장 독창적인 아이디어는 파일을 다운로드한 후 로그 전송의 파일 크기가 원본과 일치하는지 확인하는 것입니다. 파일 크기
다운로드 완료 로그를 비교 가능 다운로드가 완료되지 않은 로그 섹션의 크기로 판단
이 방법은 로그를 기반으로 통계를 만들고, 결과를 얻는 데 시간이 좀 걸리고, 이는 약간 번거롭고 시기적절하지 않습니다.
실험 2: 관련 블로그 찾기 수-100-완료-다운로드nginx-x-accel-redirect-php-rails 영어
주요 작업은 다음과 같습니다. 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는 저작자표시-비영리-동일조건변경허락 라이선스를 채택합니다위 내용은 [nginx]통계파일 다운로드(Flask)에 대한 전체적인 아이디어를 담고 있으며, PHP 튜토리얼에 관심이 있는 친구들에게 도움이 되기를 바랍니다.