web-dev-qa-db-ja.com

nginx + gunicornのファイルアップロードとclient_max_body_size + django

両方のサーバーでデフォルトの最大サイズを超えるファイルをアップロードできるように、nginx + gunicornを構成する必要があります。

私のnginx.confファイルは次のようになります:

server {
    # ...

    location / {
        proxy_pass_header Server;
        proxy_set_header Host $http_Host;
        proxy_redirect   off;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Scheme  $scheme;
        proxy_connect_timeout 60;
        proxy_pass http://localhost:8000/;
    }
}

アイデアは、2つの場所で2,000万のリクエストを許可することです。

  • /admin/path/to/upload?param=value
  • /installer/other/path/to/upload?param=value

ここに貼り付けたものと同じレベルでlocationディレクティブを追加しようとしました(404エラーが発生しました)。また、location /ディレクティブ内に追加しようとしました(413 Entity Too Largeエラーが発生しました)。

私のロケーションディレクティブは、最も単純な形式で次のようになります。

location /admin/path/to/upload/ {
    client_max_body_size 20M;
}
location /installer/other/path/to/upload/ {
    client_max_body_size 20M;
}

しかし、それらは機能しません(実際、私は多くの組み合わせをテストしました、そして私はこれについて必死に考えています。

助けてください可能であれば:これを機能させるにはどのような設定を行う必要がありますか?

どうもありがとうございます!

2
carlosescri

これは最終的に次のようなことをして機能しました:

location / {
    proxy_pass_header Server;
    proxy_set_header Host $http_Host;
    proxy_redirect   off;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Scheme  $scheme;
    proxy_set_header X-Forwarded-Protocol ssl;
    proxy_connect_timeout 120;
    proxy_pass http://localhost:8000/;

    location /admin/path/to/upload {
        client_max_body_size 50m;
        proxy_pass http://localhost:8000/admin/path/to/upload;
    }
}
4
carlosescri

ルート以外の場所にclient_max_body_sizeがあると、ほぼ機能していたようです。また、nginxconfでdav_methods PUT;を設定して、PUTおよびDELETEリクエストを有効にしましたか?

0
chrskly