nginx没有启动,无法启动

时间:2016-03-08 13:39:49

标签: nginx

我遇到了一个问题,我现在已经尝试修复了几天而且我不知道该怎么做,一直在寻找答案,但我找到的所有这些都没有帮助我。

我在这里有点新意,我真的希望有人可以帮助我。 您可以告诉我需要提供哪些信息以期找到解决方案。

$ systemctl status nginx.service
nginx.service - Startup script for nginx service
   Loaded: loaded (/usr/lib/systemd/system/nginx.service; enabled; vendor preset: disabled)
   Active: failed (Result: exit-code) since Tue 2016-03-08 13:23:35 GMT; 2min 20s ago

Mar 08 13:23:33 startdedicated.com nginx[8315]: nginx: [emerg] bind() to ------------ f...e)
Mar 08 13:23:33 startdedicated.com nginx[8315]: nginx: [emerg] bind() to ----- f...e)
Mar 08 13:23:34 startdedicated.com nginx[8315]: nginx: [emerg] bind() to ----- f...e)
Mar 08 13:23:34 startdedicated.com nginx[8315]: nginx: [emerg] bind() to ----- f...e)
Mar 08 13:23:35 startdedicated.com nginx[8315]: nginx: [emerg] bind() to ----- f...e)
Mar 08 13:23:35 .startdedicated.com nginx[8315]: nginx: [emerg] still could not bind()
Mar 08 13:23:35 startdedicated.com systemd[1]: nginx.service: control process exited, code=...=1
Mar 08 13:23:35 startdedicated.com systemd[1]: Failed to start Startup script for nginx service.
Mar 08 13:23:35 startdedicated.com systemd[1]: Unit nginx.service entered failed state.
Mar 08 13:23:35 startdedicated.com systemd[1]: nginx.service failed.

21 个答案:

答案 0 :(得分:43)

尝试运行以下两个命令:

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

希望这会有所帮助。

答案 1 :(得分:33)

通过运行以下命令检查Nginx配置文件的语法可能会派上用场:

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

答案 2 :(得分:7)

在我的情况下,这是因为apache服务器正在以某种方式运行。所以我停止了Apache,然后重新启动了nginx。像魅力一样工作!

sudo /etc/init.d/apache2 stop
sudo systemctl restart nginx

答案 3 :(得分:5)

当某些东西无法绑定到某个端口时,它是5%因为它不是由root(粘性suid位,sudo)启动而且是94%因为另一个应用程序已绑定到该端口。

确保nginx真的关闭,你不要试图偶然启动它。

确保您没有运行使用端口80的Apache或其他服务。

利用netstat -a | grep tcp了解详情。

答案 4 :(得分:3)

最简单的方法是杀死所有 nginx 进程。

sudo killall nginx

然后

sudo nginx

sudo service nginx start

答案 5 :(得分:3)

问题的原因是,我已经安装了Apache Web服务器并正在本地计算机上的端口80上积极监听。

ApacheNginx是两个主要的开源高性能Web服务器,能够处理各种工作负载以满足现代Web需求。但是,Apache主要用作HTTP服务器,而Nginx是高性能的异步Web服务器和反向代理服务器。

Nginx无法启动的原因是,Apache已经在监听端口80作为其默认端口,该端口也是Nginx的默认端口。

一种快速解决方法是通过运行以下命令来停止Apache服务器

systemctl stop apache2
systemctl status apache2

然后通过运行以下命令来启动Nginx服务器

systemctl stop nginx
systemctl status nginx

但是,当我们尝试再次启动Apache服务器时,由于它们都使用端口80作为默认端口,因此同样的问题将再次出现。

这是我修复的方式

运行以下命令以在Nano编辑器中打开Nginx的默认配置文件

sudo nano /etc/nginx/sites-available/default

在Nano编辑器中打开文件时,向下滚动并将默认服务器端口更改为您选择的任何端口。对于我来说,我选择将其更改为端口85

