whyour / qinglong

支持 Python3、JavaScript、Shell、Typescript 的定时任务管理平台(Timed task management platform supporting Python3, JavaScript, Shell, Typescript)
https://qinglong.online
Apache License 2.0
15.66k stars 2.91k forks source link

有反向代理的时候,登录日志只显示内网登录,能否识别一下代理后的包头里的真实IP? #2330

Closed aqiu9 closed 4 months ago

aqiu9 commented 5 months ago

Clear and concise description of the problem

有反向代理的时候,登录日志只显示内网登录:

image

Suggested solution

例如:规定一个可识别的头,在代理服务里用户加上该头便可识别正确的登录IP。

image

Alternative

No response

Additional context

No response

Validations

QYG2297248353 commented 4 months ago

这是反向代理上的问题

Nginx请参考

location ^~ / {
    proxy_pass http://127.0.0.1:5700; 
    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 REMOTE-HOST $remote_addr; 
    proxy_set_header Upgrade $http_upgrade; 
    proxy_set_header Connection "upgrade"; 
    proxy_set_header X-Forwarded-Proto $scheme; 
    proxy_http_version 1.1; 
    add_header X-Cache $upstream_cache_status; 
    add_header Cache-Control no-cache; 
}
QYG2297248353 commented 4 months ago

如果你是使用 1Panel直接配置反向代理即可,默认带有此配置

aqiu9 commented 4 months ago

谢谢,经过你的提醒我看了下qinglong的代码,调用的是request-ip的getClientIp,该函数会取头部的真实IP。

奇怪,我图里抓到的包显示包头的X-Real-IP是正确的,但是日志里却是内网IP。。可能哪里出现了问题,我得再找找

aqiu9 commented 4 months ago

加上X-Forwarded-For就好了,不知道为什么只有X-Real-IP时,该库不能正常工作。我在该库的文档里看到是支持检索X-Real-IP的。

虽然还有点小疑惑,但确实解决了,再次感谢!