1. Nginx介绍和部署

Nginx 和Tengine介绍

Nginx

(1)Nginx ("engine x") 是一个高性能的 HTTP 和 反向代理 服务器,也是一 个 IMAP/POP3/SMTP 代理服务器。

  • 第一个公开版本0.1.0发布于2004年10月4日

  • 其将源代码以类BSD许可证的形式发布,因它的稳定性、丰富的功能集、示例配置文件和低系统资源的消耗而闻名

  • 官方测试nginx能够支支撑5万并发链接,并且cpu、内存等资源消耗却非常低,运行非常稳定

  • 2011年6月1日,nginx 1.0.4发布。

  • Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器

  • 并在一个BSD-like 协议下发行。由俄罗斯的程序设计师Igor Sysoev所开发

  • 其特点是占有内存少,并发能力强,事实上nginx的并发能力确实在同类型的网页服务器中表现较好,中国大陆使用nginx网站用户有:新浪、网易、腾讯等。

(2)功能:

  • web服务器

  • web reverse proxy

  • smtp reverse proxy

(3)Nginx和apache的优缺点

  • 1、nginx相对于apache的优点:轻量级,同样起web 服务,比apache 占用更少的内存及资源抗并发,nginx 处理请求是异步非阻塞的,而apache 则是阻塞型的,在高并发下nginx能保持低资源低消耗高性能;高度模块化的设计,编写模块相对简单;社区活跃,各种高性能模块出品迅速

  • 2.apache 相对于nginx 的优点:rewrite ,比nginx 的rewrite 强大;模块超多,基本想到的都可以找到;少bug ,nginx 的bug 相对较多

  • 3、Nginx 配置简洁, Apache 复杂

  • 4、最核心的区别在于apache是同步多进程模型,一个连接对应一个进程;nginx是异步的,多个连接(万级别)可以对应一个进程

Tengine

Tengine 是nginx的加强版,封装版,淘宝开源

  • 动态模块加载(DSO)支持。加入一个模块不再需要重新编译整个Tengine;

  • 支持SO_REUSEPORT选项,建连性能提升为官方nginx的三倍;

  • 支持SPDY v3协议,自动检测同一端口的SPDY请求和HTTP请求;

  • 流式上传到HTTP后端服务器或FastCGI服务器,大量减少机器的I/O压力;

  • 更加强大的负载均衡能力,包括一致性hash模块、会话保持模块,还可以对后端的服务器进行主动健康检查,根据服务器状态自动上线下线,以及动态解析upstream中出现的域名;

  • 输入过滤器机制支持。通过使用这种机制Web应用防火墙的编写更为方便;

  • 支持设置proxy、memcached、fastcgi、scgi、uwsgi在后端失败时的重试次数

  • 动态脚本语言Lua支持。扩展功能非常高效简单;

  • 支持管道(pipe)和syslog(本地和远端)形式的日志以及日志抽样;

  • 支持按指定关键字(域名,url等)收集Tengine运行状态;

  • 组合多个CSS、JavaScript文件的访问请求变成一个请求;

  • 自动去除空白字符和注释从而减小页面的体积

Tengine安装

为了锻炼自己的写脚本的能力,所以这里我写了一个脚本自动化安装Tenginx, 相关软件和配置文件下载地址请点击这里

将这三个文件上传到/root目录下,给脚本添加执行权限执行脚本即可

chmod 755 tengine.sh
sh tengine.sh

脚本内容:

