Nginx代理配置中的DNS缓存问题
一、问题背景客户内网环境不允许应用服务器直接访问外网,必须通过跳板机访问外网,所在使用Nginx代理访问外网,部署架构图可参考Nginx反向代理HTTP header自定义参数丢失问题。在部署完成后,测试代理接口都正常,但是一段时间过后,就出现了外网接口访问超时的问题。 二、问题排查Nginx代理的外网接口都是通过域名进行访问,发现请求超时后,直接在服务器上ping请求地址中的域名,发现域名是可以ping通的,后面继续观察请求超时的情况,发现每次出现请求超时时,在服务器都是能直接ping通请求中的域名,但是服务器每次ping命令解析后的IP与上一次不同,在服务器则无法ping通上次解析后的IP,所以怀疑是不是Nginx缓存了DNS解析。通过查阅文档,发现Nginx在启动时会检查域名是否能够解析,在第一次请求时会缓存DNS解析记录,并且忽略了DNS中的TTL值永久缓存。 注意:在使用Nginx进行反向代理时,如果配置的是域名,突然出现了404问题时,可以查看域名绑定的IP是否发生了变更,如果这种变更不频繁,可以重启Nginx解决,重启Nginx后域名会重新进行解析。 三、问题分...
Nginx反向代理HTTP header自定义参数丢失问题
一、问题背景客户内网服务器不能直接访问外网,需要通过一台跳板机才能访问外网,在跳板机安装Nginx反向代理外网接口服务,架构图如下:代理设置完成后,在联调过程中请求外网接口返回参数错误,但是外网环境下不经过Nginx代理直接访问外网接口则能正常访问,说明在经过Nginx代理时,部分参数丢失了。 二、问题排查根据接口报错,定位到是HTTPheader中的一个自定义参数client_id参数经过Nginx代理时没有转发出去,问题出现在Nginx代理上。 Nginx主配置文件nginx.conf内容如下 user root; worker_processes 1; error_log logs/error.log; error_log logs/error.log notice; error_log logs/error.log info; pid logs/nginx.pid; events { worker_connections 1024; } http {...
Nginx反向代理404问题
一、问题背景 在测试web应用的时候,前端需要进行跨域访问后端接口,由于服务端跨域访问功能不完善,所以打算通过反向代理临时解决跨域问题,但是反向代理配置成功后,访问时浏览器端返回404,在nginx的访问日志中也提示404,Nginx配置如下。 1.1 Nginx反向代理配置server { listen 80; server_name h5-verify.mpoom.cn; location / { proxy_set_header Host $http_host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_pass http://127.0.0.1:8000; } } server { listen 8000; ser...
Java 和 HTTP 的那些事(四) HTTPS 和 证书
非原创,转载于:https://www.aneasystone.com/archives/2016/04/java-and-https.html 说起 HTTP 的那些事,则不得不提 HTTPS ,而说起 HTTPS ,则不得不提数字证书。这篇博客将从 Java 的角度,学习 HTTPS 和数字证书技术,并分享爬虫开发的过程中针对爬取 HTTPS 站点时可能遇到的一些问题。在前面的几篇博客里,其实已经略微提到过 HTTPS 了,譬如使用 HttpsURLConnection 类发送 HTTPS 请求,在使用代理时 HTTP 和 HTTPS 的一些差异等等。关于 HTTPS 的概念就不废话了,下面直接进入正题。 一、访问 HTTPS 站点在前面的第一篇博客《模拟 HTTP 请求》里,介绍了两种方法来模拟发送 HTTP 请求,访问 HTTP 站点。一种方式是通过 java.net 自带的 HttpURLConnection,另一种方式是通过 Apache 的 HttpClient,这两种方式各有各的优势。这里也使用这两种方式来访问 HTTPS 站点,从下面的代码可以看到,和前面访...
Nginx离线安装
一、概览 服务器无法访问外网的情况下,Nginx只能离线安装,安装主要步骤如下: 安装gcc、g++ 安装pcre、zlib 安装nginx 二、安装gcc、g++gcc --version g++ --version 使用gcc --version g++ --version查看服务器是否已经安装过gcc、g++。 2.1 下载如果未安装,请下载gcc、**g++**及其依赖包进行安装,下面为Centos7 x86_64下 gcc 与 **g++ ** 4.8.5的依赖包: gcc依赖包详见:gcc-4.8.5-39.el7.x86_64.rpm g++依赖包详见:gcc-c++-4.8.5-39.el7.x86_64.rpm 根据上述依赖包列表下载安装包,下载地址:Centos Mirrors 、 阿里云 、网易,下载后的依赖包如下图所示: 上述安装包已分享至天翼云盘gcc g++ rpm安装包 注意 上图下载的依赖包有一些是gcc g++依赖包列表中不存在的,是因为那部分安装包是gcc g++ 依赖包的依赖包,这里参考网上下载了缺少的一些包 2....
Apache SkyWalking简介及使用
一、SkyWalking 简介Apache SkyWalking 是一个开源的应用性能监控(APM)和可观测性分析平台,专为分布式系统、微服务、云原生和基于容器的架构而设计。 核心特性 分布式追踪:自动采集服务间调用链路,提供端到端的请求追踪 性能指标监控:实时收集应用性能指标(吞吐量、响应时间、错误率等) 服务拓扑分析:自动发现服务依赖关系,生成服务拓扑图 告警机制:支持基于规则的智能告警 多语言支持:Java、.NET Core、PHP、NodeJS、Golang、Python、Lua 等 服务网格支持:与 Istio、Envoy 等服务网格集成 架构组件SkyWalking 主要由以下核心组件构成: Agent(探针):部署在应用程序中,负责数据采集 OAP Server(分析平台):接收、分析、聚合数据 Storage(存储):支持 ElasticSearch、H2、MySQL 等多种存储方案 UI(界面):提供可视化展示和分析能力 二、核心概念1. Trace(调用链)一次完整的分布式请求调用过程,由多个 Span 组成。每个 Trace 有唯一的 TraceI...
MySQL调优案例分享
MySQL调优案例分享——技术分享 您的浏览器不支持显示PDF文件 📥 点击这里下载PDF文件
JPA在不同数据库类下ID生成策略适配方案
JPA在不同数据库类下ID生成策略适配方案——技术解决方案 您的浏览器不支持显示PDF文件 📥 点击这里下载PDF文件
一致性哈希算法
一、什么是一致性哈希一致性哈希算法(Consistent Hashing)是一种特殊的哈希算法,在移除或添加服务器时,能够尽可能小地改变已存在的键值映射关系。主要应用于分布式缓存系统中,解决节点动态增减时的数据重新分配问题。 传统哈希的问题假设有 3 台缓存服务器,使用传统取模方式分配数据: int serverIndex = hash(key) % serverCount; 当服务器数量变化时: 增加节点:serverCount 从 3 变为 4,大部分数据的映射关系都会改变 删除节点:serverCount 从 3 变为 2,同样导致大量数据重新分配 这会导致缓存大面积失效,引发缓存雪崩。 二、一致性哈希原理2.1 哈希环一致性哈希将整个哈希值空间组织成一个虚拟的圆环(Hash Ring),范围为 0 ~ 2^32-1: 服务器节点映射:对每台服务器的 IP 或主机名进行哈希,映射到环上的某个位置 数据映射:对数据的 key 进行哈希,映射到环上的某个位置 查找规则:从数据位置开始顺时针查找,遇到的第一个服务器节点即为存储位置 2.2 节点增减的影响删除节点: 只...
ConcurrentHashMap源码解析
面试常见问题 ConcurrentHashMap实现原理 ConcurrentHashMap如何保证线程安全 本文基于JDK1.8 一、构造方法和基本属性JDK8中ConcurrentHashMap参考了JDK8 HashMap的实现,构造方法和基本属性与HashMap大致相同,可参考HashMap源码解,以下主要列举不同的地方。 /** * Encodings for Node hash fields. See above for explanation. */ static final int MOVED = -1; // hash for forwarding nodes static final int TREEBIN = -2; // hash for roots of trees static final int RESERVED = -3; // hash for transient reservations // Hash节点正常可用位 static final int HASH_BITS = 0x7fffffff; // usable ...









