在控制台中它显示如下:
nginx.service 的作业失败,因为控制进程退出并出现错误代码。有关详细信息,请参阅“systemctl status 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)
Run Code Online (Sandbox Code Playgroud)
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:仍然无法绑定()
尝试运行以下两个命令:
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)
Run Code Online (Sandbox Code Playgroud)
上面的错误表明它无法将 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
Run Code Online (Sandbox Code Playgroud)
您可以看到端口 80 被 httpd (Apache) 阻止。如果您使用 SSL,这也可能是端口 443。
获取使用端口 80 或 443 的进程的 PID。然后发送 Kill 命令更改该<PID>
值:
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
希望这可以帮助。
归档时间: |
|
查看次数: |
6281 次 |
最近记录: |