#!/bin/bash
mkdir -p /root/nginx_install/
touch /root/nginx_install/nginx_install.log
log=/root/nginx_install/nginx_install.log
Timestamp=`date "+%Y-%m-%d %H:%M:%S"`
# 检查环境
check_env()
{
echo -e "$Timestamp 关闭防火墙" >> $log
systemctl stop firewalld >> $log 2>&1
echo -e "$Timestamp 禁用防火墙开机启动" >> $log
systemctl disable firewalld >> $log 2>&1
echo -e "$Timestamp 禁用selinux" >> $log
sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
setenforce 0 >> $log 2>&1
echo -e "$Timestamp 检查防火墙状态" >> $log
systemctl status firewalld >> $log 2>&1
status=`echo $?`
if [ $status -gt 0 ]
then
echo -e "$Timestamp 环境初始化完成 " >> $log
echo -e "\033[1;32m$Timestamp 环境初始化完成 \033[0m"
else
echo -e "$Timestamp 防火墙关闭失败,请手动关闭 " >> $log
echo echo -e "\033[1;31m$Timestamp 防火墙关闭失败,请手动关闭 \033[0m" && exit
fi
}
# 安装依赖
install_rely()
{
echo -e "$Timestamp 安装依赖" >> $log
yum -y install gcc openssl-devel pcre-devel zlib-devel dos2unix >> $log 2>&1
if [ $status -gt 0 ]
then
echo -e "$Timestamp 依赖安装完成 " >> $log
echo -e "\033[1;32m$Timestamp 依赖安装完成 \033[0m"
else
echo -e "$Timestamp 依赖安装失败 " >> $log
echo echo -e "\033[1;31m$Timestamp 依赖安装失败,请检查你的yum源 \033[0m" && exit
fi
}
#编译安装tengine
install_tengine()
{
echo -e "$Timestamp 创建文件夹" >> $log
HOME_DIR=/var/tmp/nginx/client/
if [ ! -d $HOME_DIR ]; then
echo "create dir $HOME_DIR" >> $log
mkdir -p $HOME_DIR
fi
echo -e "$Timestamp 编译tengine" >> $log
tar -zxf tengine-2.1.0.tar.gz
cd tengine-2.1.0/
./configure --prefix=/opt/sxt/soft/tengine-2.1.0/ --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --pid-path=/var/run/nginx/nginx.pid --lock-path=/var/lock/nginx.lock --with-http_ssl_module --with-http_flv_module --with-http_stub_status_module --with-http_gzip_static_module --http-client-body-temp-path=/var/tmp/nginx/client/ --http-proxy-temp-path=/var/tmp/nginx/proxy/ --http-fastcgi-temp-path=/var/tmp/nginx/fcgi/ --http-uwsgi-temp-path=/var/tmp/nginx/uwsgi --http-scgi-temp-path=/var/tmp/nginx/scgi --with-pcre >> $log
make >> $log
make install >> $log
if [ $status -gt 0 ]
then
echo -e "$Timestamp 编译安装成功 " >> $log
echo -e "\033[1;32m$Timestamp 编译安装成功 \033[0m"
else
echo -e "$Timestamp 编译安装失败 " >> $log
echo echo -e "\033[1;31m$Timestamp 编译安装失败,请检查你的配置 \033[0m" && exit
fi
}
# 拷贝配置文件
copy_files()
{
echo -e "$Timestamp 拷贝文件" >> $log
cd /root
cp ./nginx /etc/rc.d/init.d
dos2unix /etc/rc.d/init.d/nginx >> $log 2>&1
chmod 755 /etc/rc.d/init.d/nginx
if [ $status -gt 0 ]
then
echo -e "$Timestamp 拷贝文件完成 " >> $log
echo -e "\033[1;32m$Timestamp 拷贝文件完成 \033[0m"
else
echo -e "$Timestamp 拷贝文件失败 " >> $log
echo echo -e "\033[1;31m$Timestamp 拷贝文件失败,请检查你的配置文件 \033[0m" && exit
fi
}
# 启动tengine
start_nginx()
{
echo -e "$Timestamp 启动nginx" >> $log
/etc/rc.d/init.d/nginx start >> $log
chkconfig --add nginx
chkconfig nginx on
if [ $status -gt 0 ]
then
echo -e "$Timestamp 启动tengine成功 " >> $log
echo -e "\033[1;32m$Timestamp 启动tengine成功 \033[0m"
else
echo -e "$Timestamp 启动tengine失败,请检查你的配置文件 " >> $log
echo echo -e "\033[1;31m$Timestamp 启动tengine失败,请检查你的配置文件 \033[0m" && exit
fi
}
#检查是否安装成功
check_server()
{
ip=`ip -o -f inet addr |grep -E eno'[0-9]' |awk '{print $4}'|awk -F '/' '{print $1}'`
curl http://$ip >> $log 2>&1
if [ $status -gt 0 ];then
echo -e "$Timestamp tengine安装成功 " >> $log
echo -e "\033[1;32m$Timestamp tengine安装成功 \033[0m"
echo -e "\033[1;32m请在浏览器输入:http://$ip 访问页面 \033[0m"
else
echo -e "$Timestamp tengine安装失败,请检查配置文件 " >> $log
echo -e "\033[1;31m$Timestamp tengine安装失败,请检查配置文件 \033[0m" && exit
fi
}
check_env;
install_rely;
install_tengine;
copy_files;
start_nginx;
check_server;

安装完成如图所示:

3-2-1