Nginx安装与性能优化

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。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值