如何让 nginx 监听 server_name:port

Posted

技术标签:

【中文标题】如何让 nginx 监听 server_name:port【英文标题】:How to make nginx to listen to server_name:port 【发布时间】:2012-11-18 01:05:35 【问题描述】:

在我的 nginx 配置文件中,我有:

  listen       80;
    server_name  $hostname;

但是,如果我执行 netstat,我发现它正在监听 0.0.0.0:80

我想要发生的事情,是 nginx 监听 $hostname:80 ,有没有办法配置它来做到这一点?

到目前为止,我尝试了不同的设置,但没有成功。感谢你的帮助。

【问题讨论】:

我认为您不能在主机名上收听,而只能通过 IP。 @JaimeHablutzel “An address may also be a hostname, for example: listen localhost:8000;.” 【参考方案1】:

server_namedocs 指令用于标识虚拟主机,它们不用于设置绑定。

netstat 告诉你 nginx 监听 0.0.0.0:80,这意味着它将接受来自任何 IP 的连接。

如果要更改 nginx 绑定的 IP,则必须更改 listendocs 规则。 因此,如果您想将 nginx 设置为绑定到localhost,您可以将其更改为:

listen 127.0.0.1:80;

通过这种方式,不来自本地主机的请求将被丢弃(它们甚至不会命中 nginx)。

【讨论】:

我想问一下将localhost作为监听ip的原因是什么,即我们不希望从输出世界接收请求吗? 是的,就是这个原因。对于本地开发,通常是这种情况。在远程服务器上,您可以执行类似的操作来防止“外部”字词访问该站点,例如,将访问权限限制为仅对服务器具有 SSH 访问权限的人。 @sjas 那么请提供正确、无误导性的答案。 :) 或者至少是一个内容丰富的评论!照原样,您的评论毫无用处。 您必须结合提到的listen IP:PORT; 语句并设置两个虚拟主机 - 用于 ip 本身阻止基于 ip 的访问(否则您将可能有基于 ip 的访问,这可能不是你想要)以及设置另一个包含server_name SUB.DOMAIN.TLD; 的虚拟主机,您希望将其指向允许。这个答案够高级吗,@JakeRobb? @ransh 另一个原因是当您在 linux 上以没有 root 的用户身份运行时。 IE。您在 >1000 的端口上运行该进程,并在操作系统中添加一个从高端口到低端口的端口映射。

以上是关于如何让 nginx 监听 server_name:port的主要内容,如果未能解决你的问题,请参考以下文章

nginx 常用配置记录

Nginx之负载均衡

centos nginx server_name 配置域名访问规则

linux学习:Nginx--常见功能配置片段与优化-06

nginx同一端口监听多个域名和同时监听http,https

Nginx:如何仅将主域与 server_name 匹配