有需要服务器方面的需求和咨询,可以联系博主 QQ 7271895
一个2014年初上线的项目,要升级https,记录一下。
一共有三台WEB服务器,进入 apache/modules 查看是否有 mod_ssl.so。
两台服务器正常,一台缺失,于是需要动态编译。
官网下载httpd2.4.6(这里需要./httpd -v 查看一下当前版本号),解压缩,进入源码 /modules/ssl/ 目录
cd /usr/local/src/httpd-2.4.6/modules/ssl/
然后执行下面的动态编译命令
当前apahce的路径/bin/apxs -i -c -a -D HAVE_OPENSSL=1 -I /usr/include/openssl -lcrypto -lssl -ldl *.c
此处遇到了第一个坑:报错 /usr/bin/ld: cannot find -lcrypto
搜素一番后,是 /usr/lib64/libssl.so
和 /usr/lib64/libcrypto.so
没有建立软连接。但是搜索出来的解决方案的路径不对,于是参考另外两台服务器
ln -s /lib64/libssl.so.0.9.8e /usr/lib64/libssl.so
ln -s /lib64/libcrypto.so.0.9.8e /usr/lib64/libcrypto.so
使用上面方式建立软链接。
然后再次编译,提示成功了。
但是在httpd restart的时候碰到了第二个坑。
再次报错:mod_ssl.so: undefined symbol: SSL_get_srp_userinfo
搜索一番了解到是 openssl 版本太高。
这才想起来,之前我更新过一次openssl,现在的版本不是 0.9.8e了。
于是 找到现在的openssl对应lib目录 /usr/local/ssl/lib/libcrypto.so.1.0.0
删除现有的链接,重新链接为新的。
rm -rf /usr/lib64/libssl.so
rm -rf usr/lib64/libcrypto.so
ln -s /usr/local/ssl/lib/libssl.so.1.0.0 /usr/lib64/libssl.so
ln -s /usr/local/ssl/lib/libcrypto.so.1.0.0 /usr/lib64/libcrypto.so
于是重新编译apahce,再次重启能够成功了。
在配置https配置文件的过程中,记得要监听443端口并且设置好防火墙规则。
Listen 0.0.0.0:443
Listen [::]:443
其他的配置文件就按照网上的参考就行了。
如果有不懂的、欢迎加入我们学派吧。一起学习交流。右上角站长群