应用nginx的服务器有很多台
每台的os环境都不一样
而且还有32位的,64位的机器
以前每次升级nginx都很麻烦
一台一台服务器上去重新编译安装
于是,就想单独编译一个供passport使用的nginx独立包
把它依赖的zlib,pcre,openssl等都编译进去
这样,每次升级时,直接scp这个独立包到各服务器上就行了
当然,独立包也需要2个版本,分别对应32位和64位

首先编译各个依赖包,指定--prefix为/opt/nginx下,然后再编译nginx

./configure --prefix=/opt/nginx --with-http_stub_status_module --with-http_ssl_module --with-zlib=/opt/ysz/src/nginx/zlib-1.2.3 --with-openssl=/opt/ysz/src/nginx/openssl-0.9.8k --with-pcre=/opt/ysz/src/nginx/pcre-8.00 --add-module=../nginx-upload-progress-module --add-module=../nginx_test


配置完成之后,手工修改objs/Makefile文件
把libpcre.a libssl.a libcrypto.a libz.a ssl.h几个文件对应的路径给修改成/opt/nginx/lib下
之后再make && make install后,在本机启动nginx没有问题
但拷贝到某台服务器上启动时,报错

error while loading shared libraries: requires glibc 2.5 or later dynamic linker”


看来是因为编译的机器的glibc版本太高了
所以就到一台低版本的机器上重新编译
但是拷过去后,又出了以下错误

error while loading shared libraries: libcrypto.so.4: cannot open shared object file: No such file or directory


经查,发现是运行机器的libcrypto.so版本太高,是libcrypto.so.6,而ldd显示nginx依赖的是libcrypto.so.4
于是,在对应的/lib64目录下建个libcrypto.so.4的软链接就可以了
后来,在douyuan的指点下,用了另外一个办法来解决这个问题
直接修改nginx的二进制文件,找到libcrypto.so.4,把后面的.4给替换成\0\0就可以了
如果在vi里进行编辑,可以使用xxd这个命令以16进制文本格式编辑,之后再转换回去就行了