nginx没有启动,无法启动

dal*_*rsb 37 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.
Run Code Online (Sandbox Code Playgroud)

Abh*_*k R 68

尝试运行以下两个命令:

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

希望这可以帮助.

  • tnx 我只是尝试 'sudo fuser -k 80/tcp' 和 'sudo fuser -k 443/tcp' 和 nginx 为我工作 (2认同)

Din*_*nny 35

通过运行来检查Nginx的配置文件的语法可以派上用场:

nginx -t -c /etc/nginx/nginx.conf
Run Code Online (Sandbox Code Playgroud)


小智 21

2022 年 1 月更新:

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

sudo killall nginx
Run Code Online (Sandbox Code Playgroud)

然后:

sudo nginx
Run Code Online (Sandbox Code Playgroud)

或者:

sudo service nginx start
Run Code Online (Sandbox Code Playgroud)


Pro*_*ton 20

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

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

无法Nginx启动是因为Apache已经在侦听端口 80 作为其默认端口,这也是Nginx.

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

systemctl stop apache2
systemctl status apache2
Run Code Online (Sandbox Code Playgroud)

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

systemctl stop nginx
systemctl status nginx
Run Code Online (Sandbox Code Playgroud)

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

这是我修复它的方法

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

sudo nano /etc/nginx/sites-available/default
Run Code Online (Sandbox Code Playgroud)

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

