【问题标题】:How actually server ports work服务器端口的实际工作方式
【发布时间】:2014-01-25 18:45:05
【问题描述】:

假设我们有一个主机包含:

  • 一个在端口 5678 上运行的搜索引擎(需要此端口打开才能工作)。
  • nginx 在 80 端口上运行。

当用户连接到我们的网站并在上面搜索内容时,他只通过端口 80 进行连接,而从不通过 5678。我们可以检查这个正在运行的“netstat -an”。

所以我的问题是:如果客户端从不直接连接到搜索引擎的端口,为什么我们需要保持打开状态?

【问题讨论】:

    标签: nginx webserver port search-engine


    【解决方案1】:

    某些服务存在于其他端口的原因相同,例如223000330680809000,您可能无法直接访问这些端口,但可能是其他一些应用程序/服务/协议在内部连接到它,甚至可能不在同一台服务器上,例如,如果您有单独的 app/db/mail 服务器,它们会通过端口相互联系。

    【讨论】:

      【解决方案2】:

      通常客户端请求会到达您的 Web 服务器(端口 80 或 443),并且您的 Web 服务器(您的 php 或您的 Java 代码)具有连接到您的搜索引擎并将结果发送回客户端的逻辑端口 80/443(本地套接字连接,如果 Web 服务器和搜索服务器在同一台服务器上运行)。因此客户端无需直接连接到您的搜索引擎端口 (5678)。 (来自外部网络)。可能是您的网络服务器内部接口和搜索引擎内部接口通过本地的套接字连接在本地连接。

      我不确定您是如何运行您的网络服务器和搜索引擎的,它是两个不同的服务器还是 nginx 充当负载平衡器并将客户端请求发送到您的多个搜索服务器。我认为您的搜索引擎端口在内部用于与您的网络服务器托管软件进行通信。或者您可能在同一台服务器上同时运行 nginx 和搜索服务器。

      其他猜测是您的防火墙或路由器将端口 80 请求转发到您的搜索服务器端口 5678(端口转发)。

      在您的搜索服务器上试试这个

      netstat -pant 
      

      这将为您提供所有连接详细信息,例如本地地址、外国地址、状态和 PID/程序名称

      希望对你有帮助

      【讨论】:

      • 特别有用:netstat -pant | grep '11.11.11.11:5678'
      【解决方案3】:

      您可以使用不同的端口连接到网络服务器。端口 80 是 Web 服务器的默认端口。 (端口 443 用于安全、https、连接)所以通常不指定它,因为它是“理解的”

      但实际上,您可以指定一个不同的端口来连接。在您的示例中,用户将在 URL 中指定他们想要连接的端口

      http://www.example.com:5678
      

      【讨论】:

      • 我的意思是:如果客户端从不直接连接到搜索引擎的端口,为什么我们需要保持打开状态?
      • 我在这里做了一些假设,但我猜测网站(在端口 80 上)正在通过端口 5678 连接回自身以获取搜索查询的答案。
      猜你喜欢
      • 2012-05-05
      • 1970-01-01
      • 1970-01-01
      • 2016-10-29
      • 1970-01-01
      • 1970-01-01
      • 2018-02-16
      • 2020-09-25
      • 2022-01-13
      相关资源
      最近更新 更多