当前位置: 首页 > article >正文

使用 Nginx 配置真实 IP 地址转发

使用 Nginx 配置真实 IP 地址转发

在许多 web 应用程序中,获取客户端的真实 IP 地址非常重要,尤其是在使用反向代理服务器(如 Nginx)时。本文将指导你如何在 Nginx 中配置 X-Real-IPX-Forwarded-For 头部,以确保你的后端应用能够获取到真实的客户端 IP 地址。

1. 安装 Nginx

如果尚未安装 Nginx,可以使用以下命令进行安装:

# 对于 Ubuntu/Debian 系统
sudo apt update
sudo apt install nginx

# 对于 CentOS/RHEL 系统
sudo yum install epel-release
sudo yum install nginx
2. 配置 Nginx

打开 Nginx 的配置文件,通常路径为 /etc/nginx/nginx.conf/etc/nginx/sites-available/default。使用以下命令打开文件:

sudo nano /etc/nginx/nginx.conf

server 块中添加或修改以下内容:

server {
    listen 80;  # 或者 443,取决于你的需求
    server_name your_domain.com;  # 替换为你的域名或 IP 地址

    location / {
        proxy_pass http://your_backend;  # 替换为你的后端服务地址
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;  # 设置 X-Real-IP
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;  # 设置 X-Forwarded-For
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}
3. 测试配置

在保存配置文件后,确保配置没有错误。使用以下命令进行测试:

sudo nginx -t

如果输出显示没有错误,可以继续进行下一步。

4. 重新加载 Nginx

测试无误后,重新加载 Nginx 配置以使更改生效:

sudo systemctl reload nginx
5. 验证配置

在你的后端应用中,使用以下代码来获取客户端的真实 IP 地址(假设你使用 Go 语言):

func GetIP(r *http.Request) (string, error) {
    ip := r.Header.Get("X-Real-IP")
    if net.ParseIP(ip) != nil {
        return ip, nil
    }

    ip = r.Header.Get("X-Forwarded-For")
    for _, i := range strings.Split(ip, ",") {
        if net.ParseIP(i) != nil {
            return i, nil
        }
    }

    ip, _, err := net.SplitHostPort(r.RemoteAddr)
    if err != nil {
        return "", err
    }

    if net.ParseIP(ip) != nil {
        return ip, nil
    }

    return "", errors.New("no valid ip found")
}

总结

通过上述步骤,你已经成功配置了 Nginx,以便将客户端的真实 IP 地址转发到后端应用。这样一来,后端应用就可以正确识别访问者的真实 IP 地址了。如果在配置过程中遇到任何问题,可以查看 Nginx 的错误日志以获取更多信息:

sudo tail -f /var/log/nginx/error.log

希望这篇教程能帮助你成功配置 Nginx!如有任何疑问,请随时提问。


http://www.kler.cn/a/371691.html

相关文章:

  • ssm016基于 Java Web 的校园驿站管理系统(论文+源码)_kaic
  • HCIP--2 TCP有关笔记
  • AI驱动的低代码未来:加速应用开发的智能解决方案
  • 如何实现PHP的安全最大化
  • 13.音乐管理系统(基于SpringBoot + Vue)
  • 【云原生】云原生后端详解:架构与实践
  • 华为OD机试真题---狼羊过河
  • 【GO实战课(完结)】第九讲:电子商务网站(9):测试、调试和优化
  • 闲一品交易平台:SpringBoot技术的新境界
  • String的长度有限,而我对你的思念却无限延伸
  • “前端兼容——CSS篇”(进阶版)
  • 【LeetCode】两数之和、大数相加
  • 回溯算法习题其三-Java【力扣】【算法学习day.16】
  • Android——metaData
  • EJB项目如何升级SpringCloud
  • 二、ARMv8寄存器之系统寄存器
  • jjycheng字符签名
  • BGP路由优选
  • 【Python爬虫实战】网络爬虫完整指南:网络协议OSI模型
  • 嵌入式学习(6)-Stm32F4xx裸机移植FlashDB(三)
  • 2025考研各省市网上确认时间汇总!
  • Gitlab 官方推荐自动化cache服务器Minio的安装
  • 淘宝API接口( item_get- 淘宝商品详情查询)
  • 数据结构 之 二叉树的遍历------先根遍历(五)
  • 绘制线性可分支持向量机决策边界图 代码解析
  • 使用Docker Compose简化微服务部署