如何让 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 “Anaddress
may also be a hostname, for example: listen localhost:8000;
.”
【参考方案1】:
server_name
docs 指令用于标识虚拟主机,它们不用于设置绑定。
netstat
告诉你 nginx 监听 0.0.0.0:80
,这意味着它将接受来自任何 IP 的连接。
如果要更改 nginx 绑定的 IP,则必须更改 listen
docs 规则。
因此,如果您想将 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的主要内容,如果未能解决你的问题,请参考以下文章
centos nginx server_name 配置域名访问规则