分类 技术 下的文章

记录下负载均衡+tomcat遇到的获取到错误scheme的坑

部署给客户的tomcat下的程序获取到的scheme始终是错误的

负载均衡使用的阿里slb,tomcat部署在阿里云centos7服务器上

浏览器到slb为https,slb到tomcat为http,已在slb上勾选传递 X-Forwarded-Proto,tomcat上也已配置对protocolHeader

程序启动后获取到的scheme始终为http,抓包检查slb到tomcat的数据,也确实传递有 X-Forwarded-Proto: https

后来偶然发现通过slb获取到的scheme错误,而通过ssh做本地端口转发,相同数据包,走本地端口转发时,tomcat上能够获取到正确的scheme。本地端口转发时tomcat获取到的客户端ip为127.0.0.1,slb时tomcat获取到的ip为100.x.x.x。

动态调试tomcat,发现是internalProxies导致的,查询相关文档(https://tomcat.apache.org/tomcat-8.5-doc/api/org/apache/catalina/valves/RemoteIpValve.html)。发现需要配置 internalProxies。

默认情况下internalProxies为10/8, 192.168/16, 169.254/16, 127/8, 172.16/12, and ::1

internalProxies控制可信ip范围, 在该范围中的ip才会使用header中传递的X-Forwarded-Proto等数据

撸了个树莓派上的ocserv的Docker镜像

之前学校教务处选课要内网,其它操作都不需要内网,某大召开后查课表都要内网了,各种不爽,so,撸了个树莓派上的ocserv的Docker镜像

Dockerfile 在 https://github.com/ilanyu/rpi-ocserv

内置了 0.11.9版的 ocserv、udp-broadcast-relay、0.16.0版的 frp(均为写博客时的最新版)

树莓派上具体使用方法如下:

- 阅读剩余部分 -

python中数字与C语言中double结构转换

最近遇到个问题需要将C语言中以double类型存储的数字在python中进行转换.

先看看C语言中double类型数据是如何存储的:
使用程序

int main()
{
    int i = 21;
    double d = (double)i;
    printf("%x\n",&d);
    return 0;
}

获取到21转换成double后在内存中存储的值, 具体为
0x00 0x00 0x00 0x00 0x00 0x00 0x35 0x40



- 阅读剩余部分 -