Django でローカルホストのみの API を作成したいのですが、サーバー自体 (ローカルホスト) からのみビューへのアクセスを制限する方法を見つけようとしていますか? 私は使用してみました:
- 'HTTP_HOST',
- 'HTTP_X_FORWARDED_FOR',
- 'REMOTE_ADDR',
- 「サーバー_アドレス」
しかし運がない。
他に方法はありますか?
Django でローカルホストのみの API を作成したいのですが、サーバー自体 (ローカルホスト) からのみビューへのアクセスを制限する方法を見つけようとしていますか? 私は使用してみました:
しかし運がない。
他に方法はありますか?
localhost のみにバインドするように Web サーバー (Apache、Nginx など) を構成できます。
これは、すべてのビューへのアクセスを制限したい場合にはうまく機能しますが、リモート ユーザーから一部のビューへのアクセスを許可したい場合は、2 つ目の Django プロジェクトを構成する必要があります。
問題は、単に変数をチェックするよりも少し複雑です。クライアントの IP アドレスを特定するには、
request.META['REMOTE_ADDR'] -- The IP address of the client.
と比較しrequest.get_host()
ます。ただし、サーバーが 0.0.0.0:80 で起動される可能性があることを考慮すると、次のようにする必要があります。
import socket
socket.gethostbyaddr(request.META['REMOTE_ADDR'])
これを比較してみましょう
socket.gethostbyaddr("127.0.0.1")
ただし、これらのヘッダーと値を使用して多くのエッジ ケースを処理する必要があります。
はるかに簡単なアプローチは、アプリの前にリバース プロキシを配置することですX_SOURCE=internet
。次に、インターネットからのトラフィックがプロキシを通過するように設定し、ローカル トラフィック (ローカル ネットワーク内) が Web サーバーに直接送信されるように設定できます。したがって、ローカル ネットワークからのみ特定のビューにアクセスしたい場合は、次のヘッダーを確認してください。
if 'X_SOURCE' in request.META:
# request is coming from internet, and not local network....
else:
# presumably we have a local request...
しかし、繰り返しになりますが、これは「ファイアウォールアプローチ」であり、さらに設定が必要であり、外部からアプリにアクセスできないようにするために、リバースプロキシを経由しません..