【问题标题】:Starting apache fails (could not bind to address 0.0.0.0:80)启动 apache 失败(无法绑定到地址 0.0.0.0:80)
【发布时间】:2012-04-26 23:15:37
【问题描述】:

更新:已修复,似乎 VirtualHosts 配置文件之一在启用站点时出错。

我有 Ubuntu 11.10

当我运行命令启动 apache2 时:

sudo /etc/init.d/apache2 start

我收到以下错误消息:

启动 web 服务器 apache2
apache2:无法可靠地确定服务器的完全合格 域名,使用 127.0.1.1 作为 ServerName (98)Address 已经在 使用:make_sock:无法绑定到地址 0.0.0.0:80 没有监听 套接字可用,正在关闭 无法打开日志 操作“开始” 失败了。

我运行这个命令是为了获取正在使用端口 80 的进程:

sudo netstat -ltnp | grep ':80'

返回此输出:

tcp6       0      0 :::80                   :::*                    LISTEN      1176/

要知道我运行这个命令是哪个进程:

ps -wlp1176

返回:

F S   UID   PID  PPID  C PRI  NI ADDR SZ WCHAN  TTY          TIME CMD
5 D    33  1176     1  0  80   0 -     0 exit   ?        00:00:00 apache2

但如果我尝试终止进程:

sudo kill -9 1176

它不会杀死它,如果我再次运行 netstat 命令仍然显示正在侦听并且 apache 启动失败。

有什么建议吗?

【问题讨论】:

  • 那么 pid 1176 是什么? (ps -wlp1176)
  • 5 D 33 1176 1 0 80 0 - 0 退出? 00:00:00 apache2
  • 那么,这对你有什么建议吗?提示:与您尝试开始的内容进行比较。
  • 在我看来 apache 它已经在运行,但它不提供页面,它不会停止,也不会启动或重新启动。
  • 我也遇到过类似的情况。 pid 为 1345 的 apache2 进程占用了端口 80,但没有响应任何内容。 kill 1345 杀死了那个进程,然后我可以启动一个新的 apache2 进程。

标签: apache port kill netstat


【解决方案1】:

为我运行此命令工作:

fuser -k -n tcp 80

【讨论】:

  • 在 Debian 4.0.4 中也为我工作。
  • 每次重启实例时都会出现这个错误。你知道如何彻底解决吗?
  • 对于那些没有遇到端口绑定问题并收到 vhost 语法错误的人,您首先要做的是查找 Listen 值。查看 Conflicting Listen directives 部分wiki.apache.org/httpd/CouldNotBindToAddress
  • 这个答案需要解释为什么它真正有用。
【解决方案2】:

可能是skype或者nginx使用80端口。

尝试关闭Skype,或运行:sudo /etc/init.d/nginx stop

【讨论】:

    【解决方案3】:

    我遇到了同样的错误,只是想确认正在运行

        sudo netstat -ltnp | grep ':80'
    

    帮我指出 Hiawatha 网络服务器阻碍了 Apache2。

    删除 Hiawatha 解决了该问题 (sudo dpkg --purge hiawatha)。 Ubuntu 12.04.2 服务器。

    【讨论】:

      【解决方案4】:

      试试这个,它对我有用……

      sudo netstat -ltnp | grep ':80'
      

      这将返回以下内容:

      tcp6 0 0 :::80 :::* LISTEN 1047/apache2
      

      然后

      sudo kill -9 1047
      

      然后我能够重新启动 Apache,一切正常。

      【讨论】:

        【解决方案5】:

        进入设备管理器,从菜单/视图中选择“显示隐藏的设备”,进入“非即插即用驱动程序”/HTTP,双击禁用它(并禁用或手动一些依赖它的服务)。 重新启动并享受!

        【讨论】:

          【解决方案6】:

          我遇到了同样的问题

          对我来说,apache 已经在运行,但运行方式错误。

          杀死进程不起作用,因为一个守护进程不断地重新实例化它。

          apachectl stop   
          

          解决了这个问题。

          【讨论】:

            【解决方案7】:

            这是因为重复安装 apache 或端口被另一个服务使用

            sudo lsof -i | grep "httpd"
            

            您将找到进程 ID 和服务的侦听端口。然后检查

            cd /proc/(process id of http)
            

            然后使用命令杀死该进程

            kill -9 pid
            

            现在

            sudo netstat -nltp
            

            再次杀死进程

            语法:-

            kill -9 pid
            

            现在启动 apache

            sudo ./apachectl start
            

            【讨论】:

              【解决方案8】:

              我要做的只是检查您的 /etc/apache2/sites-available/your-domain-name.com.conf 中是否设置了以下内容

              SSLEngine on 
              SSLCertificateFile /your/path/to/your-domain.com.crt
              SSLCertificateKeyFile /your/path/to/your-domain.com.key
              SSLCACertificateFile /your/path/to/your-domain.com.ca-bundle
              

              并且没有任何输入错误的目录或任何其他不应该出现在您的 .conf 文件中的内容。它对我有用,因为重新启动和终止进程根本没有帮助。无论如何它都没有开始。

              【讨论】:

                【解决方案9】:

                我使用以下程序修复了它。 以 root 用户身份运行以下命令。

                root# ps aux |grep apache
                

                它将向您显示 Apache PID,只需终止该 PID 并重新启动 Apache 服务器。

                【讨论】:

                  【解决方案10】:

                  看起来其他进程正在使用端口 80。

                  $ netstat -anp | grep
                  

                  例如。 $ netstat -anp | grep 80

                  通过上面你得到进程名称,如果你想使用端口那么你需要停止进程或更改端口

                  【讨论】:

                    【解决方案11】:

                    您只能在一个 .conf 文件中监听 PORTNUMBER。不要把它放在多个文件中。试试看:)

                    【讨论】:

                      【解决方案12】:

                      使用任一

                      sudo killall httpd
                      

                      sudo killall apache2
                      

                      检查是否有人使用 80 端口

                      sudo netstat -tulpn| grep :80
                      

                      重启

                      sudo service httpd start
                      

                      然后重启服务器。我花了一整天才明白这个问题

                      【讨论】:

                        猜你喜欢
                        • 2016-11-11
                        • 1970-01-01
                        • 2021-02-12
                        • 2017-01-27
                        • 1970-01-01
                        • 2016-01-01
                        • 2018-12-05
                        • 1970-01-01
                        相关资源
                        最近更新 更多