假设公司网站架构为 client ---->nginx 负载均衡--->varnish 缓存---->nginx( web)----->tomcat 请问如何从 nginx(web)这一层的访问日志日志中获取以下信息:请求发起的客户端 IP 以及经过的 nginx 负载均衡和 varnish 缓存的服务器 IP,看以下架构图:
在nginx-web服务器安装nginx的时候需要把 --with-http_realip_module 该模块编译进去,该模块是用来从前端服务器发来的头部信息中,获取到客户端的真实IP地址
nginx负载均衡器上的nginx.conf配置如下(针对本次实验的配置):
upstream varnish {
server 10.10.10.122;
}
server {
listen 80;
server_name localhost;
location / {
proxy_set_header X-Real-IP $remote_addr;
proxy_pass http://varnish;
}
}
varnish-缓存服务器上 test.vcl的配置如下:
backend web1 {
.host = "10.10.10.123";
.port = "80";
}
sub vcl_recv {
set req.http.X-Forwarded-For = req.http.X-Forwarded-For + server.ip;
}
sub vcl_fetch {
if(req.request == "GET" && req.url ~ "/"){
set beresp.ttl = 5s;
}
}
sub vcl_deliver {
if (obj.hits >0){
set resp.http.X-cache = "HIT";
} else {
set resp.http.X-cache = "MISS";
}
return(deliver);
}
nginx-web上nginx.conf的配置如下:
日志格式 nginx自带的日志格式,并未修改
http {
include mime.types;
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
...
server {
listen 80;
server_name localhost;
location / {
root html;
index index.html index.htm;
set_real_ip_from 10.10.10.122;
real_ip_header X-Real-IP;
}
增加这2行配置
set_real_ip_from 10.10.10.122; 告诉nginx从那边获取RealIP的值
real_ip_header X-Real-IP; 存储RealIP值的变量名称
从用户端 10.10.10.46 访问 http://10.10.10.120
然后在nginx-web上看日志输出
可以看到第一段就是 客户端的IP地址,而并不是varnish服务器的地址,而最后一段里面,就包含 varnish服务器的地址 10.10.10.122 和 nginx服务器的地址10.10.10.120
- 大小: 39.1 KB
- 大小: 29 KB
- 大小: 13.2 KB
分享到:
相关推荐
获取客户端真实IP(支持代理服务器)
Java获取客户端真实的IP的两种实现方法,即使通过多级代理也能获取到,很有用
通过安装客户端控件在web页面上获取客户端mac地址的demo,可以自动过滤虚拟机的mac地址。
nginx配置文件-安装客户端ip进行转发 具体可查看zip包中的nginx.conf及default.vhosts.conf
但是在通过了Apache,Squid等反向代理软件不能获取到客户端的真实IP地址了。 原因:由于在客户端和服务之间增加了中间代理,因此服务器无法直接拿到客户端的IP,服务器端应用也无法直接通过转发请求的地址返回给...
java socket nginx tcp转发 用户真实IP测试,文章请看我的博客
使用slb后nginx、apache获取真实ip.docx
主要介绍了Java中使用HttpRequest获取用户真实IP地址,使用本文方法可以避免Apache、Squid、nginx等反向代理软件导致的非真实IP地址,需要的朋友可以参考下
问题 ... #上一层代理IP地址 real_ip_header X-Forwarded-For; real_ip_recursive on; 添加之后启动nginx报错: nginx: [emerg] unknown directive set_real_ip_from in /home/lnidmp/nginx/conf/
Nginx 日志显示真实IP查看 nginx 安装模块获得真实IP需要安装 --with-http_realip_module添加 waf 源IP地址范围配置在
$_SERVER[‘HTTP_X_REAL_IP’]:nginx 代理模式下,获取客户端真实IP /** * 获取客户端IP地址 */ function real_ip() { $ip = $_SERVER['REMOTE_ADDR']; if (isset($_SERVER['HTTP_X_FORWARDE
Nginx反向代理之后,Tomcat应用通过request.getHeader(host)取到的是Nginx的host,并非客户端浏览器地址栏上的真实域名。 例如在某一台服务器上,Tomcat的端口号为8080,Nginx的端口号为80,Nginx反向代理8080端口。...
因为架构的需要采用多级 Nginx 反向代理,但是后端的程序获取到的客户端 IP 都是前端 Nginx 的 IP,问题的根源在于后端的 Nginx 在 HTTP Header 中取客户端 IP 时没有取对正确的值。 同样适用于前端是 Squid 或者...
如何取得 nginx 做反向代理时的真实 IP
nginx+lua+redis通过匹配客户端ip进行灰度发布
nginx源码,非常好的学习材料 有助于详细学习nginx设计原理 设计模式 值得研习
前文Nginx 解决WebApi跨域二次请求以及Vue单页面问题 当中虽然解决了跨域问题带来的二次请求,但也产生了一个新的问题,就是如果需要获取用户IP的时候,获取的IP地址总是本机地址。 二、原因 由于Nginx反向代理后,...
默认情况下,Nginx一个IP地址仅支持一个SSL证书,需要多个IP地址才能配置多个SSL证书,在公网IP地址有限的情况下,可以使用TLS Server Name Indication extension(SNI, RFC 6066),它允许浏览器在SSL握手的时候发送...
演示如何获得本机IP地址,如何生成透明窗口,如何从任务条上隐藏