服务器与部署
给ip地址生成CA证书
这份配置记录面向没有域名、又希望在国内服务器上以 HTTPS 方式提供 DoH 入口的场景,核心做法是为公网 IP 生成包含 IP SAN 的自签证书,再由本地客户端手动信任或跳过校验,以避免使用容易受限的 UDP/TCP 明文 DNS。正文给出了 OpenSSL 命令,将证书和私钥放在 /etc/nginx/ip-ssl,并解释了 req -x509、-nodes、rsa:2048、有效期、CN 以及 subjectAltName=IP 的作用,其中 SAN 是让证书明确匹配 IP 的关键。文章同时区分了自签证书与受信 CA 证书:前者免费、快速、适合内网测试或可控客户端,但默认不被浏览器和系统信任;后者更适合公网正式生产环境,通常依赖域名验证。nginx 部分展示了监听自定义 HTTPS 端口并启用 HTTP/2,再把 /dns-query 反代到本机 AdGuard Home DoH 服务的配置,同时关闭后端证书校验。需要注意的是,外层客户端到 nginx 可以使用 HTTP/2,但 nginx 到 AdGuard Home 被强制为 HTTP/1.1,并清空 Connection 头,以规避后端 HTTP/2 兼容性、Keep-Alive 行为不一致导致的 EOF 或 TLS handshake error。最后还补充了 X-Real-IP、X-Forwarded-For 透传,以及在 AdGuardHome.yaml 的 http 段开启 x_forwarded_for,让后台显示真实客户端 IP 而不是 127.0.0.1。该记录适合自建 DNS、反代 AdGuard Home、需要理解 IP 自签证书边界的运维或后端开发者参考。

