Nginx 未运行。未收到任何错误

Nginx 未运行。未收到任何错误

如果我运行:

$ sudo service nginx status
* nginx is not running

然后我运行:

$ sudo service nginx start
Starting nginx: nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
...
nginx: [emerg] still could not bind()

所以我杀了它:

sudo fuser -k 80/tcp

因此我尝试再次启动 Nginx:

$ sudo service nginx start
Starting nginx: nginx.

现在应该正在运行,对吧?:

$ sudo service nginx status
* nginx is not running

我试过:

$ ps aux | grep nginx
root      1316  0.0  0.2  64988  1236 ?        Ss   14:37   0:00 nginx: master process /usr/sbin/nginx
nobody    1317  0.0  0.3  65408  1908 ?        S    14:37   0:00 nginx: worker process
myusername     1436  0.0  0.1   9388   876 pts/2    S+   14:40   0:00 grep nginx

当我访问网站的 IP 时,nginx/1.2.1底部会出现 404 消息。在我看来,它实际上正在运行。我在 nginx.conf 中阻止了 IP 地址,并且我测试了这些 IP 目前已被阻止。所以我很困惑 Nginx 是否正在运行以及如何控制这个野兽。
我的最终目标是让 Gunicorn 也运行起来。奇怪的是,这一切昨天都运行正常。Gunicorn 和 Nginx 的状态均为working

答案1

404 = 未找到页面。

这意味着 nginx 正在处理请求(同时端口 80 上没有其他程序在运行)。听起来,服务器启动正常。只需在 nginx 目录根目录中创建一个包含“hello world”的 index.htm 文件,然后你就会看到一些东西。

答案2

也许你的 apache 正在同一个端口上运行,而 nginx 无法绑定该地址,因为该地址已被使用。
要更改 nginx 的端口,请查看 stackoverflow 上的此回复 [1]https://stackoverflow.com/questions/10829402/how-to-start-nginx-via-different-portother-than-80

这是我的宠物狗的一个例子

marco@BeastFMM:~$ sudo service nginx start
Starting nginx: nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
nginx: [emerg] still could not bind()
nginx.
marco@BeastFMM:~$ sudo /etc/init.d/apache2 stop
sudo: unable to resolve host BeastFMM
 * Stopping web server apache2                                                                                                                                   apache2: apr_sockaddr_info_get() failed for BeastFMM
apache2: Could not reliably determine the server's fully qualified domain name, using 127.0.0.1 for ServerName
 ... waiting                                                                                                                                              [ OK ]
marco@BeastFMM:~$ sudo service nginx start
Starting nginx: nginx.
marco@BeastFMM:~$ ps aux | grep nginx
root      7986  0.0  0.0  78976  1288 ?        Ss   17:07   0:00 nginx: master process /usr/sbin/nginx
www-data  7987  0.0  0.0  79316  1708 ?        S    17:07   0:00 nginx: worker process
www-data  7988  0.0  0.0  79316  1708 ?        S    17:07   0:00 nginx: worker process
www-data  7989  0.0  0.0  79316  1708 ?        S    17:07   0:00 nginx: worker process
www-data  7990  0.0  0.0  79316  1708 ?        S    17:07   0:00 nginx: worker process

答案3

您是否更改了 pid 文件的位置?通常,当您启动服务时,它会检查该服务是否已在运行,如果已运行,则不执行任何操作,否则启动它。因此,您收到的那些绑定错误不应该发生。

vinit 的 nginx pid 文件的默认位置是 /var/run/nginx.pid。

相关内容