Wampserver2.1升级apache2.2.34时遇到的坑

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模块。

一些小结

  1. 升级wamp这类好几个程序组成的系统,需要尽可能的保证各个程序之间的兼容性,原则上,只升级到能满足要求的最低版本,能最大限度的减少遇到兼容性的问题。
  2. 遇到出错时,多看看程序的报错信息,并在网络上查询相关信息。
  3. 升级成功之前,要完整保留旧程序,以便可以随时回滚。

Comments are closed.