因为要把网站的图片格式方式换成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 二进制文件启动下就应该可以了!