如何使用两个不同版本的openssl使httpd工作

时间:2012-03-13 14:02:36

标签: linux lamp apache

我的操作系统是CentOS 6.2。 我需要使用php 5.2.4,这取决于openssl 0.9.8e。但openssl 1.0.x随OS一起提供。 所以我建立了openssl 0.9.8e。 现在我的操作系统上有openssl 0.9.8e和​​php 5.2.4。 /opt/php5.2.4/ /opt/openssl0.9.8e /

php cli运行正常,但是当我用apache使用php时。 Httpd无法启动。 Httpd是从CentOS存储库安装的。

问题似乎是 - Httpd使用了libmysql.so,它依赖于openssl 1.0.x. Httpd还使用了libphp5.so,它取决于openssl 0.9.8e。

如何让它们一起工作?

1 个答案:

答案 0 :(得分:0)

  1. 当符号表对全局命名空间(即标准DT_NEEDED机制或使用带有RTLD_GLOBAL的dlopen)有贡献时,您无法在单个进程中可靠地混合不同版本的库这一事实。这意味着你要么必须让你的httpd部分(包括sql)使用openssl 0.8,要么让php使用1.0。鉴于openssl从那时起变化不大,后者应该不会特别难。
  2. 或者,您可以在FastCGI模式下运行PHP。这也允许使用例如apache2-event而不是你们的prefork-er。有一些方法可以解决这个问题(选择守护进程和apache模块) - 开箱即用的是php-fpm-5.3.3 +和apache-2.4 +的mod_proxy_fcgi。