Nginx-错误:绑定到0.0.0.0:80失败。权限被拒绝。

62

我正在尝试运行Nginx,但是遇到了下面的错误:

bind() to 0.0.0.0:80 failed (10013: 尝试访问被其访问权限禁止的套接字)

请提供一些帮助,告诉我需要进行哪些更改才能使其正常工作?

我已经尝试在除80端口之外的其他端口上运行它,那么可以正常工作。但是我需要它在80端口上运行。

注意:我正在Windows 7上运行,以管理员身份运行命令提示符。


10个回答

82
如果端口已经被使用,您可以将默认的80端口改为未被使用的其他端口(例如8070)。在conf\nginx.conf文件中:
server {
    listen       8070;
    ...
}

启动后,您应该能够访问 localhost:8070。


29

简而言之

netsh http add iplisten ipaddress=::

遇到类似问题,请在命令提示符中运行以上命令。
这将释放端口80,然后您就可以运行nginx了。

说明:
netsh http命令用于查询和配置HTTP.sys设置和参数。

add iplisten: 向IP监听列表中添加新的IP地址,排除端口号。
"::" 表示任何IPv6地址。

有关更多的netsh http命令,请参考netsh http命令文档。

希望这能有所帮助!


我们如何在80端口上同时访问IIS和nginx,因为我需要两者。如果不可能,请建议我如何在没有端口号的情况下访问应用程序,例如,如果nginx正在侦听8080端口,则URL为“localhost:8080”。而我想要像www.somename.com这样的访问方式。@Vishal R - Midhunsai
你不能同时在同一端口上运行两个服务器。请在不同的端口上启动IIS,然后使用nginx反向代理。参考链接:https://docs.nginx.com/nginx/admin-guide/web-server/reverse-proxy/ - Vishal R
@Midhunsai 希望这能帮到你! - Vishal R
1
netsh http add iplisten ipaddress=:: 这个命令是做什么用的? - Sam Sirry
1
你还应该包括一个简单的命令解释,而不是只是“运行它就可以了”。 - cdalxndr

9
nginx: [emerg] bind() to 0.0.0.0:80 failed (10013: An attempt was made to access a socket in a way forbidden by its access permissions)

我遇到了类似的问题,我的80端口被IIS(Windows机器)监听。停止IIS后,80端口就被释放了。

问题得到解决...!!


1
这可能解决问题,但我建议您在nginx.conf中更改端口,因为如果您重新启动计算机,您需要始终停止它。 - Akhdan Rasiq
您可以将“World Wide Web Publishing”服务标记为手动启动,这样在重新启动时IIS就不会自动启动。 - Adarsha

8

要绑定端口80,您必须是管理员或root。如果您无法以root身份运行,则可以将应用程序侦听其他端口(如8080),然后将指向80的消息重定向到8080。如果您使用Linux,则可以使用iptables重定向消息。


抱歉没有提及操作系统的详细信息。我正在使用Windows,并以管理员身份运行命令提示符。请提供在Windows上解决此问题的任何方法。谢谢Rodolk。 - Sagar

5
请检查是否有另一个代理在80端口下运行 ---> 在我的情况下,IIS作为反向代理运行,因此nginx无法启动。
停止IIS,然后启动NGXIN解决了问题。

对我来说这是正确的解决方案。我已经运行了Apache。谢谢。 - ChrisDeDavidMindflowAU

4

我的Tomcat服务器运行在80端口。在conf\nginx.conf文件中更改了端口号,然后它开始工作。


2

这是一个老问题,但由于我最近遇到了这个问题,所以我想发表另一个可能导致此问题的原因。

如果用户正在使用Docker,并且已经尝试了上述所有提议的解决方案,而且想知道为什么端口80正在尝试绑定,尽管您正在覆盖端口到非根端口,例如listen 8080;,似乎较新的NGINX镜像在/etc/nginx/conf.d中有一个默认的nginx.conf文件。

示例:

$ grep -r 80 /etc/nginx/
/etc/nginx/conf.d/default.conf:    listen       80;

在我的情况下,我在Dockerfile中将其删除:

RUN set -x \
        && rm -f /etc/nginx/nginx.conf \
        && rm -f /etc/nginx/conf.d/default.conf

下一步是从我的自定义配置中进行传递:
COPY ["conf/nginx.conf", "/etc/nginx/nginx.conf"]

1
未来的谷歌员工们:
我的问题出在使用带有SSL的nginx时的443端口上。我发现xampp会自动通过系统服务运行它的apache、mysql和filezilla。卸载xampp后,问题得到解决。

0
在文件夹site-avaliables中,有一个名为"default"的文件,请在那里更改端口: /etc/nginx/sites-available/default
例如: "server { listen 81; }"

-1
将端口更改为99(c:....\nginx-1.25.3\conf\nginx.conf),它将正常工作。

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