Apache2放开virtualhost,wamp启动apache服务失败

安装包:wamp5_1.7.4,apache设置非80端口的虚拟主机:Error in my_thread_global_end(): 1 threads didn’t exit

背景

这个问题我百度的时候,发现2013年就有小伙伴发帖问过,但是给出的答案并不对路。我自己在解决的时候也搞了好几个小时,光是修改:httpd、httpd-vhosts、host反反复复不下20次。当然,这里边有自己对虚拟主机设置概念不够清晰的缘故,但也说明某一wamp下的apache是存在一些特殊性的,网上提供的通用方案没法直接解决我机器上的问题。所以我决定把自己的经历写下来,给有需要的小伙伴提供参考,少走弯路。

目的

我的80端口被IIS服务占用,wamp启动不了,于是我决定用8080端口。所以有了:
httpd下的:
Listen 8080
#这里插一句,我一开始不确定apache是否可以监听多个端口,看各个文章给出的方案反复注释、放开Listen 80好多次。其实可以监听多个的。
重启之后,wamp服务正常。但这还不是最终目的,最终目的我是想通过域名来访问本地代码。于是就开始一晚上的折腾。(捂脸哭)

第一次尝试

按一般思路配置完httpd、httpd-vhosts、host,然后重启wamp,嗯……结果就是apache死活起不来。
我盯上了apache_error.log。日志一开始是2、3个线程不存在,后面几经折腾变成了:
Error in my_thread_global_end(): 1 threads didn't exit
完整的日志片段如下:
[Wed Sep 25 23:38:05 2019] [notice] Apache/2.2.6 (Win32) PHP/5.2.5 configured – resuming normal operations
[Wed Sep 25 23:38:05 2019] [notice] Server built: Sep 5 2007 08:58:56
[Wed Sep 25 23:38:05 2019] [notice] Parent: Created child process 9372
[Wed Sep 25 23:38:06 2019] [notice] Child 9372: Child process is running
[Wed Sep 25 23:38:06 2019] [notice] Child 9372: Acquired the start mutex.
[Wed Sep 25 23:38:06 2019] [notice] Child 9372: Starting 250 worker threads.
[Wed Sep 25 23:38:06 2019] [notice] Child 9372: Starting thread to listen on port 8080.
[Wed Sep 25 23:38:38 2019] [notice] Parent: Received shutdown signal – Shutting down the server.
[Wed Sep 25 23:38:38 2019] [notice] Child 9372: Exit event signaled. Child process is ending.
[Wed Sep 25 23:38:39 2019] [notice] Child 9372: Released the start mutex
[Wed Sep 25 23:38:40 2019] [notice] Child 9372: Waiting for 250 worker threads to exit.
[Wed Sep 25 23:38:40 2019] [notice] Child 9372: All worker threads have exited.
Error in my_thread_global_end(): 3 threads didn’t exit
[Wed Sep 25 23:38:45 2019] [notice] Child 9372: Child process is exiting
[Wed Sep 25 23:38:45 2019] [notice] Parent: Child process exited successfully.
Error in my_thread_global_end(): 1 threads didn’t exit
于是乎,开始跑偏……
直接拎着:Error in my_thread_global_end(): 1 threads didn’t exit去查解决方案,说是libmysql.dll版本太旧。我照着把bin目录下的,把libmysql.dll复制到了/Windows/system32下,重启不管用。顺着这个思路我还歪到了PHP版本的上:PHP5.2.3好像libmysql.dll不好使,要用PHP5.2.1下的。难道要把PHP5.2.1的libmysql.dll抠过来?后面想了想,不对啊,我现在是apache启动失败,又不是mysql,跟PHP更不搭界了,这个思路肯定不对。

第二次尝试

思路回到apache上来,我开始按本文标题搜索,有很多文章,我也做了诸多修改。最终发现注释掉httpd的virtual hosts,重启apache可以,放开apache死了。
很无奈啊,加了很多内容,然后又注释掉、删掉,已经不确定谁说得对,把痕迹全部改回去也不行(此处可能是忘了继续监听8080),于是选择了重新安装。这次安装直接选好了DocumentRoot:E:/www,安装结束发现和我自己手动改的无二致:
DocumentRoot "E:/www"

