NGINX 安装
前提:完整的编译环境 gcc g++ make 开发库等
系统:Linux Ubuntu-server-12.04-64bit
内核:Linux 3.13.0-68-generic
apt-get install build-essential
apt-get install libtool
1.选定源码目录
可以是任何目录,本文选定的是/usr/local/src
2.安装PCRE库
ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/ 下载最新的 PCRE 源码包,使用下面命令下载编译和安装 PCRE 包:
cd /usr/local/src
wget ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-8.37.tar.gz
tar -zxvf pcre-8.37.tar.gz
cd pcre-8.37
./configure
make
sudo make install
3.安装zlib库
http://zlib.net/zlib-1.2.8.tar.gz 下载最新的 zlib 源码包,使用下面命令下载编译和安装 zlib包:
cd /usr/local/src
wget http://zlib.net/zlib-1.2.8.tar.gz
tar -zxvf zlib-1.2.8.tar.gz
cd zlib-1.2.8
./configure
make
sudo make install
4.安装ssl(某些vps默认没装ssl)
cd /usr/local/src
wget http://www.openssl.org/source/openssl-1.0.2d.tar.gz
tar -zxvf openssl-1.0.2d.tar.gz
cd openssl-1.0.2d
./config --prefix=/usr/local --openssldir=/usr/local/ssl
make
sudo make install
./config shared --prefix=/usr/local --openssldir=/usr/local/ssl
make clean
make
sudo make install
5.安装nginx
Nginx 一般有两个版本,分别是稳定版和开发版,您可以根据您的目的来选择这两个版本的其中一个,下面是把 Nginx 安装到 /usr/local/nginx 目录下的详细步骤:
cd /usr/local/src
wget http://nginx.org/download/nginx-1.9.6.tar.gz
tar -zxvf nginx-1.9.6.tar.gz
cd nginx-1.9.6
./configure --prefix=/usr/local/nginx \
--with-http_ssl_module \
--with-stream \
--with-pcre=/usr/local/src/pcre-8.37 \
--with-zlib=/usr/local/src/zlib-1.2.8 \
--with-openssl=/usr/local/src/openssl-1.0.2d
make
sudo make install
–with-stream 用于激活支持TCP
–with-pcre=/usr/src/pcre-8.37 指的是pcre-8.37 的源码路径。
–with-zlib=/usr/src/zlib-1.2.8 指的是zlib-1.2.8 的源码路径。
6.启动
sudo /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
打开浏览器访问此机器的 IP,如果浏览器出现 Welcome to nginx! 则表示 Nginx 已经安装并运行成功
Nginx官方配置说明
http://nginx.org/en/docs/stream/ngx_stream_core_module.html
NGINX 卸载
apt卸载nginx方法(仅限于使用apt-get install 安装的Nginx)
卸载方法1.
删除nginx,保留配置文件
sudo apt-get remove nginx
删除配置文件
rm -rf /etc/nginx
卸载方法2.
删除nginx连带配置文件
sudo apt-get purge nginx # Removes everything.
卸载不再需要的nginx依赖程序
sudo apt-get autoremove
NGINX Configuration
以下配置文件适用于 Nginx TCP 负载均衡
user root root;
#nginx进程数,建议按照cpu数目来指定,一般为它的倍数。
worker_processes 4;
#为每个进程分配cpu,上例中将8个进程分配到8个cpu,当然可以写多个,或者将一个进程分配到多个cpu。
worker_cpu_affinity 00010000 00100000 01000000 10000000;
error_log /usr/local/nginx/logs/error.log;
error_log /usr/local/nginx/logs/error.log notice;
error_log /usr/local/nginx/logs/error.log info;
#pid /usr/local/nginx/logs/nginx.pid;
worker_rlimit_nofile 204800;
#use epoll 使用epoll的I/O模型。
#worker_connections 每个进程允许的最多连接数
events {
use epoll;
worker_connections 204800;
}
stream {
upstream backend {
server 192.168.90.3:1883 max_fails=3 fail_timeout=30s;
server 192.168.90.5:1883 max_fails=3 fail_timeout=30s;
server 192.168.90.197:1883 max_fails=3 fail_timeout=30s;
}
server {
listen 192.168.90.5:29535;
proxy_connect_timeout 1s;
#proxy_timeout 3s;
proxy_pass backend;
}
}
Nginx 启动、停止、平滑启动、平滑升级
1.Nginx 启动
启动nginx,可以执行一下命令(默认安装位置):
/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
// 参数“-c”指定了配置文件的路径,如果不加,则Nginx会默认加载其安装目录的conf子目录中的ngin.conf
2.Nginx 停止
nginx的停止方法有很多种,一般是发送系统信号给nginx主进程来停止nginx。我们通过ps命令来查找nginx的主进程号
ps -ef |grep nginx
备注信息为“master process”它表示主进程。为“worker”的是子进程。
如果在nginx.conf中指定了pid文件存放路径,则该文件存放的就是nginx的主进程号。
如果没有指定,则默认存放在Nginx安装目录的log目录下。所以我们还可以这样做:
kill -信号类型 ‘/usr/local/nginx/logs/nginx.pid’
nginx支持以下几种信号:
TERM,INT :快速关闭
QUIT:从容关闭
HUP:平滑启动
USR1:重新打开日志文件
USR2:平滑升级可执行程序
EINCH:从容关闭工作进程
(1)从容停止nginx
kill -QUIT Nginx主进程号
(2)快速停止Nginx
kill -TERM Nginx主进程号
(3)强制停止所有nginx进程
pkill -9 Nginx主进程号
3.Nginx 平滑启动/Nginx 重加载
如果改变了配置文件,想重启让其生效,同样可以通过发送系统信号给Nginx主进程。
不过,在重启之前,要确认配置文件的语法是正确的,否则将不会加载新的配置项。
通过以下语句测试配置文件语法是否正确:
/usr/local/nginx/sbin/nginx -t -c /usr/local/nginx/conf/nginx.conf
// 其中-t表示测试,并不真正执行。
然后,通过以下命令重加载Nginx配置:
kill -HUP master进程号
执行上面命令之后,Nginx运行新的工作进程,旧工作进程继续为已有的连接服务,等所有旧的连接成功后,旧的工作进程才被关闭。
4.Nginx 平滑升级
当需要将正在运行的nginx升级、添加/删除服务器模块时,可以在不中断的情况下使用新版本、重编译的nginx可执行程序替换旧版本的可执行程序。步骤如下:
(1)备份旧的可执行程序
(2)发送以下指令
kill -USR2 旧的版本nginx主进程号
(3)旧版本的nginx的主进程将重命名他的pid文件为.oldbin。然后执行新版本的nginx可执行程序。依次启动新的主进程和新的工作进程。
(4)此时新旧版本的nginx会同时运行,共同处理输入请求。要逐步停止旧版本的nginx实例,需要发送WINCH信号给旧的主进程,然后他的工作进程就从容关闭:
kill -WINCH 旧版本的主进程号
(5)一段时间后,旧的工作进程处理完所有的已连接请求后退出,仅有新的工作进程来处理输入请求。
(6)这时候我们可以决定是使用新的版本还是恢复到旧版本。
5.Nginx 启动脚本
#!/bin/sh
# chkconfig: 2345 85 15
# description:Nginx Server
NGINX_HOME=/usr/local/nginx
NGINX_SBIN=$NGINX_HOME/sbin/nginx
NGINX_CONF=$NGINX_HOME/conf/nginx.conf
NGINX_PID=$NGINX_HOME/logs/nginx.pid
NGINX_NAME="Nginx"
. /etc/rc.d/init.d/functions
if [ ! -f $NGINX_SBIN ]
then
echo "$NGINX_NAME startup: $NGINX_SBIN not exists! "
exit
fi
start() {
$NGINX_SBIN -c $NGINX_CONF
ret=$?
if [ $ret -eq 0 ]; then
action $"Starting $NGINX_NAME: " /bin/true
else
action $"Starting $NGINX_NAME: " /bin/false
fi
}
stop() {
kill `cat $NGINX_PID`
ret=$?
if [ $ret -eq 0 ]; then
action $"Stopping $NGINX_NAME: " /bin/true
else
action $"Stopping $NGINX_NAME: " /bin/false
fi
}
restart() {
stop
start
}
check() {
$NGINX_SBIN -c $NGINX_CONF -t
}
reload() {
kill -HUP `cat $NGINX_PID` && echo "reload success!"
}
relog() {
kill -USR1 `cat $NGINX_PID` && echo "relog success!"
}
case "$1" in
start)
start
;;
stop)
stop
;;
restart)
restart
;;
check|chk)
check
;;
status)
status -p $NGINX_PID
;;
reload)
reload
;;
relog)
relog
;;
*)
echo $"Usage: $0 {start|stop|restart|reload|status|check|relog}"
exit 1
esac
上面是nginx的启动脚本,只要把它拷贝至/etc/init.d目录下,就可以通过service nginx start等目录操作nginx。