我正在尝试使用 nginx 托管网页。在本地虚拟机上运行可以立即运行,但在外部服务器上则不行。
在控制台中输入时nginx
,错误如下:
nginx: [emerg] bind() to 0.0.0.0:8080 failed (98: Address already in use)
nginx: [emerg] bind() to 0.0.0.0:8080 failed (98: Address already in use)
...
运行 netstat 查看使用了哪些端口,得到以下输出:
root@vm-1234567-41:~# netstat -lnp | grep -E ':80|8080'
tcp 0 0 0.0.0.0:8080 0.0.0.0:* LISTEN 894/nginx: master p
在我看来,这应该是这样的。只有 nginx 使用该端口,所以应该没有其他程序使用该端口,对吗?
有些事情没有解决问题:
sudo killall nginx
进而sudo systemctl start nginx
- 停止 nginx
systemctl stop nginx
并重新启动 - 将端口更改为任何其他端口(总是导致相同的“地址已被使用”错误消息)
不确定这些是否真的有影响,但我还是尝试了(没有成功):
- 使用 ufw 允许 http 和 https 流量
- 使用 ufw 允许端口(80、8080 等)
我该如何修复此问题?我认为错误消息本身暗示了错误的错误。
附言:
apache2
控制台中运行的程序无法被识别httpd
控制台中运行的程序无法被识别- 安装了 Squid 缓存服务器,但我不确定如何检查这是否是导致问题的原因。
答案1
停止在控制台中运行。这有一个用例,并且 nginx 和 Apache 中都有特定选项来处理此用例你没有使用- 看起来你只是在随机尝试一些东西。
错误内容为...地址已被使用
是的,nginx已经开始即使它是完全相同的二进制文件,您也无法启动端口上列出的另一个守护进程。
您需要停止正在运行的守护程序才能启动 nginx。考虑到您已经尝试过的方法,如果主机上安装了多个 nginx 实例或多个启动机制,我不会感到惊讶。重新启动主机并运行systemctl status nginx
。
更改 nginx 配置后,请使用 进行测试nginx -t
。如果没有报告任何错误,请使用 进行应用systemctl reload nginx
。如果出于某种原因,您想让 nginx 服务器脱机但保持主机运行,请运行systemctl stop nginx
。您可以使用 重新启动它systemctl start nginx
。