nginx编译安装(CentOS)
Update: 2013-01-22
设置主机名
h="TMXLlvs2" \ && hostname $h \ && sed -i.bak "s/\(HOSTNAME=\).*$/\1$h/g" /etc/sysconfig/network \ && grep "127.0.0.1.*$h" /etc/hosts || sed -i "s/\(127.0.0.1.*$\)/\1 $h/g" /etc/hosts \ && ping -c 4 $h
编译环境
yum -y install gcc gcc-c++ autoconf automake make yum -y install zlib zlib-devel openssl openssl-devel pcre pcre-devel libxml2 libxml2-devel
下载
mkdir -p ~/work/ && cd ~/work/ \ && wget http://nginx.org/download/nginx-1.2.5.tar.gz \ && wget https://nginx-upstream-jvm-route.googlecode.com/files/nginx-upstream-jvm-route-0.1.tar.gz
用户及工作目录
groupadd -r nginx && useradd -r -g nginx nginx -s /sbin/nologin -d /dev/null install -m 755 -o nginx -g nginx -d /var/cache/nginx install -m 755 -o nginx -g nginx -d /var/log/nginx/
编译安装
V=1.2.5 \ && cd ~/work/ \ && tar zxvf nginx-$V.tar.gz \ && tar zxvf nginx-upstream-jvm-route-0.1.tar.gz \ && cd nginx-$V \ && sed -i.bak 's/^CFLAGS="$CFLAGS -g"/#&/' auto/cc/gcc \ && patch -p0 < ../nginx_upstream_jvm_route/jvm_route.patch \ && ./configure --user=nginx --group=nginx \ --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/cache/nginx/client_temp \ --http-proxy-temp-path=/var/cache/nginx/proxy_temp \ --http-fastcgi-temp-path=/var/cache/nginx/fastcgi_temp \ --http-uwsgi-temp-path=/var/cache/nginx/uwsgi_temp \ --http-scgi-temp-path=/var/cache/nginx/scgi_temp \ --pid-path=/var/run/nginx.pid \ --with-http_realip_module \ --with-http_stub_status_module \ --with-http_gzip_static_module \ --with-http_ssl_module \ --add-module=../nginx_upstream_jvm_route \ --with-cc-opt='-O2 -g' \ && make && make install
启动脚本
[ -f /usr/sbin/nginx ] && mv /usr/sbin/nginx{,.backup}
ln -sfT /usr/local/nginx/sbin/nginx /usr/sbin/nginx
#install -m 755 -o root -g root "CentOS_init.nginx2" /etc/init.d/nginx
#!/bin/sh
#
# nginx Startup script for nginx
#
# chkconfig: - 85 15
# processname: nginx
# config: /usr/local/nginx/conf/nginx.conf
# config: /etc/sysconfig/nginx
# pidfile: /var/run/nginx.pid
# description: nginx is a HTTP and reverse proxy server
#
### BEGIN INIT INFO
# Provides: nginx
# Required-Start: $local_fs $remote_fs $network
# Required-Stop: $local_fs $remote_fs $network
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: start and stop nginx
### END INIT INFO
# Source function library.
. /etc/rc.d/init.d/functions
if [ -f /etc/sysconfig/nginx ]; then
. /etc/sysconfig/nginx
fi
prog=nginx
#nginx=${NGINX-/usr/sbin/nginx}
#conffile=${CONFFILE-/etc/nginx/nginx.conf}
nginx=${NGINX-/usr/local/nginx/sbin/nginx}
conffile=${CONFFILE-/usr/local/nginx/conf/nginx.conf}
lockfile=${LOCKFILE-/var/lock/subsys/nginx}
pidfile=${PIDFILE-/var/run/nginx.pid}
SLEEPMSEC=100000
RETVAL=0
start() {
echo -n $"Starting $prog: "
daemon --pidfile=${pidfile} ${nginx} -c ${conffile}
RETVAL=$?
echo
[ $RETVAL = 0 ] && touch ${lockfile}
return $RETVAL
}
stop() {
echo -n $"Stopping $prog: "
killproc -p ${pidfile} ${prog}
RETVAL=$?
echo
[ $RETVAL = 0 ] && rm -f ${lockfile} ${pidfile}
}
reload() {
echo -n $"Reloading $prog: "
killproc -p ${pidfile} ${prog} -HUP
RETVAL=$?
echo
}
upgrade() {
oldbinpidfile=${pidfile}.oldbin
configtest -q || return 6
echo -n $"Staring new master $prog: "
killproc -p ${pidfile} ${prog} -USR2
RETVAL=$?
echo
/bin/usleep $SLEEPMSEC
if [ -f ${oldbinpidfile} -a -f ${pidfile} ]; then
echo -n $"Graceful shutdown of old $prog: "
killproc -p ${oldbinpidfile} ${prog} -QUIT
RETVAL=$?
echo
else
echo $"Upgrade failed!"
return 1
fi
}
configtest() {
if [ "$#" -ne 0 ] ; then
case "$1" in
-q)
FLAG=$1
;;
*)
;;
esac
shift
fi
${nginx} -t -c ${conffile} $FLAG
RETVAL=$?
return $RETVAL
}
rh_status() {
status -p ${pidfile} ${nginx}
}
# See how we were called.
case "$1" in
start)
rh_status >/dev/null 2>&1 && exit 0
start
;;
stop)
stop
;;
status)
rh_status
RETVAL=$?
;;
restart)
configtest -q || exit $RETVAL
stop
start
;;
upgrade)
upgrade
;;
condrestart|try-restart)
if rh_status >/dev/null 2>&1; then
stop
start
fi
;;
force-reload|reload)
reload
;;
configtest)
configtest
;;
*)
echo $"Usage: $prog {start|stop|restart|condrestart|try-restart|force-reload|upgrade|reload|status|help|configtest}"
RETVAL=2
esac
exit $RETVAL
Nginx+google-perftools
- Nginx + varnish 构建高可用CDN节点集群: http://bbs.osapub.com/thread-3370-1-1.html
仅做记录,还没有实验过。
#!/bin/bash
# nginx 环境安装脚本,注意环境不同可能导致脚本运行出错,如果环境不同建议手工一条一条执行指令。
# 环境:CentOS release 5.8 Final
#创建工作目录
mkdir -p /dist/{dist,src}
cd /dist/dist
#下载安装包
wget http://bbs.osapub.com/down/google-perftools-1.8.3.tar.gz &> /dev/null
wget http://bbs.osapub.com/down/libunwind-0.99.tar.gz &> /dev/null
wget http://bbs.osapub.com/down/pcre-8.01.tar.gz &> /dev/null
wget http://bbs.osapub.com/down/nginx-1.0.5.tar.gz &> /dev/null
#------------------------------------------------------------------------
# 使用Google的开源TCMalloc库,忧化性能
cd /dist/src
tar zxf ../dist/libunwind-0.99.tar.gz
cd libunwind-0.99/
## 注意这里不能加其它 CFLAGS加速编译参数
CFLAGS=-fPIC ./configure
make clean
make CFLAGS=-fPIC
make CFLAGS=-fPIC install
if [ "$?" == "0" ]; then
echo "libunwind-0.99安装成功." >> ./install_log.txt
else
echo "libunwind-0.99安装失败." >> ./install_log.txt
exit 1
fi
##----------------------------------------------------------
## 使用Google的开源TCMalloc库,提高MySQL在高并发情况下的性能
cd /dist/src
tar zxf ../dist/google-perftools-1.8.3.tar.gz
cd google-perftools-1.8.3/
CHOST="x86_64-pc-linux-gnu" CFLAGS="-march=nocona -O2 -pipe" CXXFLAGS="-march=nocona -O2 -pipe" \
./configure
make clean
make && make install
if [ "$?" == "0" ]; then
echo "google-perftools-1.8.3安装成功." >> ./install_log.txt
else
echo "google-perftools-1.8.3安装失败." >> ./install_log.txt
exit 1
fi
echo "/usr/local/lib" > /etc/ld.so.conf.d/usr_local_lib.conf
/sbin/ldconfig
################ 安装nginx ##########################
#安装Nginx所需的pcre库
cd /dist/src
tar zxvf ../dist/pcre-8.01.tar.gz
cd pcre-8.01/
CHOST="x86_64-pc-linux-gnu" CFLAGS="-march=nocona -O2 -pipe" CXXFLAGS="-march=nocona -O2 -pipe" \
./configure
make && make install
if [ "$?" == "0" ]; then
echo "pcre-8.01安装成功." >> ./install_log.txt
else
echo "pcre-8.01安装失败." >> ./install_log.txt
exit 1
fi
cd ../
## 安装Nginx
## 为优化性能,可以安装 google 的 tcmalloc ,之前己经安装过了
## 所以我们编译 Nginx 时,加上参数 --with-google_perftools_module
## 然后在启动nginx前需要设置环境变量 export LD_PRELOAD=/usr/local/lib/libtcmalloc.so
## 加上 -O2 参数也能优化一些性能
##
## 默认的Nginx编译选项里居然是用 debug模式的(-g参数),在 auto/cc/gcc 文件最底下,去掉那个 -g 参数
## 就是将 CFLAGS="$CFLAGS -g" 修改为 CFLAGS="$CFLAGS" 或者直接删除这一行
cd /dist/src
rm -rf nginx-1.0.5
tar zxf ../dist/nginx-1.0.5.tar.gz
cd nginx-1.0.5/
sed -i 's#CFLAGS="$CFLAGS -g"#CFLAGS="$CFLAGS "#' auto/cc/gcc
make clean
CHOST="x86_64-pc-linux-gnu" CFLAGS="-march=nocona -O2 -pipe" CXXFLAGS="-march=nocona -O2 -pipe" \
./configure --user=www --group=www \
--prefix=/usr/local/nginx \
--with-http_stub_status_module \
--with-google_perftools_module
make && make install
if [ "$?" == "0" ]; then
echo "nginx-1.0.5安装成功." >> ./install_log.txt
else
echo "nginx-1.0.5安装失败." >> ./install_log.txt
exit 1
fi
cd ../
#创建Nginx日志目录
mkdir -p /data/logs
chmod +w /data/logs
chown -R www:www /data/logs
cd /usr/local/nginx/
mv conf conf_bak
ln -s /data/conf/nginx/ conf
echo 'export LD_PRELOAD=/usr/local/lib/libtcmalloc.so' > /root/nginx_start
echo 'ulimit -SHn 51200' >> /root/nginx_start
echo '/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf' >> /root/nginx_start
echo '/usr/local/nginx/sbin/nginx -t' > /root/nginx_reload
echo 'kill -HUP `cat /usr/local/nginx/logs/nginx.pid`' >> /root/nginx_reload
chmod 700 /root/nginx_*