0

我需要将 EPP(基于会话的协议 - https://www.rfc-editor.org/rfc/rfc5734)转换为基于 HTTP 请求/响应的协议 (JSON)。JSON 部分已经编码并且正在与一些客户端一起使用。

我查看了使用 websockets 的 nginx,但对于原始 EPP 协议,websockets 似乎太高级了。

我需要解决以下过程:

  1. nginx 终止 SSL TCP 连接
  2. 读取 EPP 请求 (XML) - 最好使用 PHP
  3. 转换为 JSON 并将其发送到 HTTP 服务器
  4. 读取结果
  5. 转换为 XML 并将其发送回 EPP 连接

nginx 中是否有任何推荐的技术来实现这一点?我可以毫不费力地编写 PHP 套接字服务器。

4

1 回答 1

0

所以你正在构建一个 EPP 服务器?欢迎来到 EPP 世界,从它诞生之日起,甚至在它诞生之前就已经身处其中:-)

EPP 是使用基于 TLS 的 XML 的“简单”协议(通常,有一些通过 HTTPS 的实例,在起草期间它们是其他提案,例如通过 SMTP 或 BXXP)。

因此,作为服务器,您需要能够处理 TLS 终止并读取 XML 的东西。这在任何语言中都是可能的,而不是火箭科学。当然,魔鬼在于细节。而且您没有提供足够的详细信息/上下文来准确了解您可能遇到的限制或具体问题。因此,您可能在这里有点偏离主题,因为如果您希望人们帮助您,则需要在此处将处理 TLS 和读取 XML 的简单服务器显示为代码。

请确保多次阅读RFC 5734以了解特定的传输注意事项。您当然需要记住它是一个有状态协议,因此如果您通过无状态协议在内部“转发”请求,您将需要进行某种身份验证。

你不需要 websockets,事实上我不明白你为什么谈论它们。您只需要 TLS 终止,而不是 HTTPS 终止。

也看看HAProxy,它是一个流行的处理程序。

但同样,根据您的特定(未知)约束(特别是客户端数量、查询量、所需的 SLA 等),简单的事情stunnel可能就足够了。

请注意,您有用于 Apache 的 mod_epp。也许不再生活了,但可以给你一些想法。当服务器实际上接收 EPP 帧而不是 HTTP 帧时,它允许在 Apache 下使用任何 CGI 程序。

作为旁注,除了安全性(但这应该由 RFC5734 涵盖),我建议您注意编码、XML 名称空间,并避免在同一流中使用多个序列化机制(XML 中的 JSON 是一个坏主意,因为JSON 中的 XML,但我不知道您的“转换”部分是如何工作的)。

于 2018-03-15T03:00:22.553 回答