因为要把网站的图片格式方式换成imageMagick的缘故,服务器端原来安装的nginx要增加perl的模块,而原来服务器安装时apt-get方式安装的并不是源码安装,但我又不想直接卸了重新安装,所以整了老半天,下面把方法和遇到的问题记录如下,供有同样需求的人参考。
首先,要知道你原安装的nginx版本,以及原来安装的模块,用nginx -V即可
/usr/sbin/nginx -V
configure arguments: --prefix=/etc/nginx --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --http-client-body-temp-path=/var/lib/nginx/body --http-fastcgi-temp-path=/var/lib/nginx/fastcgi --http-log-path=/var/log/nginx/access.log --http-proxy-temp-path=/var/lib/nginx/proxy --http-scgi-temp-path=/var/lib/nginx/scgi --http-uwsgi-temp-path=/var/lib/nginx/uwsgi --lock-path=/var/lock/nginx.lock --pid-path=/var/run/nginx.pid --with-pcre-jit --with-debug --with-http_addition_module --with-http_dav_module --with-http_geoip_module --with-http_gzip_static_module --with-http_image_filter_module --with-http_realip_module --with-http_stub_status_module --with-http_ssl_module --with-http_sub_module --with-http_xslt_module --with-ipv6 --with-sha1=/usr/include/openssl --with-md5=/usr/include/openssl --with-mail --with-mail_ssl_module --add-module=/build/nginx-sbbMZs/nginx-1.2.1/debian/modules/nginx-auth-pam --add-module=/build/nginx-sbbMZs/nginx-1.2.1/debian/modules/nginx-echo --add-module=/build/nginx-sbbMZs/nginx-1.2.1/debian/modules/nginx-upstream-fair --add-module=/build/nginx-sbbMZs/nginx-1.2.1/debian/modules/nginx-dav-ext-module
结尾处的--add-module 重新安装时这里可以去掉,
然后去官网下载一个相同版本的源码包 http://nginx.org/download/
我的路径放在/usr/src
tar zxf nginx-1.2.1.tar.gz;
cd nginx-1.2.1;
解压 进入源码路径,然后configure,加入
--prefix=/etc/nginx --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --http-client-body-temp-path=/var/lib/nginx/body --http-fastcgi-temp-path=/var/lib/nginx/fastcgi --http-log-path=/var/log/nginx/access.log --http-proxy-temp-path=/var/lib/nginx/proxy --http-scgi-temp-path=/var/lib/nginx/scgi --http-uwsgi-temp-path=/var/lib/nginx/uwsgi --lock-path=/var/lock/nginx.lock --pid-path=/var/run/nginx.pid --with-pcre-jit --with-debug --with-http_addition_module --with-http_dav_module --with-http_geoip_module --with-http_gzip_static_module --with-http_image_filter_module --with-http_realip_module --with-http_stub_status_module --with-http_ssl_module --with-http_sub_module --with-http_xslt_module --with-ipv6 --with-sha1=/usr/incloude/openssl --with-md5=/usr/incloude/openssl --with-mail --with-mail_ssl_module --with-openssl=/usr/src/openssl-1.0.1c --with-zlib=/usr/src/zlib-1.2.8 --with-pcre=/usr/src/pcre-8.21 --with-http_perl_module
执行可能遇到问题
the HTTP XSLT module requires the libxml2/libxslt libraries
sudo apt-get install libxml2 libxml2-dev libxslt-dev
the HTTP image filter module requires the GD library.
sudo apt-get install libgd2-xpm libgd2-xpm-dev
the GeoIP module requires the GeoIP library.
sudo apt-get install geoip-database libgeoip-dev
the HTTP rewrite module requires the PCRE library.
apt-get install libpcre3 libpcre3-dev
下载安装相关包即可,再configure,完成后,make
make;
可能会报lperl not found 的错误;
apt-get install libperl-dev
如果已经安装 查看安装路径
perl -V
Compiled at Sep 29 2013 13:26:03 @INC: /etc/perl /usr/local/lib/perl/5.14.2 /usr/local/share/perl/5.14.2 /usr/lib/perl5 /usr/share/perl5 /usr/lib/perl/5.14 /usr/share/perl/5.14 /usr/local/lib/site_perl
到usr/lib 查看libperl.so是否存在,不存在的话建立连接
ln -s libperl.so.5.14.2 /usr/lib/libperl.so
make 完成后,这时会在/usr/src/nginx-1.2.1 下生成一个文件夹objs
把nginx二进制文件拷贝sbin下,注意备份原nginx
cp objs/nginx /usr/sbin/nginx
试一下nginx配置文件
/usr/sbin/nginx -t
报错
Can't locate nginx.pm in @INC (@INC contains: /usr/lib/perl5 /etc/perl /usr/local/lib/perl/5.14.2 /usr/local/share/perl/5.14.2 /usr/lib/perl5 /usr/share/perl5 /usr/lib/perl/5.14 /usr/share/perl/5.14 /usr/local/lib/site_perl .).
由于没有make install的缘故,这里我们来手动加入以下文件:
位置在/usr/local/lib/perl/5.14.2
这里存放的是perl的一些类库,perl -V可查看到路径
共需手动加入五个个文件,文件可在nginx源码包中安装后生成的文件objs中找到
/usr/local/lib/perl/5.14.2/auto/nginx 下两个nginx.bs nginx.so 可从/usr/local/src/nginx-1.4.4/objs/src/http/modules/perl/blib/arch/auto/nginx/下复制
/usr/local/lib/perl/5.14.2两个nginx.pm perllocal.pod nginx.pm可从/usr/local/src/nginx-1.4.4/objs/src/http/modules/perl/blib/lib复制
perllocal.pod中记录了nginx版本信息可手动加入文本如下:
=head2 Mon Jan 13 15:01:43 2014: C<Module> L<nginx|nginx> =over 4 =item * C<installed into: /usr/local/share/perl/5.14.2> =item * C<LINKTYPE: dynamic> =item * C<VERSION: 1.4.4> =item * C<EXE_FILES: > =back
最后一个:在/usr/local/man/man3中加入nginx.3pm
nginx.3pm 在/usr/local/src/nginx-1.4.4/objs/src/http/modules/perl/blib/man3/nginx.3pm
找不到文件也可用命令:
find / -name "要查找的文件名"
最后在用更新后copy的nginx 二进制文件启动下就应该可以了!