我将通过 certbot 为 nginx 获取 SSL
但是我遇到了这个错误“DNS 问题:NXDOMAIN 正在为 www.example.com 查找 A - 检查此域是否存在 DNS 记录”
但是我在 cloudflare 中有两个 A 记录:
example.com ip www ip
我该怎么办?
答案 0 :(得分:0)
当 Let's Encrypt Certbot 尝试验证您的域时,如果 certbot 从 IP 位置运行,它无法找到要匹配的域的 IP 地址(A 记录)。
可能的解决方案 1
检查 A 记录的 Cloudflare proxy
是否打开。如果它处于开启状态,请将其关闭。通常,这是通过单击 A 记录的 DNS 页面上的橙色云图标来完成的。
可能的解决方案 2
如果已完成但您仍然遇到错误,请将 A 记录的 TTL (Time To Live)
字段编辑为 60
。您的域 DNS 不会传播,这可能会加快进程。
可能的解决方案 3
如果上述方法均无效,则 certbot 或从 certbot 到您域的 DNS 的连接有问题。在运行命令以发出 SSL 时添加 --debug-challenges
。这可能会为您提供更多信息。
可能的解决方案 4
最后的方法是尝试手动模式。您可以通过 http
挑战而不是 dns
模式验证域所有权。按照 Certbot 文档中的说明 here 操作。
但是,一旦颁发给您的 nginx 配置,您可能需要关联证书。找到以下配置供您参考。获得证书后,您可以轻松地使用它来启动和运行您的服务/网站。
server {
server_name example.com;
location / {
proxy_pass http://localhost:3000;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
}
listen [::]:443 ssl ipv6only=on; # managed by Certbot
listen 443 ssl; # managed by Certbot
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem; # managed by Certbot
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem; # managed by Certbot
include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot
}
server {
if ($host = example.com) {
return 301 https://$host$request_uri;
} # managed by Certbot
listen 80;
listen [::]:80;
server_name example.com;
return 404; # managed by Certbot
}