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

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.dtcms.com/a/251930.html

相关文章:

  • leetcode148-排序链表
  • SimpleQtLogger 使用总结
  • Nginx全面深入学习目录
  • 我的JavaWeb软件开发作品学生信息管理系统项目/JavaWeb软件开发 课程考察标准
  • OmniMeetProTrack 全维会议链智能追录系统——山东大学软件学院创新实训项目博客(六)
  • 零基础学前端-传统前端开发(第四期-JS基础-语法,语句)
  • 【SQLAlchemy系列】 SQLAlchemy 中的多条件查询:or*与 in*操作符
  • 【Docker基础】Docker核心概念:命名空间(Namespace)之PID详解
  • java+vue+SpringBoo旅游网(程序+数据库+报告+部署教程+答辩指导)
  • Spring-ai 1.0.0 学习(二)——最小化样例
  • 网络安全相关概念与技术详解
  • C++ 网络编程(12)利用单例逻辑实现逻辑类
  • Arthas 全面学习指南
  • 如何用AI绘画工具创作出属于你的拉布布(泡泡玛特)形象?
  • K-Means算法详细解析:从原理到实践
  • 618背后的电商逻辑重构:从价格血战到价值共生
  • Level1.8for循环
  • 3.TCP回响服务器实现及源码分析上
  • 基于Webserver的数据采集
  • Java中hashCode方法与equal方法何时重写
  • 1、Java基础语法通关:从变量盒子到运算符魔法
  • Qt如何生成和使用DLL动态链接库
  • CountDownLatch、CyclicBarrier与Semaphore 核心技术解析
  • 2. Anaconda 的安装及 Pytorch 环境安装
  • 算子 | 类型 / 性质
  • Java类加载器与双亲委派模型深度解析
  • Python Pillow 库详解文档
  • 第11章 结构 笔记
  • Python实战项目 贪吃蛇 源码分享 毕业设计
  • Cangejie Magic智谱AI文生图API实战详解