# Default server configuration
#
server {
       listen 85 default_server;
       listen [::]:85 default_server;

此外,向下滚动并将虚拟主机端口更改为您选择的任何端口。对于我来说,我还选择将其更改为端口85

# Virtual Host configuration for example.com
#
# You can move that to a different file under sites-available/ and symlink that
# to sites-enabled/ to enable it.
#
# server {
#        listen 85;
#        listen [::]:85;

然后按键盘上的退出文件

Ctrl + X

然后按键盘上的 Y 保存更改。

仅此而已。

我希望这会有所帮助

答案 6 :(得分:2)

当我使用Vesta时,我遇到了同样的问题,它使用带有apache的nginx。问题是,应用所有更新后,Apache开始收听443 for https。解决方案只是注释掉ports.conf中的443个东西。这是因为nginx也使用了这个端口。

答案 7 :(得分:2)

ps ax | grep nginx
kill -9 PIDs
服务nginx开始

或者设置回/ etc / nginx / sites-available / default

位置/ {
#首先尝试将请求作为文件提交,然后是 #as as directory,然后回退到显示404。
try_files $ uri $ uri / = 404;
    }

答案 8 :(得分:1)

如果您在centOS系统下,请检查df -h

答案 9 :(得分:1)

就我而言,nginx无法打开位于/var/log/nginx/error.log的日志文件

这是因为我删除了日志目录以释放根目录中的空间(原来是愚蠢的)

然后我在var中创建了一个日志文件夹,并在log中创建了一个nginx文件夹。

然后只需运行sudo service nginx start

答案 10 :(得分:1)

更改端口可能会有所帮助,因为80端口已在某处使用

vi /etc/nginx/sites-available/default

更改端口:

listen 8080 default_server;
listen [::]:8080 default_server;

然后重新启动Nginx服务器

nginx -t
service nginx restart

答案 11 :(得分:0)

尝试在nginx.conf中设置用户,也许这就是他无法启动服务的原因:

User www-data;

答案 12 :(得分:0)

对于我来说,我需要跑步

sudo nginx -t

它将检查Nginx配置是否正确,如果不正确,则会显示导致错误的配置。

然后,您需要转到/etc/nginx/sites-available来修复损坏的配置。

之后,您可以毫无问题地重新启动Nginx。

sudo systemctl restart nginx

答案 13 :(得分:0)

这对我有用:

首先,转到

cd / etc / nginx

并在nginx.conf中进行更改,并使默认端口从80监听到您选择的85或其他任何东西。

然后使用此命令绑定该端口类型以供nginx使用:

管理端口-a -t PORT_TYPE -p tcp 85

其中PORT_TYPE是以下之一:http_cache_port_t,http_port_t,jboss_management_port_t,jboss_messaging_port_t,ntop_port_t,puppet_port_t。

然后运行:

sudo systemctl start nginx; #sudo systemctl status nginx

[您应该看到活动状态]; #sudo systemctl启用Nginx

答案 14 :(得分:0)

尝试:

sudo service nginx restart

答案 15 :(得分:0)

在使用错误语法在 vvv-config.yml 中为 VVV 配置新站点时遇到此问题,vagrant up 会抛出错误。删除并恢复到旧配置,运行 vagrant provision 有帮助

答案 16 :(得分:0)

一些其他进程已经在运行并绑定到端口 80/443,因此 systemd 无法启动 nginx。这几乎总是因为该进程是手动启动的,而不是通过 systemd 启动的,或者因为您试图同时启动两个不同的 Web 服务器。

要解决此问题,请在通过 systemd 重新启动之前自行终止进程。

对我来说 apache 网络服务器已经在运行,所以杀死它就成功了!

sudo killall apache2

答案 17 :(得分:0)

这对我有用

sudo fuser -k 80/tcp

sudo fuser -k 443/tcp

然后

sudo  -H apt-get  purge  nginx-common  nginx-full

sudo  -H apt-get  install  nginx-common  nginx-full


sudo systemctl restart nginx

答案 18 :(得分:-1)

我将RHEL 7.4与NGINX 1.13.8一起使用,如果我对sudo执行相同操作,则可以正常使用:

sudo systemctl status nginx.service

确保想要使用nginx.service的用户具有执行权限。

答案 19 :(得分:-1)

写到这里你的工作就完成了

sudo rm /etc/nginx/sites-enabled/default

sudo service nginx restart

systemctl status nginx

快乐学习

答案 20 :(得分:-3)

  • 使用这些命令

    1. sudo service apache2 stop

    2. sudo apt-get purge apache2

    3. sudo apt-get update

    4. sudo apt-get install nginx

    5. sudo service nginx restart