wsgi environ、具体的にはenviron['REMOTE_ADDR']
にあります。
ただし、プロキシが関係する場合は、REMOTE_ADDR
がプロキシのアドレスになり、クライアントのアドレスが(おそらく)HTTP_X_FORWARDED_FOR
に含まれます。ここで
は(
Sævarにすべてのクレジットを)ほとんどの場合、あなたが望む何をすべき機能です:
def get_client_address(environ):
try:
return environ['HTTP_X_FORWARDED_FOR'].split(',')[-1].strip()
except KeyError:
return environ['REMOTE_ADDR']
あなたは簡単にシンプルなWSGIを書き込むことによってWSGIの環境に含まれているかを見ることができますアプリやそれにブラウザを指し、例えば:
from eventlet import wsgi
import eventlet
from pprint import pformat
def show_env(env, start_response):
start_response('200 OK', [('Content-Type', 'text/plain')])
return ['%s\r\n' % pformat(env)]
wsgi.server(eventlet.listen(('', 8090)), show_env)
と組み合わせた2 ...
from eventlet import wsgi
import eventlet
from pprint import pformat
def get_client_address(environ):
try:
return environ['HTTP_X_FORWARDED_FOR'].split(',')[-1].strip()
except KeyError:
return environ['REMOTE_ADDR']
def show_env(env, start_response):
start_response('200 OK', [('Content-Type', 'text/plain')])
return ['%s\r\n\r\nClient Address: %s\r\n' % (pformat(env), get_client_address(env))]
wsgi.server(eventlet.listen(('', 8090)), show_env)
ありがとうございました。実際、あなたの2番目のスニペットで示唆したように実際に次の動きがありました。プロキシ情報を指摘してくれてありがとう、もし私がロードバランサを前に置いていたら、これは確かにいくつかの混乱を引き起こしたでしょう。 WSGI仕様[リンク](http://www.python.org/dev/peps/pep-0333/#environ-variables)を見て、REMOTE_ADDRは必須変数ではないことがわかりました。私の混乱の源! –
私はこのヘッダーに関するいくつかの文書を読んでいました。クライアントIPはX-Forwarded-Forの最初のIPになると思います。したがって、最初のリターンの最後のビットはおそらく '.split( '、')[0] .strip()'でなければなりません。リファレンス:https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/X-Forwarded-For –