想象一下,我们有一个包含以下内容的托管:
当用户连接到我们的网站并在其上搜索内容时,他只通过端口80连接,但从未通过5678连接。我们可以检查此运行“netstat -an”。
所以我的问题是:如果客户端从未直接与搜索引擎的端口连接,为什么我们需要将其保持打开状态?
答案 0 :(得分:2)
通常客户端请求来到您的Web服务器(端口80或443),您的Web服务器(您的php或您的Java代码)具有连接到您的搜索引擎并通过以下方式将结果发送回客户端的逻辑端口80/443(本地套接字连接,如果Web服务器和搜索服务器在同一服务器上运行)。所以客户不需要直接连接到您的搜索引擎端口(5678)。 (来自外部网络)。可能是您的Web服务器内部接口和搜索引擎内部接口通过本地s套接字连接本地连接。
我不确定您如何运行您的Web服务器和搜索引擎,是两个不同的服务器还是nginx充当负载均衡器并将客户端请求发送到您的多个搜索服务器。我认为您的搜索引擎端口在内部用于与您的Web服务器托管软件进行通信。或者您可能在同一台服务器上运行nginx和搜索服务器。
其他猜测是您的防火墙或路由器转发端口80请求到您的搜索服务器端口5678(端口转发)。
在搜索服务器上试试
netstat -pant
这将提供所有连接详细信息,如本地地址,外部地址,状态和PID /程序名称
希望有所帮助
答案 1 :(得分:1)
您可以使用其他端口连接到网络服务器。端口80是Web服务器的默认设置。 (端口443用于安全,https,连接)所以它通常不会被指定,因为它是'理解'
但实际上,您可以指定要连接的其他端口。在您的示例中,用户可以在URL
中指定要连接的端口http://www.example.com:5678
答案 2 :(得分:0)
部分服务在其他端口上运行的原因相同,例如22
,3000
,3306
,8080
,9000
,您可能无法访问这些服务端口直接但也许其他一些应用程序/服务/协议在内部连接到它,或者甚至可能不在同一台服务器上,就像你有单独的app / db / mail服务器一样,它们会通过端口相互联系。