簡體   English   中英

python3 aiohttp服務器無法在nginx后面獲得真正的ip

[英]python3 aiohttp server can't get real ip behind nginx

我在帶有https的nginx后面使用aiohttp( http://aiohttp.readthedocs.io/en/stable/ ):

我嘗試在aiohttp中間件中獲取IP:

peername = request.transport.get_extra_info('peername')
host, port, = (peername if peername is not None else ('',''))

我希望使用真正的IP,但是它總是返回127.0.0.1。此問題的原因是什么以及如何解決它?

我的nginx conf:

upstream site_python {
        ip_hash;
        server 127.0.0.1:8080;
        server 127.0.0.1:8081;
        server 127.0.0.1:8082;
        server 127.0.0.1:8083;
    }



server {
    listen      11.111.11.111:80;
    server_name www.example.com example.com;
    rewrite     ^   https://$server_name$request_uri? permanent;
}



server {


    listen      11.111.11.111:443 ssl;

    ssl_certificate     /home/site/ssl/www_site_ru.crt;
    ssl_certificate_key /home/site/ssl/561457962.key;
    ssl_protocols       TLSv1 TLSv1.1 TLSv1.2;
    ssl_ciphers         HIGH:!aNULL:!MD5;


    server_name www.example.com; 
#    rewrite     ^ http://www.example.com$request_uri permanent;



  if ($host != 'www.example.com') {
    rewrite ^/(.*)$ $scheme://www.example.com$request_uri permanent;
  }



    location / {
        proxy_pass http://site_python$request_uri;
        proxy_redirect off;
        proxy_set_header Host www.example.com;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;    

    }

}

我也嘗試找到它,但其中也沒有真正的IP。

print(request.transport._extra)

{'sockname': ('127.0.0.1', 8080), 'socket': <socket.socket fd=32, family=AddressFamily.AF_INET, type=2049, proto=6, laddr=('127.0.0.1', 8080), raddr=('127.0.0.1', 48154)>, 'peername': ('127.0.0.1', 48154)}

我用解決

host = request.headers.get('X-FORWARDED-FOR',None)

我認為peername名稱始終是直接連接機器的IP。 原始客戶端的IP僅可通過HTTP標頭訪問,在本例中,該標頭是通過proxy_set_header X-Real-IP $remote_addr;在Nginx配置中設置的proxy_set_header X-Real-IP $remote_addr;

如果您想獲取原始客戶端IP,請嘗試

host = request.remote

web_request.py

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM