方法/场景 | 服务器获取客户端IP的方法 | 说明 | 注意事项 |
直接连接 | request.getRemoteAddr()(Java示例) | 当客户端直接连接到服务器时,可以获取到客户端的实际IP地址。 | 无需代理或负载均衡时有效。 |
透明代理 | HTTP_X_FORWARDED_FOR(PHP示例) | 如果客户端通过透明代理访问,通常第一个IP地址为客户端真实IP。 | 可能包含多个IP地址,第一个为真实客户端IP。 |
非透明代理或多层代理 | XForwardedFor 头部 | 在多层代理的情况下,XForwardedFor 头部由代理服务器添加,记录了客户端和经过的代理服务器IP。 | 真实IP可能是列表的第一个非信任IP,需要配置信任的代理IP。 |
使用Nginx | set_real_ip_from 和real_ip_header | 通过配置Nginx的ngx_http_realip_module 模块,可以设置信任的代理IP,并指定获取真实IP的头部字段。 | 需要在Nginx配置文件中设置正确的模块指令。 |
其他Web服务器 | 配置代理传递头部 | 类似于Nginx,其他Web服务器(如Apache)也可以配置传递特定的HTTP头部,如XRealIP。 | 需要具体的服务器配置。 |
获取服务器端IP | SERVER_ADDR(PHP示例) | 在服务器端,可以通过此方法获取到服务器自身的IP地址。 | 用于记录服务器端IP,而不是客户端IP。 |