Nginx_rewrite日志开启和X-Forwarded-For 和 X-Real-IP 的区别

一、Nginx_rewrite 日志调试

    Nginx服务器很重要的一项功能就是rewrite,但是这部分功能又”部分透明”,我们看不见中间rewrite的过程,只能看到结果。你可能要问,Nginx支持rewrite的调试呢?答案是肯定的,具体设置如下。

1、开启rewrite 日志

#设置nginx.conf配置文件中的错误日志级别为notice(nginx中最低级别的错误)并开启rewrite日志。

error_log       /data/log/nginx/error.log notice;
 
rewrite_log on;

2、配置rewrite

location / {
    rewrite  ^/  http://www.baidu.com;

3、重启nginx

 service nginx reload 或者systemctl restart nginx等命令
 #注:OK,接下来你可以到错误日志目录查看具体的rewrite信息了。

4、做完记得换回去

二、X-Forwarded-For 和 X-Real-IP 的区别

    一般来说,X-Forwarded-For是用于记录代理信息的,每经过一级代理(匿名代理除外),代理服务器都会把这次请求的来源IP追加在X-Forwarded-For中。

例如:来自4.4.4.4的一个请求,header包含这样一行
`X-Forwarded-For: 1.1.1.1, 2.2.2.2, 3.3.3.3`

代表 请求由1.1.1.1发出,经过三层代理,第一层是2.2.2.2,第二层是3.3.3.3,而本次请求的来源IP4.4.4.4是第三层代理 而X-Real-IP,没有相关标准,上面的例子,如果配置了X-Read-IP,可能会有两种情况

1、最后一跳是正向代理,可能会保留真实客户端IP
`X-Real-IP: 1.1.1.1`
2、最后一跳是反向代理,比如Nginx,一般会是与之直接连接的客户端IP
`X-Real-IP: 3.3.3.3`

所以 ,如果只有一层代理,这两个头的值就是一样的

问题:那一般在后端取值(比如nodejs通过nginx代理)是用哪个值呢?我看sf上看一般推荐是用X-Forwarded-For,直接用 X-Real-IP岂不是更方便点?

解答:X-Forwarded-For确实是一般的做法

  1. 他在正向(如squid)反向(如nginx)代理中都是标准用法,而正向代理中是没有x-real-ip相关的标准的,也就是说,如果用户访问你的 nginx反向代理之前,还经过了一层正向代理,你即使在nginx中配置了x-real-ip,取到的也只是正向代理的IP而不是客户端真实IP.
  2. 大部分nginx反向代理配置文章中都没有推荐加上x-real-ip ,而只有x-forwarded-for,因此更通用的做法自然是取x-forwarded-for.
  3. 多级代理很少见,只有一级代理的情况下二者是等效的
  4. 如果有多级代理,x-forwarded-for效果是大于x-real-ip的,可以记录完整的代理链路



原文始发于微信公众号(运维库):Nginx_rewrite日志开启和X-Forwarded-For 和 X-Real-IP 的区别

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/64270.html

(0)
小半的头像小半

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!