简单介绍了Nginx的优势以及如何编译安装Nginx

更新nginx安装脚本

nginx优点

支持高并发,基于异步网络IO模型epoll,kqueue。
CPU亲和,利用CPU亲和减少损耗提高并发处理能力。
处理静态文件效率高。
支持FastCGI,Uwsgi,SCGI接口。
支持正向代理,反向代理,可实现简单的负载均衡,有对节点服务器健康检查的功能。

为什么nginx支持高并发

nginx基于异步IO多路复用来解决并发问题。

CPU亲和是什么意思

默认情况下有可能多个进程跑在一个CPU上或某1核上,这样导致nginx进程使用资源不均匀。
把nginx的工作进程和cpu绑定,每个worker进程固定在一个CPU核心执行,可以更大程度利用资源。

为什么处理静态文件效率更高

nginx采用sendfile机制处理静态文件

  1. 传统的文件传输

    1. 调用read函数,文件数据被复制到内核缓冲区
    2. read函数返回,文件数据从内核缓冲区复制到用户缓冲区
    3. write函数调用,将文件数据从用户缓冲区复制到内核与socket相关的缓冲区。

    数据从socket缓冲区复制到相关协议引擎。
    硬盘—>内核buf—>用户buf—>socket缓冲区(内核)—>协议引擎
    可以看到经过多次上下文切才能拷贝和读取,效率不高

  2. sendfile文件传输

    1. 系统调用sendfile函数通过 DMA 把硬盘数据拷贝到 kernel buffer,
    2. 数据被 kernel 直接拷贝到另外一个与 socket 相关的 kernel buffer。
    3. DMA把数据从kernel buffer直接拷贝给协议栈。 这里没有用户空间和内核空间之间的切换,

    在内核中直接完成了从一个buffer到另一个buffer的拷贝。

总结:直接在内核中操作,避免了内核缓冲区数据和用户缓冲区数据之间的拷贝, 操作效率很高, 被称之为零拷贝。

nginx安装

依赖软件
yum install -y gcc gcc-c++ autoconf pcre pcre-devel openssl openssl-devel make automake

编译安装
# 下载nginx
wget http://nginx.org/download/nginx-1.8.1.tar.gz
# 首先为nginx启动创建用户
useradd www -s /sbin/nologin -M
# 解压进入目录
tar -xf nginx-1.8.1.tar.gz
cd nginx-1.8.1
./configure --user=www --group=www --prefix=/www/server/nginx-1.8.1 \
--with-http_ssl_module  --with-http_stub_status_module
# 建立个软链方便使用
ln -s /www/server/nginx-1.8.1/ /www/server/nginx
# 启动
/www/server/nginx/sbin/nginx
# 查看连接状态
netstat -lntup|grep nginx

shell脚本快速编译安装

这两个包是必要装的
pcre-devel: perl语言正则表达式兼容软件包
openssl-devel:使系统支持https方式访问

可根据需要进行编译参数的设定。

# 脚本文件名nginx.sh
#!/bin/bash

Nginx_Version='nginx-1.12.2'
Soft_Dir='/www/server'
Nginx_Dir=${Soft_Dir}/${Nginx_Version}


yum install -y gcc gcc-c++ autoconf pcre pcre-devel openssl openssl-devel make automake

useradd www -s /sbin/nologin -M

if [ ! -d ${Soft_Dir} ];then
    mkdir -p ${Soft_Dir}
fi

cd ~
if [ ! -f ${Nginx_Version}.tar.gz ];then
    wget http://nginx.org/download/${Nginx_Version}.tar.gz
fi
tar -xf ${Nginx_Version}.tar.gz
cd ${Nginx_Version}

./configure --user=www --group=www --prefix=/www/server/${Nginx_Version} --with-http_ssl_module --with-http_stub_status_module
make && make install

ln -sf ${Nginx_Dir} ${Soft_Dir}/nginx
ln -sf ${Soft_Dir}/nginx/sbin/nginx /usr/bin/nginx