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?的主要内容,如果未能解决你的问题,请参考以下文章

原创多层nginx反向代理,如何获取客户端的真实IP地址

nginx 在多层代理下获取客户端IP

如何从 nginx + Gunicorn 后面的 X-Forwarded-For 获取第一个客户端 IP? [复制]

nginx如何获取自己的ip

nginx反向代理如何获取真实IP?

获取CDN用户真实IP