首先下载好下面三个源码包
nginx-1.8.0.tar.gz
pcre-8.37.tar.gz
openssl-1.0.0e.tar.gz

解压 nginx-1.8.0.tar.gz

设置环境变量

BUILD_PATH=$PWD
INSTALL_PATH=$PWD/install
CC_PATH=/opt/buildroot-gcc342/bin/mipsel-linux-gcc
CPP_PATH=/opt/buildroot-gcc342/bin/mipsel-linux-g++ 
CONFIG_DIR=/app/nginx
LOG_DIR=/app/nginx/log
TEMP_DIR=/app/nginx/tmp 

其中 CC_PATH CPP_PATH 是交叉工具链的路径。

./configure --prefix=$INSTALL_PATH--builddir=$BUILD_PATH/build --conf-path=$CONFIG_DIR/nginx.conf --error-log-path=$LOG_DIR/error.log --pid-path=$CONFIG_DIR/nginx.pid --lock-path=$CONFIG_DIR/nginx.lock --http-log-path=$LOG_DIR/access.log --http-client-body-temp-path=$TEMP_DIR/body --http-proxy-temp-path=$TEMP_DIR/proxy --http-fastcgi-temp-path=$TEMP_DIR/fastcgi --without-http_uwsgi_module --without-http_scgi_module --without-http_gzip_module --with-http_ssl_module --with-pcre=/home/ubuntu/packets/pcre-6.7 --with-openssl=/home/ubuntu/packets/openssl-1.0.1i --with-cc=$CC_PATH  --with-cpp=$CPP_PATH --with-cc-opt="-I /opt/buildroot-gcc342/include" --with-ld-opt="-L /opt/buildroot-gcc342/lib" --with-pcre=/work/src/nginx/pcre-8.37 --with-openssl=/work/src/openssl-1.0.0e

其中

--with-cc-opt="-I /opt/buildroot-gcc342/include" --with-ld-opt="-L /opt/buildroot-gcc342/lib"

是交叉工具链的include lib路径。

--with-pcre=/work/src/nginx/pcre-8.37 --with-openssl=/work/src/openssl-1.0.0e

是解压后 pcre openssl 的路径

执行完上面的命令后可能会遇到问题,

此外还有一些问题是上面的文章没有提到的
修改 objs/Makefile

/work/src/nginx/pcre-8.37/Makefile:     objs/Makefile
        cd /work/src/nginx/pcre-8.37 \
        && if [ -f Makefile ]; then $(MAKE) distclean; fi \
        && CC="$(CC)" CFLAGS="-O2 -fomit-frame-pointer -pipe " \
        ./configure --disable-shared --prefix=/work/src/nginx/pcre-8.37/tmp --host=mipsel-linux --build=i686-linux 

/work/src/nginx/pcre-8.37/.libs/libpcre.a:      /work/src/nginx/pcre-8.37/Makefile
        cd /work/src/nginx/pcre-8.37 \
        && $(MAKE) libpcre.la


/work/src/openssl-1.0.0e/include/openssl/ssl.h: objs/Makefile
        cd /work/src/openssl-1.0.0e \
       && if [ -f Makefile ]; then $(MAKE) clean; fi \
       && ./config no-asm --prefix=/work/src/openssl-1.0.0e/.openssl no-shared \
         $(MAKE) \
        && $(MAKE) install LIBDIR=lib

主要是对 pcre 和openssl 的编译配置进行修改,使其执行交叉编译。 ./config

完成上面的修改后,执行 make
但是make的过程中会发现编译 openssl 是采用gcc工具链。而不是mipsel-linux-gcc
于是,我们打开 openssl源码中的 Makefile。将 cc 修改成 mipsel-linux-gcc。
再次修改 objs/Makefile

   && ./config no-asm --prefix=/work/src/openssl-1.0.0e/.openssl no-shared

注释掉,因为你再次make的时候,还是会重新生成 openssl 的Makefile,这样我们刚才的修改的文件就会被覆盖了,依旧会是gcc 编译。

至此,
执行make
make install

过程中会报一个警告:

warning: implicit declaration of function `posix_fadvise'

修改 objs/ngx_auto_config.h
添加下面语句

#ifndef NGX_HAVE_SYSVSHM
#define NGX_HAVE_SYSVSHM 1
#endif

#ifndef NGX_SYS_NERR
#define NGX_SYS_NERR  132
#endif

同时注释下面的语句

//#ifndef NGX_HAVE_POSIX_FADVISE
//#define NGX_HAVE_POSIX_FADVISE  1
//#endif