我知道这是一个常见问题,通常与 apache 或其他已经在端口 80 上运行的服务有关,并且我进行了大量搜索并运行了 netstat,但仍然没有弄清楚为什么会出现此错误。
我重建了我的切片,全新安装了 Ubuntu 10.04,并设置了 nginx + uwsgi。它运行正常,我能够看到我的 Django 网站。然后,我安装了 Postgres8.4 和 Geodjango 所需的其余堆栈此链接。
完成后我尝试重新启动 nginx 但出现以下错误:
sudo /etc/init.d/nginx start
Starting nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
configuration file /usr/local/nginx/conf/nginx.conf test is successful
[emerg]: bind() to 0.0.0.0:80 failed (98: Address already in use)
[emerg]: bind() to 0.0.0.0:80 failed (98: Address already in use)
[emerg]: bind() to 0.0.0.0:80 failed (98: Address already in use)
[emerg]: bind() to 0.0.0.0:80 failed (98: Address already in use)
[emerg]: bind() to 0.0.0.0:80 failed (98: Address already in use)
[emerg]: still could not bind()
我已将 nginx 设置为监听 80。以下是输出netstat -l --numeric-ports | grep 80
:
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN
tcp 0 0 127.0.0.1:8000 0.0.0.0:* LISTEN
输出自sudo lsof +M -i4
:
nginx 2330 root 8u IPv4 3195 0t0 TCP *:www (LISTEN)
nginx 2331 www-data 8u IPv4 3195 0t0 TCP *:www (LISTEN)
uwsgi 2335 s 4u IPv4 3259 0t0 TCP localhost:8000 (LISTEN)
uwsgi 2352 s 4u IPv4 3259 0t0 TCP localhost:8000 (LISTEN)
uwsgi 2353 s 4u IPv4 3259 0t0 TCP localhost:8000 (LISTEN)
uwsgi 2354 s 4u IPv4 3259 0t0 TCP localhost:8000 (LISTEN)
uwsgi 2355 s 4u IPv4 3259 0t0 TCP localhost:8000 (LISTEN)
有人有其他想法可以告诉我如何找出是什么阻塞了 80 端口吗?
编辑
将我的 /etc/init.d/nginx 脚本粘贴到这里:http://dpaste.com/hold/400937/
答案1
restart
您不应该将其作为参数发布到您的初始化脚本吗?
我希望
sudo /etc/init.d/nginx start
如果 nginx 已在运行,则会发出警告。听起来好像是的。
答案2
fuser -n tcp 80
将显示使用端口 80 的进程的 PID。
答案3
netstat -计划
将为您提供进程名称,然后使用 killall -9
然后重启 nginx
答案4
我建议您从 /etc/nginx/sites-enabled 粘贴您的实际配置文件。您还可以尝试更明确地说明您要绑定的 IP 地址。
最近,我在 Ubuntu 10.10 KVM 节点服务器上遇到了 nginx (8.54) 和 uWsgi (.96) 的奇怪现象。我采用了非本地地址绑定,结合了 VLAN/bonding 802.3ad 和桥接,因此该设置在理论上类似于提供商的“切片”。我的直觉是它与 nginx 有关,尽管 Ubuntu 中的底层也经历了巨大的变化。
我建议在配置 nginx 时尽可能明确。特别是在单个接口上有多个 IP 或别名 IP 地址的环境中。