Nginx の X-Accel-Redirect ヘッダーを使用してファイルをダウンロードまたはファイルへのアクセスをシミュレートする

20190412/171534680646.pdfファイルが/srv/upload/rcb/次の場所にあると仮定して、ブラウザを使用してサーバーにアップロードされた PDF ファイルにアクセスします。

ここで、次のように/sfileアクセス アドレスを実装して、実際のアドレス/srv/upload/rcb/で PDF ファイルをシミュレートします。

  • 構成は
    nginx サーバーで次のように構成されます。
set $original_root "/srv/upload/rcb/";   # pdf上传后存放路径
location /sfile {
            internal;    # 重点
            alias $original_root;
        }
  • Internal は Nginx の内部コマンドを指します。つまり、内部リクエストのみが使用でき、外部リクエストは 404 を返します。
  • Pythonコード
@restapi.bp.route('/sfile/<name:[A-Za-z0-9/._]+>', methods=["GET"])
async def sfile(request, name):
    r = json({"status": 0})
    r.headers['Content-Type'] = 'application/pdf'         # 文件类型
    r.headers['X-Accel-Redirect'] = f'/sfile/{name}'    #重定向
    return r
  • 写真/ビデオ/PDF などのファイルにアクセスする場合、headers['Content-Type'] でファイル タイプを指定する必要があります。指定しない場合、デフォルトのタイプは次のとおりです。application/json
  • headers['X-Accel-Redirect'] は内部リクエストをサーバーに送信し、Nginx はリンクを実際のアドレスに転送します。

リクエストアドレス: http://localhost:8080/XXX/sfile/20190412/171534680646.pdf

アクセスできない場合は、合計が適切かどうかを確認してinternalくださいContent-Type

おすすめ

転載: blog.csdn.net/quanqxj/article/details/89317140