# Default server configuration
#
server {
       listen 85 default_server;
       listen [::]:85 default_server;
Run Code Online (Sandbox Code Playgroud)

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

# 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;
Run Code Online (Sandbox Code Playgroud)

然后按键盘上的保存退出文件:

Ctrl + S
Ctrl + X
Run Code Online (Sandbox Code Playgroud)

系统可能仍会提示您按键盘上的Y键以保存更改。

最后,确认您的配置正确并重启Nginx服务器:

sudo nginx -t
sudo systemctl restart nginx
Run Code Online (Sandbox Code Playgroud)

您现在可以在浏览器上导航到localhost:nginx-port( localhost:85) 以确认更改。

显示默认的 Nginx 起始页面

如果您希望在浏览器上导航到localhost:nginx-port( localhost:85)时显示默认的 Nginx 起始页,请执行以下步骤:

检查作为两者/var/www/html/默认root目录的目录ApacheNginx列出其内容:

cd ~
ls /var/www/html/
Run Code Online (Sandbox Code Playgroud)

您将在目录中列出 2 个文件:

index.html                # Apache default start page
index.nginx-debian.html   # Nginx default start page
Run Code Online (Sandbox Code Playgroud)

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

cd ~
sudo nano /etc/nginx/sites-available/default
Run Code Online (Sandbox Code Playgroud)

更改根目录中索引文件的顺序:

root /var/www/html;

        # Add index.php to the list if you are using PHP
        index index.html index.htm index.nginx-debian.html;
Run Code Online (Sandbox Code Playgroud)

对此(将默认的 Nginx 起始页面index.nginx-debian.html放在 之后的第二个位置index):

root /var/www/html;

        # Add index.php to the list if you are using PHP
        index index.nginx-debian.html index.html index.htm;
Run Code Online (Sandbox Code Playgroud)

然后按键盘上的保存退出文件:

Ctrl + S
Ctrl + X
Run Code Online (Sandbox Code Playgroud)

系统可能仍会提示您按键盘上的Y键以保存更改。

最后,确认您的配置正确并重启Nginx服务器:

sudo nginx -t
sudo systemctl restart nginx
Run Code Online (Sandbox Code Playgroud)

您现在可以在浏览器上导航到localhost:nginx-port( localhost:85) 以确认更改。

就这样。

我希望这有帮助

  • 我不知道,但由于某种原因安装了 apache。我没有安装它。它可能是我正在开发的 VPS 附带的,所以我忽略了这个答案并遵循了所有其他答案,最后尝试了这个,非常感谢你。现在,我可以睡觉了。 (2认同)

小智 19

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

sudo /etc/init.d/apache2 stop
sudo systemctl restart nginx
Run Code Online (Sandbox Code Playgroud)


its*_*lay 15

尝试使用命令调试:

$ service nginx configtest
Run Code Online (Sandbox Code Playgroud)

哪个输出如下:

Testing nginx configuration: nginx: [emerg] unknown directive "stub_status" in /etc/nginx/sites-enabled/nginx_status:11
nginx: configuration file /etc/nginx/nginx.conf test failed
Run Code Online (Sandbox Code Playgroud)

并修复这些警告

然后重启nginx

  • **测试nginx配置:失败!** (24认同)

Dee*_* Kr 10

  • 使用这些命令

    1. sudo 服务 apache2 停止

    2. sudo apt-get 清除 apache2

    3. sudo apt-get 更新

    4. sudo apt-get 安装 nginx

    5. sudo 服务 nginx 重新启动


小智 7

好吧,这可能有点晚了,但这里是……我观察到 AWS 上的新实例已经安装了 Apache2,并且与 Nginx 一样使用端口 80。我遇到了这个问题。我就是这样解决的。

我先删除了apache服务,然后重新启动了nginx服务。

 sudo apt install nginx -y
 sudo ufw allow 'Nginx HTTP'
 sudo ufw allow OpenSSH
 sudo ufw enable
 sudo systemctl start nginx
 sudo service apache2 stop
 sudo apt-get purge apache2 apache2-utils apache2-bin apache2.2-common -y
 sudo apt-get autoremove
 sudo rm -rf /etc/apache2
 sudo systemctl restart nginx
Run Code Online (Sandbox Code Playgroud)


Dan*_* W. 6

当某些内容无法绑定到端口时,该百分比为5%,因为它不是由root(粘性suid位,sudo)启动的;为94%,因为另一个应用程序已绑定至该端口。

确保nginx确实已关闭,并且您不要尝试意外启动两次。

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

利用netstat -a | grep tcp更多信息。


小智 6

$ ps ax | grep nginx<br>
$ kill -9 PIDs
$ service nginx start
Run Code Online (Sandbox Code Playgroud)



或向后退/etc/nginx/sites-available/default

location / {
     # 首先尝试将请求作为文件提供服务,然后
     # 作为目录提供服务,然后回退到显示 404。

     try_files $uri $uri/ =404;
}


Hoa*_*inh 6

对于我的情况,我需要运行

sudo nginx -t
Run Code Online (Sandbox Code Playgroud)

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

然后你需要去/etc/nginx/sites-available修复损坏的配置。

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

sudo systemctl restart nginx
Run Code Online (Sandbox Code Playgroud)


小智 6

这对我有用

sudo fuser -k 80/tcp

sudo fuser -k 443/tcp
Run Code Online (Sandbox Code Playgroud)

然后

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

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


sudo systemctl restart nginx
Run Code Online (Sandbox Code Playgroud)


小智 6

原来我在sites-enabled 下有一个文件,我忘记了unlink,但它在sites-available 中的相应文件已不存在。如果有这样的文件,删除它并运行;

sudo service nginx restart
Run Code Online (Sandbox Code Playgroud)

要取消链接文件,请使用;

sudo unlink /etc/nginx/sites-enabled/file-name
Run Code Online (Sandbox Code Playgroud)


dus*_*ant 5

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

vi /etc/nginx/sites-available/default
Run Code Online (Sandbox Code Playgroud)

更改端口:

listen 8080 default_server;
listen [::]:8080 default_server;
Run Code Online (Sandbox Code Playgroud)

然后重启nginx服务器

nginx -t
service nginx restart
Run Code Online (Sandbox Code Playgroud)


use*_*795 4

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

User www-data;
Run Code Online (Sandbox Code Playgroud)