nginx如何让服务器获得真实ip

fiy 其他 148

回复

共3条回复 我来回复
  • 不及物动词的头像
    不及物动词
    这个人很懒,什么都没有留下~
    评论

    要让服务器获得真实IP,可以通过一些配置来实现。下面是使用Nginx获取真实IP的方法:

    1. 确定代理进程支持HTTP连接
      为了客户端真实IP能够传递到后端服务器,需要确保代理进程支持HTTP连接。在Nginx的配置文件中,要添加一行proxy_set_header Connection ""

    2. 开启代理协议(PROXY protocol)
      开启代理协议能够获取更详细的客户端信息。在Nginx的配置文件中,要添加以下几行:

      proxy_protocol on;
      set_real_ip_from <trusted_proxy>;
      real_ip_header proxy_protocol;
      

      <trusted_proxy>是可信的代理服务器IP,一般是前端负载均衡器或者CDN服务器的IP。这样,在前端服务器接收请求时,会在请求头中添加一个PROXY header,包含了客户端的真实IP信息。

    3. 使用 X-Forwarded-For 头部
      X-Forwarded-For 头部能够包含所有途径经过的代理服务器IP,最后一个IP即为客户端真实IP。在Nginx的配置文件中,添加以下配置:

      set_real_ip_from <trusted_proxy>;
      real_ip_header X-Forwarded-For;
      

      <trusted_proxy>是可信的代理服务器IP。

    4. 使用 ngx_http_geoip_module 模块
      ngx_http_geoip_module 模块是Nginx的一个第三方模块,能够根据IP地址判断地理位置信息。可以用来获取客户端真实IP地址。要在Nginx的配置文件中添加以下配置:

      geoip_country GeoIP.dat;
      geoip_city GeoLiteCity.dat;
      

      在配置内的location部分可以使用$geoip_country_code$geoip_city_country_code来获取客户端的国家编码。

    以上是通过Nginx获取真实IP的几种方法。根据具体情况选择其中一种或者多种方法来实现。

    1年前 0条评论
  • fiy的头像
    fiy
    Worktile&PingCode市场小伙伴
    评论

    使用Nginx作为反向代理服务器时,由于对外展示的是Nginx服务器的IP地址,而不是客户端的真实IP地址。为了让服务器获得客户端的真实IP地址,我们可以通过修改Nginx的配置文件以及使用相应的模块来实现。

    以下是几种常见的方法:

    1. 使用proxy_protocol模块:这是Nginx官方提供的一个模块,可以将客户端的真实IP地址附加到请求头中发送给后端服务器。需要在Nginx的配置文件中添加如下配置:
    server {
        listen 80;
        proxy_protocol on;
        location / {
            proxy_pass http://backend;
        }
    }
    

    需要注意的是,后端服务器也需要支持proxy_protocol协议,并且可以解析请求头中的真实IP地址。

    1. 使用HTTP_X_FORWARDED_FOR头部:这是一个常用的HTTP请求头部字段,用于表示客户端的IP地址。在Nginx的配置文件中添加如下配置:
    server {
        listen 80;
        location /  {
            proxy_set_header X-Real-IP      $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_pass http://backend;
        }
    }
    

    这样,Nginx会将客户端的真实IP地址添加到请求头的X-Forwarded-For字段中,然后传递给后端服务器。

    1. 使用第三方模块:除了官方提供的模块外,还有一些第三方模块可以帮助获取真实IP地址,例如ngx_http_realip_module。这个模块可以从HTTP请求头或者代理服务器的IP地址中获取真实IP地址,并设置为变量。需要在Nginx的配置文件中添加如下配置:
    load_module modules/ngx_http_realip_module.so;  # 加载模块
    
    http {
        real_ip_header    X-Forwarded-For;
        set_real_ip_from  proxy_server_ip;
    }
    

    这里real_ip_header指定了请求头中包含真实IP地址的字段,set_real_ip_from指定了代理服务器的IP地址,表示只有这个IP地址的请求才会使用代理服务器的IP地址作为真实IP。

    1. 使用TCP代理:如果Nginx用作TCP代理服务器,可以通过将客户端的真实IP地址附加到请求数据中来实现获取真实IP地址。需要在Nginx的配置文件中添加如下配置:
    stream {
        real_ip_header X-Real-IP;
        real_ip_recursive on;
        
        server {
            listen 80;
            proxy_pass backend;
        }
    }
    

    这样,Nginx会将真实IP地址添加到请求数据的X-Real-IP字段中。

    1. 使用lua脚本:如果以上方法都无法满足需求,可以使用lua脚本来处理请求,根据实际情况获取真实IP地址,并设置为变量。

    通过以上的方法,可以让Nginx服务器获得客户端的真实IP地址,从而更好地处理请求,并做出相应的响应。

    1年前 0条评论
  • worktile的头像
    worktile
    Worktile官方账号
    评论

    标题:使用Nginx配置让服务器获得真实IP地址

    介绍:
    在使用Nginx作为反向代理服务器时,由于客户端请求经过Nginx后再转发到后端服务器,后端服务器会记录Nginx服务器的IP地址而不是客户端的真实IP地址。本文将介绍如何通过修改Nginx配置来让服务器获得真实的客户端IP地址。

    一、查看请求头信息并设置Nginx配置:

    1. 打开终端并输入以下命令查看客户端请求头信息:
    curl -I http://example.com
    
    1. 在结果中查找 X-Real-IPX-Forwarded-For 字段,并记录下来。

    2. 打开 Nginx 的配置文件,通常是 /etc/nginx/nginx.conf/etc/nginx/conf.d/default.conf

    3. 在 Nginx 配置文件中找到 http 部分,添加如下配置项:

    http {
        ...
        real_ip_header X-Real-IP;
        set_real_ip_from 0.0.0.0/0;
        ...
    }
    

    其中,real_ip_header 指定了真实IP地址所在的请求头字段,根据前面查看到的结果填写。

    1. 如果遇到X-Forwarded-For字段,请添加如下配置项:
    http {
        ...
        set_real_ip_from 0.0.0.0/0;
        real_ip_header X-Forwarded-For;
        ...
    }
    
    1. 重新加载 Nginx 配置文件,使修改生效:
    sudo service nginx reload
    

    二、配置后端服务器:
    在 Nginx 配置文件中,配置的真实IP地址将会以 X-Real-IPX-Forwarded-For 字段的形式传递给后端服务器。因此,我们需要在后端服务器上根据实际情况修改相应的配置,以获取真实IP地址。

    具体配置方法取决于所使用的后端服务器软件,以下是一些常见的后端服务器配置示例:

    Nginx:
    在 Nginx 的 location 配置中,可以使用 $http_x_real_ip$http_x_forwarded_for 来获取真实IP地址。

    Apache:
    在 Apache 的配置文件中,可以使用 %{HTTP:X-Real-IP}%{HTTP:X-Forwarded-For} 来获取真实IP地址。

    Node.js(Express 框架):
    在 Express 应用程序中,可以使用 req.headers["x-real-ip"]req.headers["x-forwarded-for"] 来获取真实IP地址。

    PHP:
    在 PHP 中,可以使用 $_SERVER["HTTP_X_REAL_IP"]$_SERVER["HTTP_X_FORWARDED_FOR"] 来获取真实IP地址。

    三、测试是否成功:

    1. 重新启动 Nginx 服务器并访问网站。

    2. 在后端服务器上获取客户端IP地址,并与客户端的真实IP地址进行对比。

    3. 如果两者一致,说明配置成功。

    结论:
    通过修改 Nginx 配置,并在后端服务器上相应地配置,我们可以实现让服务器获得真实的客户端IP地址。这对于某些需要基于IP地址进行访问限制、分析统计等功能的应用程序非常重要。

    1年前 0条评论
注册PingCode 在线客服
站长微信
站长微信
电话联系

400-800-1024

工作日9:30-21:00在线

分享本页
返回顶部