Wampserver2.1升级apache2.2.34时遇到的坑
起由
最近开发微信小程序,微信要求必须使用HTTPS,而ios则要求app的TLS版本必须至少为1.2。
服务器之前用的wamp搭建的网站,用的是wamp2.1,自带的apache版本为2.2.17,已经搭建好了HTTPS,不过经过查看之后发现,是TLS1.0。于是打算进行配置。
如何查看一个网站的TLS版本:
使用Chrome打开该网站,按F12打开开发者工具,点击“Security”标签,在“Overview”或者“Secure origins”里可以看到类似TLS1.0字样,即为TLS的版本。
遇到的坑1
通过查询,知道apache中配置使用TLS1.2的方式是,在conf文件中配置
SSLProtocol all -SSLv2 -SSLv3
但是配置之后没有生效。又改了下配置
SSLProtocol TLS1.2
重启apache后,报错说找不到“TLS1.2”。
于是继续查,看到有网友说,apache2.2.23及之后的版本才支持TLS1.2,我的版本为2.2.17,过低。于是,只能升级apache。
下载Apache2.2.34
2.2.34是apache2.2.*的最后一个版本,之所以不直接升2.4是怕与php或mysql不兼容。
我是从CSDN上下载的:https://download.csdn.net/download/zxczxc123123/9957812
升级apache
wamp下升级apache还算比较简单。把下载下来的apache2.2.34解压到 wamp\bin\apache下,比如是 wamp\bin\apache\Apache2.2.34。
打开wamp\wampmanager.conf文件,将原来文件中的
[apache] apacheVersion = "2.2.17" apacheLastKnown = 2.2.17
改成
[apache] apacheVersion = "2.2.34" apacheLastKnown = 2.2.34
因为我是把httpd.exe注册为服务,所以需要把原先的服务注销掉。
打开cmd,进入原先的apache的bin目录,执行以下命令以注销apache服务
httpd.exe -k stop httpd.exe -k uninstall
然后进入新的apache的bin目录,执行以下命令以注册apache服务
httpd.exe -k install
至此,apache就升级完毕了。
遇到的坑2
把原apache里的httpd.conf文件复制到新的apache里,
输入
httpd.exe -k start
启动。顺利启动,没有报错。
但是此时,使用IP或http域名可以访问原来的网站,但是https却无法访问。
找了半天才发现,httpd.conf文件里面有一行(一般在非注释的第一行)
ServerRoot "c:/wamp/bin/apache/apache2.2.17"
因为我是用旧文件覆盖的,所以这里指向了2.2.17这个目录,以下apache加载module和conf都是在这个根目录下,可能是2.2.17的https.so不兼容2.2.34,所以导致https无法使用。
于是,把这个ServerRoot重新指向到2.2.34目录下,重启apache
httpd.exe -k restart
此时再用Https域名访问,可以顺利访问,且查看TLS版本,已经是1.2了。配置文件里并没有修改,所以应该是apache2.2.34默认就是使用TLS1.2。
遇到的坑3
有个网站需要访问mysql,结果发现访问不了了。
排查之后才发现,新的apache里的php没有开启mysql扩展,具体操作如下:
将原先的 Apache2.2.17\bin\php.ini 文件,复制到 Apache2.2.34\bin\php.ini 下。如果原先已经启用的mysql,则不用做任何修改。如果没有启用,则找到
;extension=php_mysql.dll ;extension=php_mysqli.dll
将前面的分号“;”删掉(这是php.ini里的注释符号),保存,重启apache,此时,php就可以顺利连接mysql了。
遇到的坑4
又遇到一个问题,php的curl扩展无法加载了。这个问题应该是在2.2.17版本已经遇到过并解决了的,这里升级了apache之后问题又出现了。
经过排查,是缺少了一些dll文件。
\Apache2.2.34\bin 目录下已经包含了以下文件
libeay32.dll zlib1.dll ssleay32.dll
还缺少一个文件
libssh2.dll
从原apache的bin目录下找到这个文件,复制到新目录下,重启apache,则可以启用curl模块。
一些小结
- 升级wamp这类好几个程序组成的系统,需要尽可能的保证各个程序之间的兼容性,原则上,只升级到能满足要求的最低版本,能最大限度的减少遇到兼容性的问题。
- 遇到出错时,多看看程序的报错信息,并在网络上查询相关信息。
- 升级成功之前,要完整保留旧程序,以便可以随时回滚。