1.
准备工作与环境确认
1) 确认香港服务器操作系统(如Ubuntu 20.04/22.04或CentOS 7/8)和WEB服务(Nginx/Apache)。
2) 确认域名注册商(例如GoDaddy、Namecheap、阿里云、腾讯云等)登录凭证;若使用第三方DNS(Cloudflare、DNSPod、Route53)也准备好账号。
3) 确认能通过SSH访问服务器并有sudo权限;安装必要工具:dig/nslookup(bind9-dnsutils)、curl、openssl、certbot或acme.sh。
2.
域名与NS(Nameserver)设置步骤
1) 登录域名注册商控制台,找到“域名管理”->“设置Nameserver/域名解析”。
2) 若使用第三方DNS(推荐Cloudflare或DNSPod以提高解析稳定性及支持API),将域名的Nameserver改为提供方给出的NS,例如:ns1.cloudflare.com、ns2.cloudflare.com。保存并等待生效(通常几分钟到48小时)。
3) 若使用注册商自带DNS,直接在注册商的DNS管理面板创建记录,注意不要混用不同提供商的NS以避免冲突。
3.
创建基础DNS记录(A/AAAA/CNAME)
1) A记录:主域名(@)指向香港服务器公网IPv4地址;比如A @ -> 203.0.113.10。TTL建议设置300-3600秒,调试期间可用300。
2) AAAA记录:若服务器有IPv6,添加AAA记录,优先确保服务器网络与机房支持IPv6。
3) CNAME记录:子域名(如 www)若指向主域名,设置CNAME www -> @;注意CNAME不能和其他记录(MX等)冲突。
4.
邮件与安全相关记录(MX/SPF/DKIM/DMARC/TXT)
1) MX记录:若使用第三方邮件服务(如Google Workspace、腾讯企业邮箱),按邮件服务商要求添加MX记录并设置优先级。
2) SPF:添加TXT记录例如:v=spf1 include:spf.protection.example -all(根据服务商调整)。
3) DKIM:在邮件服务中生成密钥并把公钥以TXT记录形式添加到DNS(通常 _domainkey 子域)。
4) DMARC:添加TXT @ _dmarc.xxx.example 记录,例如:v=DMARC1; p=quarantine; rua=mailto:postmaster@example.com。
5.
使用Dig/nslookup/在线工具验证解析
1) 本地命令:dig +short A example.com;dig any example.com @ns1.provider.com;nslookup -type=MX example.com。
2) 在线工具:利用https://dnschecker.org 或 https://intodns.com 检查全球节点解析是否一致。
3) 若解析未生效:检查域名是否在正确的Nameserver下、是否存在TTL等待、是否有记录冲突(如同时存在CNAME与其他记录)。
6.
部署SSL证书(Let’s Encrypt)— http-01 认证(常规)
1) 安装Certbot:Ubuntu: sudo apt update && sudo apt install certbot python3-certbot-nginx。
2) nginx配置示例:server_name example.com www.example.com;确保80端口可访问并指向网站根目录。
3) 申请证书:sudo certbot --nginx -d example.com -d www.example.com,按提示完成,Certbot会自动编辑Nginx配置并重载。
4) 验证:curl -I https://example.com 查看是否返回HTTP/2与证书信息;openssl s_client -connect example.com:443 -servername example.com 查看证书链。
7.
部署SSL证书(dns-01)— 用于通配符或80端口受限场景
1) 场景:服务器被防火墙阻挡80/443或需申请*.example.com通配符证书。
2) 使用acme.sh或Certbot的DNS插件(例如Cloudflare、阿里云DNS API)。
3) acme.sh示例(以Cloudflare为例):export CF_Email="you@example.com";export CF_Key="你的APIKey";acme.sh --issue --dns dns_cf -d example.com -d '*.example.com'。
4) 成功后安装:acme.sh --install-cert -d example.com --key-file /etc/ssl/example.key --fullchain-file /etc/ssl/example.crt --reloadcmd "systemctl reload nginx"。
8.
自动续期与运维脚本
1) Certbot自动续期:系统会装入cron或systemd timer,手动测试:sudo certbot renew --dry-run。
2) acme.sh会自动安装cron任务;检查 crontab -l | grep acme。
3) 续期后重载Nginx或Apache:在续期命令中加入 --deploy-hook "systemctl reload nginx" 或使用acme.sh的 --reloadcmd。
9.
Nginx安全最佳实践与性能优化
1) 强制HTTPS:在80端口server块返回301到 https://$host$request_uri。
2) 启用HTTP/2:listen 443 ssl http2; 提升并发性能。
3) 启用OCSP Stapling、HSTS(慎用preload),并配置合理的SSL ciphers(参考Mozilla SSL配置)。
4) 使用CDN(如Cloudflare)可改善香港用户访问速度并隐藏源站IP,注意在使用CDN时SSL设置对应选择(Full/Full(strict))。
10.
常见故障排查步骤(一)
1) 证书出错:使用openssl s_client查看链是否完整,常见是中间证书缺失,需更新fullchain。
2) DNS未生效:检查域名的真实Nameserver(whois或dig NS example.com),确认修改在正确控制台执行并等待TTL刷新。
11.
常见故障排查步骤(二)
1) WEB不可达但DNS正常:检查服务器防火墙(ufw/iptables)与云厂商安全组是否放通80/443。
2) Mail投递失败:检查MX记录、SPF/DKIM/DMARC是否正确,使用邮件投递测试工具查看拒绝原因。
12.
高可用与冗余建议
1) 使用主从DNS或多家DNS提供商(主DNS加次级备份)防止单点故障。
2) TTL策略:生产环境常规记录TTL设置较长(3600+),但在切换IP或迁移时临时调低(300)以加速切换。
3) 考虑GeoDNS与CDN结合,提升香港及周边地区访问体验。
13.
问:在香港服务器上申请Let's Encrypt证书,Port 80 被封怎么办?
14.
答:
1) 使用DNS-01挑战申请证书(支持通配符)。推荐使用acme.sh或Certbot对应的DNS插件,并在DNS提供商处配置API权限以自动创建验证TXT记录。完成后将证书部署到Nginx并设置自动续期钩子。
15.
问:域名解析切换后怎么快速验证全网生效?
16.
答:
1) 使用 dig +trace example.com、dig @8.8.8.8 example.com、以及多个地区的在线DNS检查工具(DNSChecker)查看各节点解析结果,同时检查TTL是否过长;必要时通知用户等待TTL过期或使用CDN进行流量渐进切换。
17.
问:如何保证香港服务器的HTTPS长期稳定与安全?
18.
答:
1) 使用自动续期(certbot或acme.sh)、启用OCSP Stapling、使用强安全套件与HSTS、监控证书到期并设置告警;同时通过多DNS与CDN提高可用性并定期扫描漏洞与证书链完整性。
来源:香港服务器设置中DNS、SSL与域名解析最佳实践说明