3

静的サイトがあります。

ユーザーを追加/削除するための基本的な管理UIを使用して、ディレクトリをパスワードで保護する最も簡単な方法が必要です。ユーザーが非常に少ないため、パフォーマンスは気になりません。

PHPでもDjangoでもかまいませんが、完全なソフトウェアパッケージが必要です。

  • ログアウトできないため、Apacheの基本認証は適切ではありません。また、ユーザーを追加するためのUIもありません。

  • Django authの背後にあるすべてのものをスローし、Djangoを介してファイルを提供してみました。ただし、Chromeはすべてのtext/cssヘッダーをtext/plainとして扱うため、スタイルシートが表示されません。

  • Apacheを再構成して新しいモジュールを追加できないため、サーバーでmod_xsendfileを使用できません。とにかく、このアプローチはやり過ぎだと思います。

静的サイトの基本管理者による認証を実装するコードパッケージはありますか?

4

1 に答える 1

6

私はnginxを使用しており、これが通常私の解決策です。たぶん、これに似たものがApacheで利用可能です。わからない。

X-Accel-Redirectnginxでは、プロキシはnginxがリダイレクトすると想定される場所を含むヘッダー付きの応答を返すことができます。たとえば、次のnginxconfigを使用します。

server {
   ...
   location / {
       proxy_pass: ...;
   }
   location /media/secure/ {
       internal;
       alias ...;
   }
}

プロキシパスが返される場合:

X-Accel-Redirect: /media/secure/somefile;

次に、nginxはリクエストをプロキシから/media/secure/場所にリダイレクトし、静的ファイルを提供します。

そのため、私は通常、Djangoでユーザーを認証してから、そのヘッダーとその場所をファイルに返し、nginxがサービスを提供します。これは、Djangoが静的ファイルを提供する必要がなく、ユーザーがその安全な場所にアクセスすることはできず(internalディレクティブのため)、すべてのmimeタイプがnginxで構成されている場合、すべてのファイルが適切に提供されるため、便利です。 。

繰り返しますが、これはnginx用であり、Apache用ではありませんが、Apache用に似たようなものがあるかもしれません。

編集

これは、nginxに上記と同じ設定を使用していることを前提とした単純なDjangoコードスニペットです。このビューは、そのパスがGETで指定されている場合、安全なファイルを提供します。

@login_required()
def serve_secure_static(request, file_root=os.path.join(settings.MEDIA_ROOT, 'secure')):
    if not request.method == 'GET':
        return HttpResponseBadRequest('Only GET allowed')

    if not 'file' in request.GET:
        return HttpResponseBadRequest('File query must be provided')

    # make sire loggen user is allowed to see the file
    # maybe check some custom permission

    file_path = request.GET['file']

    # if in DEBUG, make Django serve static file
    # because nginx might not be configured
    if settings.DEBUG:
        abs_file_path = os.path.join(file_root, file_path)
        file_data = open(abs_file_path, 'rb').read()
        return HttpResponse(file_data, mimetype=mimetypes.guess_type(file_path))

    # else make nginx serve static file
    else:
        redirect_url = '/%s' % file_path
        response = HttpResponse()
        response['X-Accel-Redirect'] = redirect_url
        return response

したがって、このビューをurlconfigに追加すると、次のようになります。

url(r'^serve_secure_static/$', 'server_secure_static')

次の方法で安全なファイルをリクエストできます。

http://domain.com/serve_secure_static/?file=path/to/file/here/relative/to/media/secure.css

からファイルを提供します

/media/secure/path/to/file/here/relative/to/media/secure.css
于 2012-09-19T04:04:12.407 に答える