一、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确实是一般的做法
他在正向(如squid)反向(如nginx)代理中都是标准用法,而正向代理中是没有x-real-ip相关的标准的,也就是说,如果用户访问你的 nginx反向代理之前,还经过了一层正向代理,你即使在nginx中配置了x-real-ip,取到的也只是正向代理的IP而不是客户端真实IP. 大部分nginx反向代理配置文章中都没有推荐加上x-real-ip ,而只有x-forwarded-for,因此更通用的做法自然是取x-forwarded-for. 多级代理很少见,只有一级代理的情况下二者是等效的 如果有多级代理,x-forwarded-for效果是大于x-real-ip的,可以记录完整的代理链路
原文始发于微信公众号(运维库):Nginx_rewrite日志开启和X-Forwarded-For 和 X-Real-IP 的区别
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/64270.html