#
# This should be changed to whatever you set DocumentRoot to.
#
<Directory "E:/www">
一开始我都没有加<Directory>,只设置了DocumentRoot和ServerName。
寻寻觅觅中,我参考链接:[ https://blog.csdn.net/hughhzh/article/details/89022362 ]把httpd-vhosts改成了:

<VirtualHost *:8080>
    DocumentRoot "E:\www\web"
    <Directory "E:\www\web">
		AllowOverride All
		Require all granted
	</Directory>
	ServerName www.zt.com
</VirtualHost>

然而重启wamp结果还是一样,除非注释掉VirtualHost。

第三次尝试

接下来修改搜索关键词,查询,修改,结果还是一样,都快要放弃了。在一番搜索中找到一个百度知道答主的答案,提醒放开vhost的LoadModule:

LoadModule vhost_alias_module modules/mod_vhost_alias.so

感觉找到了救命稻草,一看我的确实没开启。然而放开后重启,apache还是没起来哈哈哈(干笑)。
(找不到答主问答的链接,本想放出来,以示感谢。)

第四次尝试

看到有文章提到:[http://www.mamicode.com/info-detail-1175963.html ]前面内容对我用处不大,最末提到了

直接在CMD命令框内执行httpd.exe,此时命令框会提示具体的出错原因

确实是个思路,于是我开始执行httpd.exe,这是我机器上打印出来的错误。

在这里插入图片描述
根据第一次执行结果,我把
#ServerName localhost:80
ServerName localhost:8080
改成了:
#ServerName localhost:80
ServerName 192.168.31.143:8080

根据第二次执行结果,我把默认的CustomLog等抄了一遍,执行还是提示上述错误。我又把自带的2个<VirtualHost *:80>都注释掉执行httpd.exe,结果33行不报错了,52行报错33行那个CustomLog错。接着马上把假的主机名:dummy-host2.example.com 都替换成 www.zt.com,如下:

<VirtualHost *:8080>
   ServerAdmin webmaster@www.zt.com
   DocumentRoot "E:\www\web"
    <Directory "E:\www\web">
		AllowOverride All
		Require all granted
	</Directory>
   ServerName www.zt.com
   ErrorLog "logs/www.zt.com-error.log"
   CustomLog "logs/www.zt.com-access.log common"
</VirtualHost>

这下觉得应该能行了,结果一执行httpd.exe,还是:CustomLog takes two or three arguments, a file name, a custom log format string or format name, and an optional “env=” clause (see docs),没办法继续搜索答案。

第五次尝试

到这里,可能已经有小伙伴看到问题了,没错,这个版本默认的common是在引号里面的!于是我把它挪到了外面,执行httpd.exe,果真不再报错啦~
同时参考的文章还提到:

在Apache2今后对权限 和平安有了更高的要求,所以必需手动配置下每一个Directory属性。

依样画葫芦我把<Directory>改了一下:

   <Directory "E:\www\web">
   		Options Indexes FollowSymLinks
   		AllowOverride None 
   		Allow from all
   </Directory>

参考链接:[ http://blog.sina.com.cn/s/blog_a575717001010c44.html ]

把host的localhost:8080 www.zt.com 又改成了:127.0.0.1 www.zt.com
此刻时间已经00:56,这个全白的小图标 真的显得无比可爱。
D盘apache的logs目录下也生成了:
在这里插入图片描述

总结

1.httpd:

监听8080:
Listen 80
Listen 8080
不确定可否多个,我只保留了一个:
#NameVirtualHost *:80
NameVirtualHost *:8080
不确定可否多个,我只保留了一个:
#ServerName localhost:80
ServerName 192.168.31.143:8080
放开
LoadModule vhost_alias_module modules/mod_vhost_alias.so
设置代码根目录:
DocumentRoot "E:/www"

<Directory "E:/www">
放开虚拟主机设置:
#Virtual hosts
Include conf/extra/httpd-vhosts.conf

2.httpd-vhost:

<VirtualHost *:8080>
   ServerAdmin webmaster@www.zt.com
   DocumentRoot "E:\www\web"
    <Directory "E:\www\web">
		Options Indexes FollowSymLinks
   		AllowOverride None 
   		Allow from all
	</Directory>
   ServerName www.zt.com
   ErrorLog "logs/www.zt.com-error.log"
   CustomLog "logs/www.zt.com-access.log" common
</VirtualHost>

3.host:

127.0.0.1 www.zt.com

写在后面

今天和同事聊起说昨晚搞到凌晨一点,他惊讶道:“没有这么复杂的。”
说有一套简易万能的设置,我们版本不一样我不确定是否通用,贴在下面,有需取。区别的地方在于只编辑httpd:

Listen 1000
<VirtualHost *:1000>
	documentroot "你的工作目录1"
</VirtualHost>
Listen 2000
<VirtualHost *:2000>
	documentroot "你的工作目录2"
</VirtualHost>

DocumentRoot "E:/www/"

目录权限:
<Directory "E:/">
	AllowOverride none
	Require all granted
</Directory>
根目录:
<Directory "E:/www/">

他告诉我这个以前的叫法是:多域名访问配置,多端口访问配置。没啥虚拟主机。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值