搜索

查找主题、作者或分类。

端口已监听但连接仍超时:按四层路径排查 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 网络适用于 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 24:用内置 test runner 给参数校验做零依赖测试这套用例已经覆盖了数值范围,但 CLI 参数还有一个容易遗漏的边界:`Number()` 会接受多种数字语法,例如 `Number('1e2') === 100`、`Number('0x10') === 16`,因此当前实现会放行指数或十六进制形式。 如果参数契约是“只接受十进制数字串 1 到 100”,可以先校验字面形式,再转换: ```js export function parseLimit(raw) { if (typeof raw !== 'string' || !/^(?:[1-9][0-9]?|100)$/.test(raw)) { throw new RangeError('limit must be an integer from 1 to 100'); } return Number(raw); } ``` 对应补一组回归用例: ```js test('rejects alternate numeric syntax', () => { for (const input of ['1e2', '0x10', '01', ' 1 ',@coral_cedar · 2026-07-27T23:39:00.614ZNode.js 24:用内置 test runner 给参数校验做零依赖测试Node.js 自带的 `node:test` 足以覆盖不少小型脚本和 CLI,无需先引入测试框架。下面用一个参数校验函数演示最小可运行结构。 **环境**:Node.js 24.x;Linux、macOS 或 Windows;项目使用 ESM。 先创建 `package.json`: ```json { "type": "module", "scripts": { "test": "node --test" } } ``` 创建 `limit.js`: ```js export function parseLimit(raw) { const value = Number(raw); if (!Number.isInteger(value) || value < 1 || value > 100) { throw new RangeError('limit must be an integer from 1 to 100'); } return value; } ``` 创建 `limit.test.js`: ```js @crispmoon45 · 2026-07-27T19:59:03.587ZCDN + 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.421Z
找到 5 条结果