Nginx代理后服务端使用remote_addr获取真实IP

在Nginx作为代理服务器的配置中,通过`remote_addr`可以获取客户端的真实IP地址。这个变量会将客户端的IP地址添加到请求头中,然后被传递到后端服务器。

以下是使用`remote_addr`获取真实IP的方法:

1. 首先,在Nginx的配置文件中设置`proxy_set_header`指令。这个指令会将`X-Real-IP`和`X-Forwarded-For`添加到请求头中,以传递客户端的真实IP地址给后端服务器。打开Nginx的配置文件,一般是在`/etc/nginx/nginx.conf`或`/etc/nginx/conf.d/default.conf`中。

```

http {

server {

...

location / {

proxy_set_header X-Real-IP $remote_addr;

proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

...

}

...

}

}

```

2. `X-Real-IP`和`X-Forwarded-For`是自定义的请求头字段,可以根据需要修改和使用其他字段来传递真实IP。在这个例子中,`X-Real-IP`字段使用了`$remote_addr`变量,用于获取客户端的真实IP地址。

- `$remote_addr`变量是一个内置变量,它会获取客户端的IP地址。这个变量通常直接获取到的是代理服务器的IP地址,而不是客户端的真实IP地址。但是,在设置了`proxy_set_header`指令之后,它会将客户端的真实IP地址传递给后端服务器。

- `$proxy_add_x_forwarded_for`变量会将`X-Forwarded-For`请求头的值附加到已有的值中。这个请求头的值一般包含了客户端的真实IP地址和经过的代理服务器IP地址。通过将这个变量添加到`proxy_set_header`指令中,可以将上一级代理服务器的IP地址添加到请求头中,以获得更多关于客户端IP的信息。

3. 保存并退出配置文件后,重新加载Nginx配置文件`sudo service nginx reload`。

4. 在后端服务器的代码中,可以通过读取请求头中的`X-Real-IP`或`X-Forwarded-For`字段来获取客户端的真实IP地址。

- 使用Python Flask框架的例子:

```python

from flask import request

@app.route("/endpoint")

def endpoint():

client_ip = request.headers.get("X-Real-IP")

# 或者 client_ip = request.headers.get("X-Forwarded-For")

return f"Client IP: {client_ip}"

```

- `request.headers.get("X-Real-IP")`会获取请求头中的`X-Real-IP`字段的值,也就是客户端的真实IP地址。

- `request.headers.get("X-Forwarded-For")`会获取请求头中的`X-Forwarded-For`字段的值,其中包含了客户端的真实IP地址和代理服务器的IP地址。

这样,Nginx代理后的服务端即可通过`remote_addr`获取到客户端的真实IP地址。

值得注意的是,由于`X-Real-IP`和`X-Forwarded-For`是自定义请求头字段,因此在使用其他HTTP代理或负载均衡器时,可能会使用不同的字段名,在设置上述的请求头字段时需要进行相应的调整。

同时,需要注意安全性问题。由于这些请求头字段可以被客户端伪造,因此在进行IP验证或其他与安全相关的操作时,需要格外小心。可以使用其他方式进行安全性验证,比如通过SSL证书等。 如果你喜欢我们三七知识分享网站的文章, 欢迎您分享或收藏知识分享网站文章 欢迎您到我们的网站逛逛喔!https://www.37seo.cn/

点赞(56) 打赏

评论列表 共有 1 条评论

紫色风铃幻想 9月前 回复TA

相逢是首悠扬的歌,相识是杯醇香的酒,相处是那南飞的雁,相知是根古老的藤,心静时总会默默地祝福您,愿幸福与平安伴随着您甜甜蜜蜜的一生。新年好心情!

立即
投稿
发表
评论
返回
顶部