您的位置:首页 > 运维架构 > Nginx

Nginx安装与性能优化

2015-11-26 10:24 671 查看

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。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: