私はいくつかの場所でrequest.environ['REMOTE_ADDR']
を使用するピラミッドアプリケーションを持っています。nginxプロキシの背後にあるピラミッドサーバでクライアントの実際のIPを取得する方法
アプリケーションは、ポート6543でPythonペーストを使用し、ポート80でリッスンしているnginxサーバーは、ペーストサーバーに要求を転送しています。可変request.environ [「REMOTE_ADDR」]は常に今127.0.0.1に等しいピラミッドアプリケーションで
server {
listen 80; ## listen for ipv4
listen [::]:80 default ipv6only=on; ## listen for ipv6
server_name localhost;
access_log /var/log/nginx/localhost.access.log;
location/{
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_pass http://127.0.0.1:6543;
}
:
nginxの構成はピラミッド料理に触発されています。 私はこの問題を解決するためのいくつかの戦略を見ていますが、それを行うための推奨方法があるかどうかはわかりません。
if 'HTTP_X_REAL_IP' in event.request.environ: event.request.environ['REMOTE_ADDR'] = event.request.environ['HTTP_X_REAL_IP']
WSGIミドルウェアを使用します。
は、必要であれば[ 'REMOTE_ADDR']をrequest.environ置き換えNewRequest加入者を追加します。ここでは
は私が検討しているものですピラミッド層を打つ前にrequest.environを変更する。
何か他のもの
? 2つのnginxプロキシがあるとどうなりますか? (最初はLANに対応し、もう1つはインターネットに直接接続されたマシンです)。 nginxの中
Cookbookで提案されているようにPrefixMiddlewareで最初に試しましたが、動作しませんでした。私は挑発的にそれをもう一度試す必要があります。 – ascobol
私は[パイプライン:メイン]セクションを挿入するのを忘れたことが分かりました。すべてうまくいく – ascobol