![](/img/trans.png)
[英]How can I get Google Cloud Logging to show my flask + gunicorn app's logs with the correct alert level?
[英]How can I get the user's IP-Address in my Cloud-Run Flask app?
我有一個通過 Google Cloud Run 運行的 Flask 應用程序,我需要知道用戶的 IP 地址。 我正在使用 gunicorn 作為我的服務器。 我嘗試了以下代碼:
request.remote_addr
request.environ['REMOTE_ADDR']
request.environ.get('HTTP_X_REAL_IP', request.remote_addr)
它正在返回這個 IP 地址: 169.254.8.129
,這不是我的。 這可能是應用程序和用戶之間負載平衡器的 IP 嗎?
有沒有辦法在不使用額外服務的情況下獲得正確的 IP 地址?
您有 Google 提供的標題。 在我的測試中,我得到了這兩個:
X-Forwarded-For: [MyPubliCIp, LoadBalancerIp,MyPubliCIp]
Forwarded: [for="MyPubliCIp";proto=http]
隨心所欲地使用它們。
在 Cloud Run 中,在 Flask 路線內,我已經這樣做了:
ip = request.environ.get("HTTP_X_FORWARDED_FOR", request.remote_addr)
logging.info(f"IP ADDRESS: {ip}")
有了這個,我可以獲得請求者公共 IP 地址。
request.remote_addr 適用於 App Engine 等服務器。
我在 Google App Engine 中運行我的服務,並沒有得到上述任何工作,但這確實有效。
ip = request.headers['X-Appengine-User-Ip']
該答案是對 guillaume blaquiere 提供的已接受答案的補充復制粘貼代碼。 代碼您可以在flask中獲取客戶來源ZA12A3079E14CED46E6E6BA52B8A90B21AZ從X-Forwarded-For
Forwarded Z293C93C99998598598598559855985985985985985959985DDC6FC6FC6FC6FC6FC6FC6FC6FC6FC6FC6FC6FC6FC6FC6FC6FCFC6FCFC6FCFCNFCNFCNFCNFCFCFCFCFCFCFCAFCENFCENFCENFCNFCAFCNFCAFCER
forwarded_header = request.headers.get("X-Forwarded-For")
if forwarded_header:
source_ip = request.headers.getlist("X-Forwarded-For")[0]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.