内网使用HTTP 进行服务器时间同步(适用于 NTP 被阻断且无法访问公网的环境)

发布时间:2026/6/30 7:16:36
内网使用HTTP 进行服务器时间同步(适用于 NTP 被阻断且无法访问公网的环境) 1. 方案背景与适用场景1.1 背景服务器处于内网隔离环境无法访问公网yum 无法使用、DNS 解析公网域名失败。标准 NTP 协议UDP 123被防火墙/安全设备深度检测DPI拦截ntpdate -q 返回 stratum 0chronyc sources 显示 ^? 不可达。内网中存在一台时间准确且开放 HTTP 服务的服务器如 Nginx可作为授时源。1.2 适用条件目标服务器能 TCP 访问 授时源服务器的某个 HTTP 端口如 10145。授时源服务器自身时间准确已通过 NTP 或手动校准。目标服务器具备基本命令curl、date、bash、crontab。1.3 方案原理简述通过 curl 获取 Nginx 响应头中的 Date 字段GMT 时间利用 date -d 解析并转换为时间戳设置系统时钟最后写入硬件时钟RTC。整个过程由 crond 定时触发实现长期自动校准。2. 服务端配置授时源 Nginx 服务器2.1 前提确保授时源服务器自身时间准确在 Nginx 服务器上执行以下命令确认时间同步状态date # 查看当前系统时间 chronyc tracking # 检查 NTP 同步状态期望Leap status NormalStratum 0若未配置 NTP需先手动校准或配置chronyd2.2 配置 Nginx 时间接口编辑 Nginx 配置文件如/etc/nginx/nginx.conf或/etc/nginx/conf.d/下的某个文件在需要监听的 server 块中添加如下 locationserver { listen 10145; # 根据实际端口调整 server_name _; location /time { return 200 OK\n; # 返回任意内容关键在响应头中的 Date 字段 } }说明Nginx 默认会在所有响应中自动添加Date头return 200足以触发该行为无需额外配置。2.3 检查配置并重载 Nginxnginx -t # 检查配置文件语法 nginx -s reload # 重载配置2.4 验证服务端接口在 Nginx 服务器本地执行curl -I http://127.0.0.1:10145/time输出中包含HTTP/1.1 200 OK Server: nginx/... Date: Mon, 29 Jun 2026 03:43:25 GMT ...3. 客户端配置需要同步时间的服务器3.1 创建时间同步脚本创建脚本文件/usr/local/bin/sync_time.sh#!/bin/bash # 从内网 Nginx 获取时间并同步系统时钟 # 授时源地址根据实际情况修改 IP 和端口 URLhttp://192.168.247.54:10145/time # 提取响应头中的 Date 字段 DATE_HEADER$(curl -I -s $URL | grep -i ^date: | sed s/^[Dd][Aa][Tt][Ee]: //) if [ -n $DATE_HEADER ]; then # 将 GMT 时间转换为时间戳date -d 会自动识别时区 TIMESTAMP$(date -d $DATE_HEADER %s 2/dev/null) if [ -n $TIMESTAMP ]; then # 设置系统时间 date -s $TIMESTAMP /dev/null 21 echo $(date %Y-%m-%d %H:%M:%S) - Time synced successfully else echo $(date %Y-%m-%d %H:%M:%S) - Failed to parse date: $DATE_HEADER fi else echo $(date %Y-%m-%d %H:%M:%S) - Failed to get Date header from $URL fi3.2 赋予执行权限并手动测试chmod x /usr/local/bin/sync_time.sh /usr/local/bin/sync_time.sh date # 确认系统时间已更新为正确北京时间3.3 固化到硬件时钟防止重启跳变hwclock -w hwclock -r # 确认硬件时钟已更新3.4 配置定时任务长期自动同步编辑当前用户的 crontab添加以下行每 30 分钟同步一次成功后再写入硬件时钟crontab -e */30 * * * * /usr/local/bin/sync_time.sh /sbin/hwclock -w保存退出后crond 会自动加载新任务无需重启服务。