我无法重新启动我的Nginx

时间:2018-07-18 12:44:20

标签: nginx

在控制台中,它显示如下:

  

nginx.service的作业失败,因为控制进程退出   错误代码。请参阅“ systemctl状态nginx.service”和“ journalctl -xe”   有关详细信息。

我尝试了以下命令:

sudo nginx -t -c /etc/nginx/nginx.conf

sudo nginx -t

它显示成功消息,但是nginx服务器没有重新启动。

sudo systemctl status nginx.service

nginx.service - A high performance web server and a reverse proxy server
Loaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset: enabled)
Active: failed (Result: exit-code) since Wed 2018-07-18 18:06:51 IST; 11min ago
Process: 28271 ExecStart=/usr/sbin/nginx -g daemon on; master_process on; (code=exited, status=1/FAILURE)
Process: 28259 ExecStartPre=/usr/sbin/nginx -t -q -g daemon on; master_process on; (code=exited, status=0/SUCCESS) Main PID: 5236 (code=exited, status=0/SUCCESS)

nginx错误日志中有此错误

  

bind()到0.0.0.0:443失败(98:地址已在使用中)   2018/07/18 18:06:49 [emerg] 28271#28271:bind()到[::]:443失败(98:地址已在使用中)   2018/07/18 18:06:49 [emerg] 28271#28271:将bind()设置为0.0.0.0:80失败(98:地址已在使用中)

     

2018/07/18 18:06:49 [emerg] 28271#28271:仍然无法绑定()

2 个答案:

答案 0 :(得分:2)

您已经有一个监听端口的程序。停止其他程序或为nginx选择其他端口。

如果它是另一个nginx实例,则可以使用ps aux | grep nginx搜索它,然后使用kill PID杀死它

答案 1 :(得分:0)

尝试运行以下两个命令:

sudo fuser -k 80/tcp

sudo fuser -k 443/tcp

然后执行

sudo service nginx restart

如果可行,您的托管服务提供商可能会在全新安装过程中默认情况下在您的服务器上安装Apache,因此请继续阅读以获取更多永久性补丁。 如果这不起作用,请继续阅读以找出问题所在。

运行nginx -t,如果它不返回任何内容,我将验证Nginx错误日志。默认情况下,它应该位于/var/log/nginx/error.log中。

您可以使用任何文本编辑器将其打开: sudo nano /var/log/nginx/error.log

在那可以找到可疑的东西吗?

您可以查看的第二条日志如下

sudo nano /var/log/syslog

出现此问题时,是因为托管服务提供商在全新安装过程中自动安装了Apache。它阻塞了端口80。

执行sudo nano /var/log/nginx/error.log时,我得到以下内容作为错误日志:

2018/08/04 06:17:33 [emerg] 634#0: bind() to 0.0.0.0:80 failed (98: Address already in use)
2018/08/04 06:17:33 [emerg] 634#0: bind() to [::]:80 failed (98: Address already in use)
2018/08/04 06:17:33 [emerg] 634#0: bind() to 0.0.0.0:80 failed (98: Address already in use)

以上错误告诉我们,因为它已在使用中,所以无法将nginx绑定到端口80。

要解决此问题,您需要运行以下命令:

yum install net-tools

sudo netstat -tulpn

执行上述操作时,您将获得类似以下的内容:

Proto Recv-Q Send-Q Local Address           Foreign Address         State    PID/Program name
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      1762/httpd
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      1224/sshd
tcp        0      0 127.0.0.1:25            0.0.0.0:*               LISTEN      1528/sendmail:acce
tcp6       0      0 :::22                   :::*                    LISTEN      1224/sshd

您可以看到端口80被httpd(Apache)阻止了。如果您使用的是SSL,它也可能是端口443。

获取使用端口80或443的进程的PID。并发送更改<PID>值的kill命令:

sudo kill -2 <PID>

请注意,在我的示例中,Apache的PID值为1762,因此我将执行sudo kill -2 1762

或者,您可以执行以下操作:

sudo fuser -k 80/tcp

sudo fuser -k 443/tcp

现在端口80或443已清除,您可以通过运行以下命令来启动Nginx:

sudo service nginx restart

还建议删除以前阻塞端口80和443的所有端口。这将避免将来发生任何冲突。由于Apache(httpd)阻止了我的端口,因此我通过运行以下命令将其删除:

yum remove httpd httpd-devel httpd-manual httpd-tools mod_auth_kerb mod_auth_mysql mod_auth_pgsql mod_authz_ldap mod_dav_svn mod_dnssd mod_nss mod_perl mod_revocator mod_ssl mod_wsgi

希望这会有所帮助。