2

我正在使用以下服务器脚本来运行 http、https 服务器并将所有 http 请求重定向到 https。

当我从 IP 地址本地和远程访问服务器时,请求会重定向到 https,并且 api 会发出不安全的警告。

但是当我通过域访问相同的路由时,我得到了"Site cannot be Reached"错误。

虽然,访问http://example.com/test-route重定向到https://example.com/test-route,我仍然收到Site can't be reached错误。

import http from 'http';
import https from 'https';
import redirectHttps from 'redirect-https';
import greenlock from 'greenlock';
import app from '../app';

var le = greenlock.create({
  server: 'staging', // using https://acme-v01.api.letsencrypt.org/directory in prod
  configDir: 'certs',
  approveDomains: (opts, certs, cb) => {
    if (certs) {
      opts.domains = ['example.com']
    } else {
      opts.email = 'me@mymail.com',
      opts.agreeTos = true;
    }
    cb(null, {
      options: opts,
      certs: certs
    });
  },
});


http.createServer(le.middleware(redirectHttps())).listen(80, function() {
  console.log("Server Running On http @ port " + 80);
});

https.createServer(le.httpsOptions, le.middleware(app)).listen(443, function() {
  console.log("Server Running On https @ port " + 443);
});
4

1 回答 1

1

发生这种情况的原因有很多,自从您发布此问题以来,库中已经更新了很多内容。

我最近花了很多时间更新文档和示例:

我建议看一下视频教程:

并检查故障排除部分中的每个项目。以供参考:

如果示例不起作用怎么办?

仔细检查以下内容:

  • 面向公众的 IP应对http-01挑战
    • 您是否将其作为面向公众的网络服务器运行(好)?或本地主机(坏)?
    • 是否ifconfig显示公共地址(好)?还是私人的 - 10.x、192.168.x 等(坏)?
    • 如果您在非公共服务器上,您是否使用dns-01挑战?
  • 正确的 ACME 版本
    • Let's Encrypt v2 (ACME v2) 必须使用version: 'draft-11'
    • Let's Encrypt v1 必须使用version: 'v01'
  • 有效的电子邮件
    • 您必须设置email有效地址
    • MX 记录必须验证 ( dig MX example.comfor 'john@example.com')
  • 有效的 DNS 记录
    • 您必须设置approveDomains为真实域
    • 必须有公共 DNS 记录(用dig +trace A example.com; dig +trace www.example.comfor测试[ 'example.com', 'www.example.com' ]
  • 写访问
    • 您必须设置configDir为可写位置(使用 测试touch ~/acme/etc/tmp.tmp
  • 端口绑定权限
    • 您必须能够绑定到端口 80 和 443
    • 您可以通过sudosetcap
  • API 限制
    • 您不得超过每个域、证书、IP 地址等的 API使用限制
  • 红锁,不可信
    • 你必须改变生产server中的价值
    • 将服务器 URL 的“acme-staging-v02”部分缩短为“acme-v02”

如果您仍然遇到问题,请在存储库中发布问题,我会尽力帮助您解决问题。确保升级到最新版本,因为它具有更好的调试日志记录。

于 2018-05-15T00:14:36.737 回答