nginx_uwsgi编译安装(Ubuntu)
UPDATE: 2012-10-03
在新系统上安装
-
安装编辑环境
apt-get install libxml2-dev build-essential libpcre3 libpcre3-dev zlib1g zlib1g-dev libssl-dev
-
创建工作目录、日志目录
install -m 755 -o root -g root -d /var/lib/nginx install -m 755 -o www-data -g root -d /var/log/nginx install -m 755 -o www-data -g root -d /var/lib/nginx/proxy install -m 755 -o www-data -g root -d /var/lib/nginx/body install -m 755 -o www-data -g root -d /var/lib/nginx/fastcgi install -m 755 -o www-data -g root -d /var/lib/nginx/body
安装
编译安装(nginx 1.0.25)
NGINX="nginx-1.2.5" \ && mkdir -p /data/packages && cd /data/packages \ && rm -rf nginx-* \ && wget http://www.nginx.org/download/${NGINX}.tar.gz \ && tar zxf ${NGINX}.tar.gz \ && cd ${NGINX} && sed -i.bak 's/^CFLAGS="$CFLAGS -g"/#&/' auto/cc/gcc \ && ./configure --user=www-data --group=www-data \ --prefix=/usr/local/nginx \ --http-log-path=/var/log/nginx \ --http-client-body-temp-path=/var/lib/nginx/body \ --http-proxy-temp-path=/var/lib/nginx/proxy \ --http-fastcgi-temp-path=/var/lib/nginx/fastcgi \ --pid-path=/var/run/nginx.pid \ --http-log-path=/var/log/nginx/access.log \ --error-log-path=/var/log/nginx/error.log \ --with-http_stub_status_module \ --with-http_gzip_static_module \ && make && make install
执行文件链接、启动脚本
ln -sfT /usr/local/nginx/sbin/nginx /usr/sbin/nginx install -m 755 -o root -g root "/data/rsync/tools/scripts/init.d/nginx" /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 DAEMON=/usr/local/nginx/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 test_nginx_config() { if $DAEMON -t then return 0 else return $? fi } case "$1" in start) echo -n "Starting $DESC: " test_nginx_config 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 test_nginx_config start-stop-daemon --start --quiet --pidfile \ /var/run/$NAME.pid --exec $DAEMON -- $DAEMON_OPTS || true echo "$NAME." ;; reload) echo -n "Reloading $DESC configuration: " test_nginx_config start-stop-daemon --stop --signal HUP --quiet --pidfile /var/run/$NAME.pid \ --exec $DAEMON || true echo "$NAME." ;; configtest) echo -n "Testing $DESC configuration: " if test_nginx_config then echo "$NAME." else exit $? fi ;; status) status_of_proc -p /var/run/$NAME.pid "$DAEMON" nginx && exit 0 || exit $? ;; *) echo "Usage: $NAME {start|stop|restart|reload|force-reload|status|configtest}" >&2 exit 1 ;; esac exit 0
放置初始配置
nginxconfdir="/usr/local/nginx/conf" pkgsDir="/data/rsync/tools" install -m 644 -o root -g root "$pkgsDir/conf/nginx/nginx.conf" "$nginxconfdir/nginx.conf" install -m 755 -o root -g root -d "$nginxconfdir/sites-available" install -m 755 -o root -g root -d "$nginxconfdir/sites-enabled" install -m 755 -o root -g root -d "$nginxconfdir/inc" install -m 644 -o root -g root "$pkgsDir/conf/nginx/unknowsite.conf" "$nginxconfdir/sites-available/unknowsite.conf" cd "$nginxconfdir/sites-enabled" ln -sf "../sites-available/unknowsite.conf" . cd -
版本及进程检查
nginx -v && ps aux|grep nginx
设置自启动(仅Web服务器执行)
update-rc.d nginx defaults # 设置自启动 #update-rc.d -f nginx remove # 取消自启动
编译相关说明
-
早期uwsgi版编译参数修改
vim makefile.Py26 PYTHON_CFLAGS=`python2.6-config --cflags| sed 's/-g //'` 编译、安装 make -f Makefile.Py26
-
nginx 0.7.66后版本make时的警告信息官网回复为正常现象
http://nginx.org/en/docs/sys_errlist.html While building nginx version 0.7.66, 0.8.35 or higher on Linux the following warning messages are issued: warning: `sys_errlist' is deprecated; use `strerror' or `strerror_r' instead #warning: `sys_nerr' is deprecated; use `strerror' or `strerror_r' instead #This is normal: nginx has to use the deprecated sys_errlist[] and sys_nerr in signal handlers because strerror() and strerror_r() functions are not Async-Signal-Safe.
nginx平滑版本升级说明
可以在不中断服务的情况下 - 新的请求也不会丢失,使用新的 nginx 可执行程序替换旧的(当升级新版本或添加/删除服务器模块时)。
参考:http://wiki.nginx.org/NginxChsCommandLine
进程信号说明
- 主进程可以处理以下的信号
TERM,INT | 快速关闭 |
QUIT | 从容关闭 |
HUP | 重载配置,用新的配置开始新的工作进程,从容关闭旧的工作进程 |
USR1 | 重新打开日志文件 |
USR2 | 平滑升级可执行程序。 |
WINCH | 从容关闭工作进程 |
- 工作进程,但是,它们也支持一些信号,尽管你不必自己操作工作进程,但是,它们也支持一些信号:
TERM,INT | 快速关闭 |
QUIT | 从容关闭 |
USR1 | 重新打开日志文件 |
详细步骤说明
- 使用新的可执行程序替换旧的(最好做好备份)--完成编译安装。
-
发送 USR2 (kill -USR2 pid)信号给主进程(主进程将重命名nginx.pid为nginx.pid.oldbin)。执行新的可执行程序,
-
依次启动新的主进程和新的工作进程。此时两个 nginx 实例会同时运行,一起处理输入的请求。
kill -USR2 `cat /var/run/nginx.pid` && ps axu|grep nginx
-
依次启动新的主进程和新的工作进程。此时两个 nginx 实例会同时运行,一起处理输入的请求。
-
发送 WINCH ( kill -WINCH oldpid)信号给旧的主进程,它的工作进程就将开始从容关闭。
-
当旧的工作进程处理完所有已连接请求后将全部退出,仅由新工作进程处理请求。
kill -WINCH `cat /var/run/nginx.pid.oldbin` && ps axu|grep nginx
-
当旧的工作进程处理完所有已连接请求后将全部退出,仅由新工作进程处理请求。
-
升级失败,恢复为旧版本
a) 发送HUP信号给旧的主进程,它将启动它的工作进程。 kill -HUP `cat /var/run/nginx.pid.oldbin` b) 发送QUIT信号给新的主进程,要求其从容关闭主进程。 kill -QUIT `cat /var/run/nginx.pid` c) 发送TERM信号给新的主进程,使用其退出,若失败则发KILL信号。 新的主进程退出后,旧的主进程会移除.oldbin前缀,恢复为它的.pid文件。 kill -TERM `cat /var/run/nginx.pid`
-
升级成功,保留新服务器:
-
发送QUIT信号给旧的主进程使其退出(kill -QUIT oldpid)。
kill -QUIT `cat /var/run/nginx.pid.oldbin` && ps axu|grep nginx
-
发送QUIT信号给旧的主进程使其退出(kill -QUIT oldpid)。
-
简单执行步骤
kill -USR2 `cat /var/run/nginx.pid` && ps axu|grep nginx kill -WINCH `cat /var/run/nginx.pid.oldbin` && ps axu|grep nginx kill -QUIT `cat /var/run/nginx.pid.oldbin` && ps axu|grep nginx