当我运行 # /etc/init.d/apache2 restart 时,它高兴地声称已启动该程序,但实际上并未启动。输出内容如下。
www ~#/etc/init.d/apache2 重启
* 停止 apache2... [2009 年 10 月 25 日星期日 23:50:38] [警告] /etc/apache2/vhosts.d/30_subversion_ssl_vhost.conf 第 63 行中 AllowOverride 的使用毫无用处。 [2009 年 10 月 25 日星期日 23:50:38] [警告] NameVirtualHost --removed--:443 没有 VirtualHosts [2009 年 10 月 25 日星期日 23:50:38] [警告] NameVirtualHost --removed1--:8443 没有 VirtualHosts httpd(无 pid 文件)未运行 [ ok ] * 启动 apache2... [2009 年 10 月 25 日星期日 23:50:38] [警告] /et 第 63 行中 AllowOverride 的使用毫无意义 c/apache2/vhosts.d/30_subversion_ssl_vhost.conf。 [2009 年 10 月 25 日星期日 23:50:38] [警告] NameVirtualHost --removed--:443 没有 VirtualHosts [2009 年 10 月 25 日星期日 23:50:38] [警告] NameVirtualHost --removed1--:8443 没有 VirtualHosts [ 好的 ]
如您所见,尽管声称之前已启动,但 httpd 进程从未运行过,这里再次出现这种情况。手动验证,/var/run/apache2/apache2.pid 不存在。在我手动添加和更改所有者之前,run/apache2/ 目录甚至不存在。/var/log/apache2/error_log 中没有附加任何内容,我的任何虚拟主机的任何域特定日志中也没有附加任何内容。
但是,使用 --verbose 和 --debug 选项运行时,它似乎挂在涉及位置 /var/run/apache2/apache2.pid 的 for 循环中
+ i=0
+ '[' '!' -e /var/run/apache2.pid ']'
+ '[' 0 -lt 10 ']'
+ sleep 1
++ expr 0 + 1
+ i=1
+ '[' '!' -e /var/run/apache2.pid ']'
+ '[' 1 -lt 10 ']'
+ sleep 1
++ expr 1 + 1
...
我在最新版本的 Gentoo Linux 上运行 apache 2.2。vhosts.d 配置文件已从以前的设置导入,但 httpd.conf 和相关文件都是全新的。
编辑:经过进一步调查,apache2 init 脚本调用
/usr/sbin/apache2 -D DEFAULT_VHOST -D INFO -D SSL -D SSL_DEFAULT_VHOST \如果我删除 -D SSL 部分,pid 可以自行创建...但是,我想要 ssl...有什么想法吗?
-D LANGUAGE -d /usr/lib/apache2 -f /etc/apache2/httpd.conf -k 启动
编辑2:
start() {
checkconfig || return 1
[ -f /var/log/apache2/ssl_scache ] && rm /var/log/apache2/ssl_scache
ebegin "Starting ${SVCNAME}"
${APACHE2} ${APACHE2_OPTS} -k start
i=0
while [ ! -e "${PIDFILE}" ] && [ $i -lt ${TIMEOUT} ]; do
sleep 1 && i=$(expr $i + 1)
done
test $i -le ${TIMEOUT}
eend $?
}
如果这提供了任何进一步的见解,请告诉我
编辑3:
如果我在我的 ssl vhosts 中注释掉SSLEngine on
,apache 就能成功启动......
编辑4:
看看我的 apache 构建选项
www ~#emerge-av apache 这些是将要合并的软件包,顺序如下: 计算依赖关系|...完成! [ebuild R ] www-servers/apache-2.2.11-r2 USE="sni ssl -debug -doc -ldap (-s elinux) -static -suexec -threads” APACHE2_MODULES="actions 别名 asis auth_diges t authz_host 自动索引缓存 dav deflate dir env 过期过滤器标头包括 信息 log_config logio mime 协商代理重写 setenvif 拼写状态使用 rdir 用户轨道 -auth_basic -authn_alias -authn_anon -authn_dbd -authn_dbm -authn _默认-authn_file-authz_dbm-authz_default-authz_groupfile-authz_owner-au thz_user-cern_meta-charset_lite-dav_fs-dav_lock-dbd-disk_cache-dumpio-ex t_filter-file_cache-ident-imagemap-log_forensic-mem_cache-mime_magic-prox y_ajp-proxy_balancer-proxy_connect-proxy_ftp-proxy_http-substitute-unique_ id -version-vhost_alias” APACHE2_MPMS="-event-itk-peruser-prefork-worker" 0 KB 总计:1 个包(1 个重新安装),下载大小:0 kB 您想合并这些包吗?[是/否]
并验证校验和
www ~#equery 检查 apache [检查 www-servers/apache-2.2.11-r2] !!! /etc/apache2/vhosts.d/00_default_vhost.conf 的 md5sum 不正确 !!! /etc/conf.d/apache2 的 md5sum 不正确 !!! /etc/apache2/vhosts.d/00_default_ssl_vhost.conf 的 md5sum 不正确 * 406 个文件中 403 个正确
编辑5:
哇!编辑 5!
将相应行更改/etc/conf.d/apache2
为
APACHE2_OPTS="-X -e debug -D DEFAULT_VHOST -D INFO -D SSL -D SSL_DEFAULT_VHOST -D LANGUAGE -D PHP5
* 启动 apache2... [2009 年 10 月 27 日星期二 23:15:19] [调试] mod_so.c(246): 已加载模块actions_module [2009 年 10 月 27 日星期二 23:15:19] [调试] mod_so.c(246): 已加载模块 alias_module [2009 年 10 月 27 日星期二 23:15:19] [调试] mod_so.c(246): 已加载模块 asis_module [2009 年 10 月 27 日星期二 23:15:19] [调试] mod_so.c(246): 已加载模块 authz_host_modul 埃 [2009 年 10 月 27 日星期二 23:15:19] [调试] mod_so.c(246): 已加载模块 autoindex_module [2009 年 10 月 27 日星期二 23:15:19] [调试] mod_so.c(246): 已加载模块 cgi_module [2009 年 10 月 27 日星期二 23:15:19] [调试] mod_so.c(246): 已加载模块 deflate_module [2009 年 10 月 27 日星期二 23:15:19] [调试] mod_so.c(246): 已加载模块 dir_module [2009 年 10 月 27 日星期二 23:15:19] [调试] mod_so.c(246): 已加载模块 env_module [2009 年 10 月 27 日星期二 23:15:19] [调试] mod_so.c(246): 已加载模块 expires_module [2009 年 10 月 27 日星期二 23:15:19] [调试] mod_so.c(246): 已加载模块 filter_module [2009 年 10 月 27 日星期二 23:15:19] [调试] mod_so.c(246): 已加载模块 headers_module [2009 年 10 月 27 日星期二 23:15:19] [调试] mod_so.c(246): 已加载模块 include_module [2009 年 10 月 27 日星期二 23:15:19] [调试] mod_so.c(246): 已加载模块 info_module [2009 年 10 月 27 日星期二 23:15:19] [调试] mod_so.c(246): 已加载模块 log_config_modul 埃 [2009 年 10 月 27 日星期二 23:15:19] [调试] mod_so.c(246): 已加载模块 logio_module [2009 年 10 月 27 日星期二 23:15:19] [调试] mod_so.c(246): 已加载模块 mime_module [2009 年 10 月 27 日星期二 23:15:19] [调试] mod_so.c(246): 已加载模块 negotiation_modu 乐 [2009 年 10 月 27 日星期二 23:15:19] [调试] mod_so.c(246): 已加载模块 rewrite_module [2009 年 10 月 27 日星期二 23:15:19] [调试] mod_so.c(246): 已加载模块 setenvif_module [2009 年 10 月 27 日星期二 23:15:19] [调试] mod_so.c(246): 已加载模块 speling_module [2009 年 10 月 27 日星期二 23:15:19] [调试] mod_so.c(246): 已加载模块 ssl_module [2009 年 10 月 27 日星期二 23:15:19] [调试] mod_so.c(246): 已加载模块 usertrack_module [2009 年 10 月 27 日星期二 23:15:19] [调试] mod_so.c(246): 已加载模块 php5_mod [ 正常 ]
还没有提示。另外,不确定如何验证 SSL 配置,如果这确实是问题所在
答案1
嗯,我对配置文件很怀疑
/etc/apache2/vhosts.d/30_subversion_ssl_vhost.conf
当您删除“-D SSL”时,将导致跳过包含在 ... 中的配置文件的所有部分。我的 Gentoo 框上的默认 SSL vhost 文件包含在该标记中,因此我想知道,通过删除“-D SSL”,您是否会阻止 30_subversion_ssl_vhost.conf 中的配置运行,以及这是否是允许 Apache 启动的原因。
如果您暂时从 /etc/apache2/vhosts.d 中删除文件 30_subversion_ssl_vhost.conf,Apache 还能运行吗?vhosts.d 中还有其他与 SSL 相关的 vhost.conf 文件吗?我刚刚安装的/未使用过的 Apache 的 vhosts.d 目录如下所示:
# pwd && ls
/etc/apache2/vhosts.d
00_default_ssl_vhost.conf 00_default_vhost.conf default_vhost.include
编辑1:
理论就到此为止 :) 我现在想知道问题是否出在 Apache SSL 设置本身。如果我涉及您已经检查过的内容,我深表歉意,但我想知道您是否可以执行以下操作来帮助验证您的 Apache 安装。
在我安装的 Apache 上使用有效的 SSL 时,使用标志如下:
# emerge -av apache
These are the packages that would be merged, in order:
Calculating dependencies... done!
[ebuild U ] www-servers/apache-2.2.11-r2 [2.2.11] USE="ssl -debug -doc -ldap (-selinux) -sni -static -suexec -threads" APACHE2_MODULES="actions alias auth_basic authn_alias authn_anon authn_dbm authn_default authn_file authz_dbm authz_default authz_groupfile authz_host authz_owner authz_user autoindex cache dav dav_fs dav_lock deflate dir disk_cache env expires ext_filter file_cache filter headers include info log_config logio mem_cache mime mime_magic negotiation rewrite setenvif speling status unique_id userdir usertrack vhost_alias -asis -auth_digest -authn_dbd -cern_meta -charset_lite -dbd -dumpio -ident -imagemap -log_forensic -proxy -proxy_ajp -proxy_balancer -proxy_connect -proxy_ftp -proxy_http -substitute -version" APACHE2_MPMS="-event -itk -peruser -prefork -worker" 64 kB
具体来说,您是否设置了“ssl”USE 标志?
另外,您可以使用 equery 来验证 apache2 安装的完整性吗?如果您没有 equery 命令,您可以通过运行“emerge -av gentoolkit”来安装它。以下命令应可验证 apache 安装的完整性:
equery check apache
在我的服务器上,上述命令给出以下输出:
[ Checking www-servers/apache-2.2.11 ]
!!! /etc/apache2/vhosts.d/00_default_ssl_vhost.conf has wrong mtime (is 1256620928, should be 1246793824)
!!! /etc/apache2/modules.d/00_default_settings.conf has wrong mtime (is 1246796304, should be 1246793824)
!!! /etc/conf.d/apache2 has incorrect md5sum
* 429 out of 432 files good
编辑2:
嗯,安装对我来说看起来不错,理论 2 就这么多。我想知道我们是否可以诱导 Apache 在启动时提供更多信息。在 /etc/conf.d/apache2 中,如果您将 APACHE2_OPTS 行从:
APACHE2_OPTS="-D DEFAULT_VHOST -D INFO -D SSL -D SSL_DEFAULT_VHOST -D LANGUAGE"
到
APACHE2_OPTS="-X -e debug -D DEFAULT_VHOST -D INFO -D SSL -D SSL_DEFAULT_VHOST -D LANGUAGE"
然后启动 Apache (/etc/init.d/apache2 start),守护进程应该停留在前台 (-X 标志) 并在启动时输出调试消息 (-e debug 选项)。这也许会给出它在启动时死机的原因的线索。
答案2
该脚本正在访问 /var/run/apache2.pid,而不是 /var/run/apache2/apache2.pid。您能检查一下 /var/run/apache2.pid 是否具有正确的权限吗?
答案3
不知何故,在创建了自己的 .crt 和 .key 文件后,尝试了一个emerge mod_ssl
,最终做了一堆事情,并再次重建了 apache,一切都不知何故变得井然有序。我无法解释,除了可能与我创建 .crt 和 .key 文件的方式之前存在一些不一致之处 :/
这次旅程让我感到空虚和不满足。好吧,除了你们的帮助 :] 谢谢大家。