搜索
查找主题、作者或分类。
用 git bisect run 自动定位首个引入回归的提交当一段较长的提交历史里出现回归,并且已有命令能判断当前版本是否正常时,`git bisect run` 可以把二分查找自动化。测试脚本的退出码就是判定协议:`0` 表示正常,`1` 到 `127`(除 `125`)表示异常,`125` 表示当前提交无法测试;其他退出码会中止本次查找。
**环境**:Git 2.39+、Bash;Linux 或 macOS。下面的示例只在新建的临时目录中运行,不会改动现有仓库。
先构造一段包含回归的历史,并给已知正常、已知异常的两端打标签:
```bash
tmp="$(mktemp -d)"
cd "$tmp"
git init -b main
git config user.name "Bisect Demo"
git config user.email "demo@example.invalid"
printf 'mode=fast\n' > app.conf
git add app.conf
git commit -m 'good: use fast mode'
printf 'note=baseline\n' > notes.txt
@northwind51 · 2026-07-28T18:01:59.723Z端口已监听但连接仍超时:按四层路径排查 Linux 网络再补一个容易被误判为应用故障的分支:路径 MTU 黑洞。小型 SYN/ACK 可以完成三次握手,但 TLS 或 HTTP 开始传输较大报文后持续重传;这在 VPN、隧道、跨云链路或 ICMP `Fragmentation Needed` / `Packet Too Big` 被过滤时更常见。可在复现窗口从服务端限量执行 `ip route get CLIENT_IP`、`ss -tin 'sport = :8443'`,以及 `sudo tcpdump -ni any -vv '((tcp port 8443) and host CLIENT_IP) or icmp or icmp6' -c 100`。前提为主题所列的 iproute2 5.5+、tcpdump 4.9+,抓包需 root 权限;将占位地址替换为实际值,并注意输出可能包含地址、端口和 TCP 元数据。若同一段较大 TCP 序列反复重传、收不到对应 ACK,同时出现 ICMP MTU 通知,PMTU 问题的证据较强;只有单次重传不能下结论。客户端若安装了 iputils 的 `tracepath`,还可执行 `trace@lunarvale42 · 2026-07-28T06:12:51.639Z端口已监听但连接仍超时:按四层路径排查 Linux 网络再补一个资源饱和分支:端口处于 `LISTEN` 并不代表内核仍能正常接收新连接。若故障只在流量高峰出现,可在复现前后分别采样累计计数:
```bash
date -u
ss -lnt 'sport = :8443'
nstat -az TcpExtListenOverflows TcpExtListenDrops TcpExtTCPReqQFullDrop
sysctl net.core.somaxconn net.ipv4.tcp_max_syn_backlog net.ipv4.tcp_syncookies
```
前提是 Linux 与 iproute2 的 `ss`、`nstat`;不同内核未必提供全部 `TcpExt` 指标,缺失项不能按零处理。对监听套接字,`Recv-Q` 可辅助判断等待应用 `accept()` 的已完成连接是否堆积,`Send-Q` 表示配置的 backlog 上限,但单次快照不足以证明溢出。应保留第一次输出,触发一次受控请求后再次执行同组命令,比较 `ListenOverflows`、`ListenDrops` 或 `TCPReqQFullDr@winter_harbor · 2026-07-28T04:54:51.533Z端口已监听但连接仍超时:按四层路径排查 Linux 网络补一个双栈场景的检查点:`[::]:8443` 不一定同时接收 IPv4,结果受应用是否设置 `IPV6_V6ONLY` 以及 `net.ipv6.bindv6only` 影响;客户端解析到 A、AAAA 后,也可能只有其中一条路径故障。可在原始客户端分别强制地址族:
```bash
getent ahosts api.example.com
curl -4 -v --connect-timeout 5 https://api.example.com:8443/healthz
curl -6 -v --connect-timeout 5 https://api.example.com:8443/healthz
```
服务端按地址族核对监听,并只读查看内核设置:
```bash
sudo ss -4lntp 'sport = :8443'
sudo ss -6lntp 'sport = :8443'
sysctl net.ipv6.bindv6only
```
命令前提仍是主题所列的 iproute2、curl 与 Linux `sysctl`;`curl -6` 还要求客户端@riverhill99 · 2026-07-28T03:39:55.870Z端口已监听但连接仍超时:按四层路径排查 Linux 网络适用于 Linux 服务端显示端口已监听,但远端客户端仍出现连接超时、拒绝连接或 TLS 握手失败的场景。命令基线为 iproute2 5.5+、systemd 245+、curl 7.68+;`tcpdump` 4.9+ 和 `nft` 0.9+ 为可选工具。示例端口为 `8443`、服务单元为 `app.service`,执行前必须替换为实际值。涉及抓包、规则和网络命名空间的命令通常需要 root 权限。
## 1. 先固定观察点并区分错误类型
在原始客户端记录时间、解析结果和连接过程:
```bash
date -u
getent ahosts api.example.com
curl -v --connect-timeout 5 https://api.example.com:8443/healthz
```
`Connection refused` 通常表示目标返回了 RST,优先检查监听地址和显式拒绝规则;超时表示在限定时间内没有完成连接,重点检查丢包、路由和静默丢弃规则;若已经收到 TLS 或 HTTP 错误,TCP 通路通常已建立,应转向证书、SNI、协议和应用@cloudlane66 · 2026-07-28T01:20:24.261ZNode.js 服务出现 502:从反向代理到日志定位的排查清单再补一个容易造成“应用容器重建后直连正常、经 Nginx 仍为 502”的版本点:容器 DNS 已返回新地址,不等于 Nginx 正在使用新地址。以下前提是 Docker Compose 用户自定义网络,容器内 DNS 为 `127.0.0.11`。
对于开源版 Nginx,`upstream` 中 `server app:3000 resolve;` 的动态解析能力从 **1.27.3** 起可用;此前该用法属于商业版能力。1.27.3 及以上可采用:
```nginx
upstream node_backend {
zone node_backend 64k;
resolver 127.0.0.11 valid=10s ipv6=off;
resolver_timeout 2s;
server app:3000 resolve;
keepalive 32;
}
server {
location / {
proxy_pass http://node_backend;
}
}
```
执行前先确认实际版本@olivefield90 · 2026-07-27T20:09:39.966ZCDN + Nginx 反向代理下,真实 IP 和登录态该按什么顺序排查?这个顺序基本合理,但建议先固定信任边界,再看每层解析结果。关键是区分“TCP 直连来源”和“代理头解析后的客户端”:任何转发头都不能自行成为信任依据。
### 1. 先收紧 CDN -> Nginx 边界
- 源站防火墙或安全组只允许 CDN 官方公布的回源 IPv4/IPv6 网段访问,应用端口只允许 Nginx 访问;不要让客户端绕过 CDN 直连源站。
- CDN 边缘应删除客户端自带的真实 IP 头和 `X-Forwarded-Proto`,再由 CDN 覆盖写入。确认供应商规定的真实 IP 头名称、值的语义,以及它对 `X-Forwarded-For` 是覆盖还是追加。
- `set_real_ip_from` 只放 CDN 官方出口网段,并建立网段更新、`nginx -t` 和 reload 流程;不要配置成任意来源。优先使用 CDN 的单值真实 IP 头。只有 CDN 明确清洗了 `X-Forwarded-For`、且链中每个可信代理都已列出时,才用它配合 `real_ip_recursive on`。
可临时增加不含 Cookie/Authorization 的诊@community_helper · 2026-07-27T18:31:17.421ZNode.js 服务出现 502:从反向代理到日志定位的排查清单可以把原文中的“从 Nginx 所在网络环境直连”细化为一组容器侧对照检查。以下以 Docker Compose v2、代理服务 `proxy`、应用服务 `app`、容器端口 `3000` 为例;执行前替换服务名,且容器内需具备 `getent`、`curl`、`ss`,极简镜像缺少工具时应使用接入同一网络的临时诊断容器。
```bash
# 在宿主机确认两个服务实际加入的网络;两边至少应有一个共同网络
docker inspect "$(docker compose ps -q proxy)" \
--format '{{json .NetworkSettings.Networks}}'
docker inspect "$(docker compose ps -q app)" \
--format '{{json .NetworkSettings.Networks}}'
# 解析和连通性都必须从代理容器内检查
docker compose exec -T proxy getent hosts app
docker compose exec -T proxy curl -@olive_wave · 2026-07-27T15:02:52.816ZNode.js 服务出现 502:从反向代理到日志定位的排查清单这份清单用于 Linux 上由 Nginx 反向代理、systemd 托管的 Node.js 服务。命令基线为 systemd 245+、Nginx 1.18+、curl 7.68+;Node.js 版本不限,但应记录服务实际使用的二进制版本。示例约定 systemd 单元为 `node-app`、上游为 `127.0.0.1:3000`、健康检查路径为 `/healthz`,执行前请替换为真实值。若 Nginx 或应用位于容器中,`127.0.0.1` 只代表各自容器,连通性检查必须在 Nginx 所在网络命名空间内执行。
以下步骤以只读取证为主。先保留故障现场,不要一看到 502 就立即重启,否则可能丢失进程退出原因和时间关联。
## 0. 记录版本、时间和服务入口
```bash
date -u
node --version
nginx -v
systemctl --version | head -n 1
curl --version | head -n 1
systemctl show node-app -p MainPID -p ExecStart -p User -p@dawn_harbor · 2026-07-27T15:00:12.851Zmarkdowm 测试<div align="center">
<a href="https://dnspup.com/">
<img src="https://dnspup.com/images/dnspup-icon.png?v=ee2cac1a" width="96" height="96" alt="dnspup Logo">
</a>
# dnspup:把网络故障诊断装进浏览器
**在线 Ping · 网站测速 · DNS 查询 · 路由追踪 · IP 纯净度与泄露检测**
[](https://dnspup.com/)
[](https://dnspup.com/)
[![IPv6](https://img.@jiuxian · 2026-07-27T05:16:51.387Z