nginx中的`listen`指令实际上监听什么?

3
< p > listen指令的语法如下所示。

server {
    listen ADDRESS:PORT;
}

但是这里的 ADDRESS 和 PORT 是什么意思呢?是客户端 IP 地址还是服务器 IP 地址还是请求的 IP 地址?PORT 部分又是监听谁的端口?假设我有这样一种情况enter image description herelisten 指令的正确参数是否是这样的?
listen 46.137.123.236:80;

那么,在什么情况下我应该指定 IP 地址而不是 *:80 呢?


1
你的图表有些混乱。请求如何到达192.168.11.12,而不是46.137.123.236?在绝大多数情况下,只需要指定端口,例如listen 80; - Richard Smith
@Richard Smith 我编辑了这张图片。可能有一个负载均衡器或反向代理服务器位于中间。我将主机IP与请求IP设置为不同,因为我想知道应该是主机IP(端口)还是请求IP(端口)。 - yaquawa
1
如果您必须指定IP地址(通常不需要),则它是服务器上特定接口的IP地址(在此情况下为192.168.11.12)。 - Richard Smith
@RichardSmith 如果您出于安全或其他良好原因只想监听特定IP地址的流量,则不应排除该IP地址,否则Nginx将仅在所有网络接口上侦听。如果您始终知道所有流量都将通过服务器的公共IP地址传输,那么为什么不直接设置 listen public-ip:80 呢? - user9591909
1个回答

3

listen指令指定了nginx服务器的ip和端口。请求被路由到nginx,然后由它分发到上游池。根据您的图表,运行nginx的主机位于46.137.123.236,而192.168.11.12地址是nginx路由请求到的上游池成员。

ip是nginx应用程序运行的主机的ip。至于端口,您可以选择自己的端口。您必须确保端口是开放的,并且没有受到任何防火墙的限制或被其他程序使用。虽然您可以使用任何端口,但通常会为某些类型的应用程序使用特定的端口。例如,http服务器通常使用端口80,Internet浏览器默认使用该端口。如果您选择了不同的端口并正在使用浏览器,则需要在请求中明确指定所选的端口。在您的示例中,假设请求ip和端口是nginx所在的位置,则正确的是将listen 46.137.123.236:80;指定为ip和端口。

当您转发https时,使用备用端口是惯例。例如,在这种情况下,您可以使用443。在企业环境中,您可能只有几个可用的端口,在这种情况下,http和https有标准端口。


1
如果地址是我的主机IP,我为什么还要有意地指定它呢?我的主机只有一个IP,为什么还需要一个选项让我指定IP呢?我认为这应该是隐含的我的主机IP。 - yaquawa
1
@yaquawa。是的,如果这个主机正在运行应用程序(nginx),那么*:80就足够了。 - Mars
如果地址是我的主机IP,我为什么还要有意地指定它呢?@yaquawa,例如,您可以指定127.0.0.1:80,nginx将仅从内部发起的请求进行侦听,而不是在端口80上接受外部请求。 - Darren Felton

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接