以下内容为个人配置笔记,仅供参考,请勿用于生产环境
nginx实在是个非常出色的程序,能承担的角色也是千差万别,负载均衡,静态页面缓存,请求代理,在我这里的应用里,使用的还是它的传统方式,替代apache处理静态请求,并将动态请求转发给后端fast-cgi处理进程(php/python/java)处理。在nignx的前端使用varnish做静态缓存和请求转发。
注意:以下的安装扩展只是在我实验的测试机上做测试使用的,并不适用于通用的生产环境。
安装前准备,先准备好pcre和zlib这两个依赖。
wget http://downloads.sourceforge.net/project/pcre/pcre/8.02/pcre-8.02.tar.bz2?use_mirror=ncu
tar jxf pcre-8.02.tar.bz2
wget http://www.zlib.net/zlib-1.2.4.tar.gz
tar zxf zlib-1.2.4.tar.gz
预备一下安装后所需要用到的路径:
sudo mkdir -p /var/log/nginx
sudo mkdir -p /var/lib/nginx/tmp/client_body
sudo mkdir -p /var/lib/nginx/tmp/proxy
sudo mkdir -p /var/lib/nginx/tmp/fastcgi
安装的时候如果需要geoip的扩展支持的话去maxmind下载一下最新的免费数据库,安装一下libgeoip-dev开发库(http://wiki.nginx.org/NginxHttpGeoIPModule):
#Get the free database of geo_city
wget http://geolite.maxmind.com/download/geoip/database/GeoLiteCity.dat.gz
#Get the free database of geo_coundty
wget http://geolite.maxmind.com/download/geoip/database/GeoLiteCountry/GeoIP.dat.gz
sudo apt-get install libgeoip-dev
#In other systems, you can download the source and compile it youself.
wget http://geolite.maxmind.com/download/geoip/api/c/GeoIP.tar.gz
从http://nginx.org/en/download.html下载nginx的开发版:
wget http://nginx.org/download/nginx-0.8.35.tar.gz
tar zxf nginx-0.8.35.tar.gz
nginx扩展可以一起编译,在这里我选择了nginx_upload_module,nginx-upload-progress-module,nginx-upstream-fair,nginx_upstream_hash和nginx_http_push_module,其他有些扩展貌似无法和0.8.33版兼容。
nginx扩展可以在这里下载:http://wiki.nginx.org/Nginx3rdPartyModules
注意Nginx upload module(http://www.grid.net.ru/nginx/upload.en.html)目前貌似被封了,国内需要翻墙下载再scp上去,vps在国外可以直接wget。
wget http://www.grid.net.ru/nginx/download/nginx_upload_module-2.0.11.tar.gz
Nginx upload progress module下载,使用git clone:
git clone git://github.com/masterzen/nginx-upload-progress-module.git
Nginx upstream fair下载,使用git clone:
git clone git://github.com/gnosek/nginx-upstream-fair.git
Nginx upstream hash下载:
wget http://wiki.nginx.org/images/7/78/Nginx_upstream_hash-0.3.tar.gz
Nginx http push module下载:
wget http://pushmodule.slact.net/downloads/nginx_http_push_module-0.692.tar.gz
把各个扩展模块解压后开始编译安装,安装前Nginx upstream hash模块需要给代码打个补丁:
cd nginx-0.8.35/
patch -p0 < ../nginx_upstream_hash-0.3/nginx.patch
不过这一步骤在0.8.35上会失败,原因是这个版本的src/http/ngx_http_upstream.h文件该打补丁的代码位置变了,现在打开src/http/ngx_http_upstream.h文件定位到106行左右:
ngx_array_t *servers; /* ngx_http_upstream_server_t */
在此行后面添加nginx.patch里所需要加入的3行代码,结果变为:
ngx_array_t *servers; /* ngx_http_upstream_server_t */
ngx_array_t *values;
ngx_array_t *lengths;
ngx_uint_t retries;
保存即相当于补丁打完。
开始编译安装:
./configure --prefix=/usr/local/nginx --http-log-path=/var/log/nginx/access.log --error-log-path=/var/log/nginx/error.log --http-client-body-temp-path=/var/lib/nginx/tmp/client_body --http-proxy-temp-path=/var/lib/nginx/tmp/proxy --http-fastcgi-temp-path=/var/lib/nginx/tmp/fastcgi --pid-path=/var/run/nginx.pid --lock-path=/var/lock/subsys/nginx --user=www-data --group=www-data --with-pcre=../pcre-8.02 --with-zlib=../zlib-1.2.4 --with-http_ssl_module --with-http_realip_module --with-http_addition_module --with-http_dav_module --with-http_geoip_module --with-http_flv_module --with-http_gzip_static_module --with-http_stub_status_module --without-select_module --without-poll_module --add-module=../nginx_upload_module-2.0.11 --add-module=../nginx-upload-progress-module --add-module=../nginx-upstream-fair --add-module=../nginx_upstream_hash-0.3 --add-module=../nginx_http_push_module-0.692
make
sudo make install
建个软链接:
sudo ln -s /usr/local/nginx/sbin/nginx /usr/sbin/
这里我从ubuntu自带的安装代码里扒了个启动脚本出来放在/etc/init.d/nginx下:
#! /bin/sh
### BEGIN INIT INFO
# Provides: nginx
# Required-Start: $all
# Required-Stop: $all
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: starts the nginx web server
# Description: starts nginx using start-stop-daemon
### END INIT INFO
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
DAEMON=/usr/sbin/nginx
NAME=nginx
DESC=nginx
test -x $DAEMON || exit 0
# Include nginx defaults if available
if [ -f /etc/default/nginx ] ; then
. /etc/default/nginx
fi
set -e
. /lib/lsb/init-functions
case "$1" in
start)
echo -n "Starting $DESC: "
start-stop-daemon --start --quiet --pidfile /var/run/$NAME.pid \
--exec $DAEMON -- $DAEMON_OPTS || true
echo "$NAME."
;;
stop)
echo -n "Stopping $DESC: "
start-stop-daemon --stop --quiet --pidfile /var/run/$NAME.pid \
--exec $DAEMON || true
echo "$NAME."
;;
restart|force-reload)
echo -n "Restarting $DESC: "
start-stop-daemon --stop --quiet --pidfile \
/var/run/$NAME.pid --exec $DAEMON || true
sleep 1
start-stop-daemon --start --quiet --pidfile \
/var/run/$NAME.pid --exec $DAEMON -- $DAEMON_OPTS || true
echo "$NAME."
;;
reload)
echo -n "Reloading $DESC configuration: "
start-stop-daemon --stop --signal HUP --quiet --pidfile /var/run/$NAME.pid \
--exec $DAEMON || true
echo "$NAME."
;;
status)
status_of_proc -p /var/run/$NAME.pid "$DAEMON" nginx && exit 0 || exit $?
;;
*)
N=/etc/init.d/$NAME
echo "Usage: $N {start|stop|restart|reload|force-reload|status}" >&2
exit 1
;;
esac
exit 0
把上面这段保存为nginx脚本放到/etc/init.d/下,并作成服务启动:
sudo cp nginx /etc/init.d/nginx
sudo chmod a+x /etc/init.d/nginx
sudo update-rc.d nginx defaults
sudo /etc/init.d/nginx start
至此nginx基本安装完毕。可以查看系统的80端口访问起始页,您应该可以看到Welcome to nginx!的字样,说明基本安装编译成功。

要说点啥就在这吧