如果我运行:
$ 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。