nginx:如何获取实际的客户端 IP?
Posted
技术标签:
【中文标题】nginx:如何获取实际的客户端 IP?【英文标题】:nginx: how to get the actual client ip? 【发布时间】:2020-08-23 14:06:27 【问题描述】:我有一个简单的快递应用。这是Dockerized
。这是Repository。
我在那里使用nginx
作为反向代理。当我访问http://45.33.97.232:3000
时,它给了我实际的IP。
但是,当我访问http://45.33.97.232/
时,它给了我相同的服务器IP。但我在这里需要实际的Client IP
。
我在nginx
配置文件中使用服务器IP。但是我有一个限制,我不能在nginx
配置文件中写入服务器IP。
这是我的nginx
配置文件,
server
listen 80 default_server;
server_name 45.33.97.232;
location /
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_pass http://45.33.97.232:3000; #port where you are serving your express app.
【问题讨论】:
在 Express 中,请求对象req.ip
上有一个方便的属性,它可以根据@ 987654333@设置。
在 nginx 配置中添加 proxy_set_header X-Forwarded-For $remote_addr;
后,我得到了正确的 IP。但是如何避免在 nginx 配置文件中写入服务器 IP?
server_name
是可选的,仅当您使用单个 Nginx 实例来处理多个虚拟服务器(多个域)并且通常使用服务器的域名配置它时才需要
【参考方案1】:
在 nginx 中,如果你想将远程用户的 IP 地址传递给你的后端 Web 服务器,你必须将 X-Forwarded-For 标头设置为这个远程 ip,如下所示:
proxy_set_header X-Forwarded-For $remote_addr;
如果您不想使用服务器 IP,可以使用 Nginx 配置文件中的域。
【讨论】:
以上是关于nginx:如何获取实际的客户端 IP?的主要内容,如果未能解决你的问题,请参考以下文章