白白忙活了一个下午+半个早饭的时间。感慨一下, 解决问题的思路很重要啊,否者就会像无头苍蝇同样,处处乱撞。php
因项目关系,须要在测试环境中开启https,悲剧的是,在通过了机器迁移以后,以前可用的https链接失败了:html
而Nginx中也只有寥寥几行的错误日志:linux
这里首先说明一下,Nginx对HTTPs的支持是经过Module ngx_http_ssl_module来实现的。而这须要保证几点:nginx
在确认以上三点无误后,再次将目标锁定到nginx的错误日志上。须要注意的是alert的worker process xxx exit on signal 11,也就是说,nginx的worker进程因为"某种缘由"退出了,对于退出的缘由,却没有丝毫的线索。而"没有线索"偏偏是调试的最大障碍,就比如是你只告诉119起火了,却没有告知事故地址,你让消防队员如何救火?木有core dump,错误日志又一头雾水,各类度娘、谷哥无果…..但,战斗仍是要继续,烽火不会由于你的放弃而中止燃烧。c++
忽然想起来,linux提供了dmesg命令能够查看内核的一些错误信息,果不其然:工具
Libcrypto.so是openssl的动态连接库,这里若是segfault了,致使process exit也就在乎料之中了。post
如今基本清楚了:openssl的Libcrypto.so致使了segfault(或许可能还有其余缘由?),从而引发了进程的异常退出,这与nginx的signal 11进程退出的表现也是基本一致的。原本事情能够很简单的,可是!在这以后,犯了一个及其低级的错误!在检查完openssl, openssl-devel是最新的版本以后,想固然的觉得是以前openssl的安装出现了错误,因而果断卸掉openssl,从新安装,而这也致使以后走了很长时间的弯路。从新安装openssl以后,重启nginx时,出现以下错误:测试
error while loading shared libraries: libcrypto.so.4: cannot open share object ......
又是libcrypto.so的问题!查看nginx引用动态库的映射关系:spa
ldd $(which nginx)
libstdc++.so.6 => /usr/lib64/libstdc++.so.6 (0x000000318ea00000)
libpthread.so.0 => /lib64/libpthread.so.0 (0x000000318b200000)
libcrypt.so.1 => /lib64/libcrypt.so.1 (0x000000317ac00000)
libcrypto.so.4 => 没有找到
根本没有libcrypto.so.4,应该是以前卸载openssl时被干掉了。.net
在http://rpm.pbone.net搜索libcrypto.so.4,发现带该动态的库openssl版本是openssl097a-0.9.7,最新的openssl貌似是不带的。隐约中记得以前的开发机上的openssl没有升级过,果断登上,果真在/lib64/发现了libcrypto.so.4。scp过来以后,再次执行ldd命令,发现nginx已经能够找到libcrypto.so.4了:
ldd $(which nginx)
libstdc++.so.6 => /usr/lib64/libstdc++.so.6 (0x000000318ea00000)
libpthread.so.0 => /lib64/libpthread.so.0 (0x000000318b200000)
libcrypt.so.1 => /lib64/libcrypt.so.1 (0x000000317ac00000)
libcrypto.so.4 => /lib64/libcrypto.so.4 (0x0000003198700000)
再次重启nginx,没有报错了。再次访问https,熟悉的界面终于出来了:
附录:几个用到的命令
1.查看OPenSSL的版本:
Openssl version
2.查看内核的消息:
dmesg
3. rpm包管理工具:
rpm –qa openssl*
4. yum包管理工具
yum install openssl openssl-devel
5. 定位包:
whereis libcrypto.so
locate libcrypto.so
6. 查看nginx依赖的动态库:
ldd $(which nginx)
7. 若是有coredump文件,建议用gdb调试。
8. 若是你的libcrypto.so.4不是这种格式,能够经过创建软链接的形式解决:
ln –s libcrypto.so.0.9.7a libcrypto.so.4
参考文档: