Gun*_*nes 73 virtualization apache2 12.04
我正在尝试设置运行 Ubuntu 12.04 的 VM。我有两个使用端口 80 配置的虚拟主机,但 Apache 无法启动。
我收到此错误:
(98) Address already in use: make_sock: could not bind to address 0.0.0.0:80
的输出netstat -tulpn
显示没有使用端口 80。可能是什么原因导致的?
小智 47
确保您没有Listen 80
在 .conf 文件中声明两次。
例如,您可能同时拥有 inports.conf
和 inn sites-enabled/www.conf
。
要找出答案,请使用: grep -ri listen /etc/apache2
请Listen 80
在短短的一个地方。
Ano*_*pus 35
回答我解决这个问题的方式。将来可能对某人有帮助。
尝试 netstat -ltnp | grep :80
这将返回类似
tcp6 0 0 :::80 :::* 听 1047/apache2
然后运行
sudo kill -9 1047
Run Code Online (Sandbox Code Playgroud)
其中 1047 是运行在 80 端口上的程序的 pid。您可以替换您从中获取的 pid netstat
小智 17
我有一个 Nginx 服务器在我的 AWS EC2 服务器上侦听,我认为它是在我构建 EC2 时配置的,因此我收到地址已经在使用错误。所以我停止了服务并启动了Apache2服务:
sudo service nginx stop
sudo service apache2 start
Run Code Online (Sandbox Code Playgroud)
Eri*_*ski 14
启动 apache2 Ubuntu 12.10 时,我在全新安装时遇到此错误。
这是apache2中的一个错误。它被挂在后台。这是我对软件中可能存在错误的位置的演练。
这是我得到的错误:
el@titan:~$ sudo service apache2 start
* Starting web server apache2
(98)Address already in use: make_sock: could not bind to address 0.0.0.0:80
no listening sockets available, shutting down
Unable to open logs
Action 'start' failed.
The Apache error log may have more information.
[fail]
Run Code Online (Sandbox Code Playgroud)
地址已在使用中?什么可以使用它?一探究竟:
el@titan:~$ grep -ri listen /etc/apache2
/etc/apache2/apache2.conf:# supposed to determine listening ports for incoming connections, and which
/etc/apache2/apache2.conf:# Include list of ports to listen on and which to use for name based vhosts
/etc/apache2/ports.conf:Listen 80
/etc/apache2/ports.conf: Listen 443
/etc/apache2/ports.conf: Listen 443
Run Code Online (Sandbox Code Playgroud)
这意味着 apache2 正在阻止 apache2 启动。奇怪。这将确认:
el@titan:~$ ps -ef | grep apache2
root 1146 954 0 15:51 ? 00:00:00 /bin/sh /etc/rc2.d/S91apache2 start
root 1172 1146 0 15:51 ? 00:00:00 /bin/sh /usr/sbin/apache2ctl start
root 1181 1172 0 15:51 ? 00:00:00 /usr/sbin/apache2 -k start
root 1193 1181 0 15:51 ? 00:00:00 /bin/bash /usr/share/apache2/ask-for-passphrase 127.0.1.1:443 RSA
el 5439 5326 0 16:23 pts/2 00:00:00 grep --color=auto apache2
Run Code Online (Sandbox Code Playgroud)
是的,在这种情况下 apache2 正在运行,我试图在同一端口上第二次启动 apache2。
让我感到困惑的是,service
报告说 apache2 没有运行:
el@titan:~$ sudo service apache2 status
Apache2 is NOT running.
Run Code Online (Sandbox Code Playgroud)
当您查询 apache2ctl 的状态时,它会挂起。
root@titan:~# /usr/sbin/apache2ctl status
**hangs until Ctrl-C is pressed.
Run Code Online (Sandbox Code Playgroud)
所以 Ubuntu 似乎在启动时管理 apache2 有问题。停止 apache2 的时间:
root@titan:~# /usr/sbin/apache2ctl stop
httpd (no pid file) not running
Run Code Online (Sandbox Code Playgroud)
一个大线索!您尝试停止 apache2 并且它丢失了进程 ID!所以Ubuntu无法阻止apache2,因为它不知道它在哪里!
您会认为重新启动会修复它,但事实并非如此,因为 apache2 在启动时启动并挂起。apache2 的正常启动过程无法正常工作。
我能够通过分析ps
命令输出来解决这个问题。请注意,该ps
命令告诉我们该进程是由“/etc/rc2.d/S91apache2 start”启动的。
这是需要快速启动的违规程序。
/etc/rc2.d/S91apache2
是用于在计算机启动时为您启动 apache2 的符号链接。出于某种原因,它似乎正在启动 apache2 然后挂起。所以我们必须告诉它不要那样做。
所以去看看那个/etc/rc2.d/S91apache2
。
el@titan:/etc/rc2.d$ ls -l
lrwxrwxrwx 1 root root 17 Nov 7 21:45 S91apache2 -> ../init.d/apache2*
Run Code Online (Sandbox Code Playgroud)
这是一个符号链接,我们不希望它出现在那里。这样做是为了防止 apache2 在启动时启动:
root@titan:~# sudo update-rc.d -f apache2 remove
Removing any system startup links for /etc/init.d/apache2 ...
/etc/rc0.d/K09apache2
/etc/rc1.d/K09apache2
/etc/rc2.d/S91apache2
/etc/rc3.d/S91apache2
/etc/rc4.d/S91apache2
/etc/rc5.d/S91apache2
/etc/rc6.d/K09apache2
Run Code Online (Sandbox Code Playgroud)
重新启动计算机以确保 apache2 不会启动并挂起。好的。现在您可以将 apache2 恢复原状,但这会使其再次失败。
root@titan:~$ sudo update-rc.d apache2 defaults //(don't do this)
Adding system startup for /etc/init.d/apache2 ...
/etc/rc0.d/K20apache2 -> ../init.d/apache2
/etc/rc1.d/K20apache2 -> ../init.d/apache2
/etc/rc6.d/K20apache2 -> ../init.d/apache2
/etc/rc2.d/S20apache2 -> ../init.d/apache2
/etc/rc3.d/S20apache2 -> ../init.d/apache2
/etc/rc4.d/S20apache2 -> ../init.d/apache2
/etc/rc5.d/S20apache2 -> ../init.d/apache2
Run Code Online (Sandbox Code Playgroud)
相反,像这样启动 apache2:
sudo service apache2 start
Run Code Online (Sandbox Code Playgroud)
并且 apache2 已备份并再次提供页面。apache2/Ubuntu 12.10 似乎存在一些导致 apache2 启动和挂起的严重错误。这是一种解决方法,我想解决方法是获取较新版本的 apache2 和 Ubuntu,并希望获得最好的结果。
小智 13
当我遇到这个问题时,原来是因为我的 Apache 无法在启动时启动,因为我有一个 SSL 站点,需要为证书输入密码。
判断您是否属于这种情况的一个好方法是运行ps -ef | grep apache
: 如果这返回的进程看起来像/bin/bash /usr/share/apache2/ask-for-passphrase mysite.com:443 RSA
那么它正在等待在您永远不会看到的终端中输入密码。
首先,我杀死了挂起的进程(向kill -HUP
/usr/sbin/apache2 进程的进程 ID发送 a应该足以杀死其他进程,但ps -ef | grep apache
要确保再做一次)。
然后我按照这篇文章中的说明创建了一个不需要输入密码的 SSL 密码文件。然后service apache2 start
工作正常,Apache 在重新启动后正常启动。
我已经弄清楚了。我的 httpd.conf 和 ports.conf 中都有重复的 Listen 80 命令
另外,在复制正在虚拟化的服务器的配置文件时,我忽略了错误日志目录已更改。查看该错误日志,我注意到mime.types
我的文件中配置文件的目录不正确httpd.conf
。我更新了该参数,服务器启动正常。
归档时间: |
|
查看次数: |
278774 次 |
最近记录: |