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

Nginx 配置中·IP地址变量

在Nginx配置中,有时需要使用到IP地址变量,比如在访问日志中记录客户端的IP地址,或者在根据IP地址的不同进行不同的配置处理。Nginx提供了几种方式来获取和使用IP地址变量。

1. 使用$remote_addr变量

$remote_addr是Nginx内置的变量,用来获取客户端的IP地址。这是最直接的方法,适用于大多数情况。

server {listen 80;server_name example.com;location / {# 使用$remote_addr获取客户端IPaccess_log /var/log/nginx/access.log combined;}
}

2. 使用$http_x_forwarded_for变量

如果你的服务器部署在反向代理(如Nginx或HAProxy)后面,客户端的真实IP地址可能会被代理服务器的IP地址所覆盖。在这种情况下,可以使用$http_x_forwarded_for变量来获取原始的客户端IP地址。这个变量通常在HTTP请求头X-Forwarded-For中设置。

server {listen 80;server_name example.com;location / {# 使用$http_x_forwarded_for获取原始客户端IPreal_ip_header X-Forwarded-For;set_real_ip_from 0.0.0.0/0; # 或者指定具体的代理服务器IP段access_log /var/log/nginx/access.log combined;}
}

3. 使用real_ip模块设置原始IP地址

如果你在使用反向代理,并且希望在Nginx中直接设置原始IP地址,可以使用real_ip模块。首先确保你的Nginx编译时包含了real_ip模块。

load_module modules/ngx_http_realip_module.so; # 如果是在编译时未包含此模块的话需要取消注释并确保模块路径正确

然后在配置文件中使用:

http {real_ip_header X-Forwarded-For; # 指定用于传递原始IP的HTTP头set_real_ip_from   0.0.0.0/0;   # 允许所有IP,或者指定代理服务器的IP段server {listen 80;server_name example.com;location / {# 现在可以使用$remote_addr获取原始客户端IPaccess_log /var/log/nginx/access.log combined;}}
}

4. 使用map指令自定义变量

如果你需要根据不同的IP地址应用不同的配置,可以使用map指令来创建自定义的变量。

http {map $remote_addr $custom_ip {192.168.1.1  "internal"; # 内部IP地址的标识符default      "external"; # 其他IP地址的标识符}server {listen 80;server_name example.com;location / {# 根据自定义的$custom_ip变量应用不同的配置或处理逻辑if ($custom_ip = "internal") {# 处理内部请求的逻辑}access_log /var/log/nginx/access.log combined;}}
}

以上方法可以根据你的具体需求选择使用。如果你在使用反向代理,推荐使用real_ip模块或$http_x_forwarded_for变量来获取原始客户端的IP地址。

http://www.xdnf.cn/news/14479.html

相关文章:

  • 深度学习的优化⽅法
  • 李沐--动手学深度学习 LSTM
  • 父亲节:传承孝道,守护亲情
  • MySQL 数据库自动备份批处理工具介绍
  • Vue 项目路由模式全解析:从 hash 到 history 再到 abstract
  • Podman 安装与运行 Nginx 容器完整指南(含访问验证)
  • 北斗导航 | 基于matlab的提升卫星导航单点定位精度的算法总结
  • 2022年以来大模型技术及生态发展汇总文档
  • MongoDB文档查询:从基础到进阶的探索之旅
  • 【Dify系列】【一】【安装与部署】【ubuntu22.04安装docker部署dify1.4.2】
  • 先理解软件工程,再谈AI辅助研发
  • 如何在软件公司推行狼性文化?可能存在哪些困难?
  • VSCODE + EIDE 下 STM32 编程使用部分外设无法通过编译:undefined reference to ‘xxx‘
  • 智芯协同:AI与智能硬件产业深度前瞻
  • 综述|探究深度学习在园艺研究中的应用
  • 基础知识-军品软件六性
  • MCP案例 - 数据可视化客户端
  • Python基础教学:航天工程领域的精确计算和金融领域的精确计算,分别采用的小数保留位数的方法有哪些?有什么区别?-由Deepseek产生
  • 思科基本理论
  • 高标准通信,Ethercat与CANopen网关服务制药工厂生产线实际方案
  • Qt如何生成和使用DLL动态链接库
  • 大语言模型:提示词决定自我反思效果: “检查回答是否错误” “验证回答是否正确”
  • ubuntu 22.04 安装部署logstash 7.10.0详细教程
  • NGINX Plus 管理与上报模块`ngx_mgmt_module`
  • 25年泰康保险养老社招入职统一测评(心理、认知、潜质)北森真题题库、高分攻略
  • leetcode0187. 重复的DNA序列-medium
  • 用Jmeter进行接口测试
  • sql解析,日期 trunc sysdate
  • LangChain智能体之initialize_agent开发实战深度解析
  • 【完整教程】WSL发行版迁移到D盘