# 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的加强版,封装版,淘宝开源
- 官网http://tengine.taobao.org/
- 动态模块加载(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,
相关软件和配置文件下载地址[请点击这里](https://pan.baidu.com/s/1LTibB7OviT5pwWk0DFfttg)
将这三个文件上传到/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](http://pded8ke3e.bkt.clouddn.com/3-2-1.png)
- 献给我的朋友们
- 一、个人对学习的看法
- 二、运维技能图谱
- 三、运维常用技能
- 3.1 Vim(最好用的编辑器)
- 3.2 Nginx & Tengine(Web服务)
- 1. Nginx介绍和部署
- 2. Nginx配置解析
- 3. Nginx常用模块
- 4. Nginx 的session 一致性问题
- 3.3 Tomcat(Web中间件)
- 3.4 Keepalived(负载均衡高可用)
- 3.5 Memcache(分布式缓存)
- 3.6 Zookeeper(分布式协调系统)
- 3.7 KVM(开源虚拟化)
- 1. 虚拟化介绍
- 2. KVM基础
- 3. 设置VNC和时间同步
- 4. kvm虚拟机快照备份
- 5. kvm虚拟机在线扩展磁盘
- 6. kvm虚拟机静态迁移
- 7. kvm虚拟机动态迁移
- 8. kvm虚拟机存储池配置
- 9. cpu添加虚拟化功能
- 3.8 GitLab(版本控制)
- 3.8.1 GitLab安装与汉化
- 3.9 Jenkins(运维自动化)
- 3.10 WAF(Web防火墙)
- 3.10.1初探WAF
- 四、常用数据库
- 4.1 MySQL(关系型数据库)
- 1. MySQL源码安装
- 4.2 Mongodb(适用与大数据分析的数据库)
- 4.3 Redis(非关系数据库)
- 五、自动化运维工具
- 5.1 Cobbler(系统自动化部署)
- 5.2 Ansible(自动化部署)
- 5.3 Puppet(自动化部署)
- 5.4 SaltStack(自动化运维)
- 六、存储
- 6.1 GFS(文件型存储)
- 6.2 Ceph(后端存储)
- 七、运维监控工具
- 7.1 对监控的理解
- 7.2 Zabbix(运维监控)
- 7.2.1 Zabbix简介
- 7.2.2 Zabbix服务部署
- 1. Zabbix服务端部署
- 2. Zabbix客服端部署
- 3. 配置前端展示
- 4. zabbix告警配置
- 7.2.3 Zabbix监控服务
- 1. 监控网络设备
- 2. 自定义Nginx监控
- 7.3 云镜(安全监控)
- 7.4 ELK(日志收集展示)
- 八、运维云平台
- 8.1 OpenStack(开源云操作系统)
- 8.1.1 OpenStack简介
- 8.1.2 实验架构设计
- 8.1.3 集群环境准备
- 8.1.4 controller节点部署
- 1. 安装Mariadb Galera Cluster集群
- 2. 安装RabbitMQ Cluster集群
- 3. 安装Pacemaker
- 4. 安装HAProxy
- 5. 安装配置Keystone
- 6. 安装配置glance
- 1. 制作镜像模板
- 7. 安装配置nova
- 8. 安装配置neutron
- 1. 配置虚拟机网络
- 9. 安装Dashboard
- 10. 安装配置cinder
- 8.1.5 compute节点部署
- 1. 安装相关软件包
- 2. 安装Neutron
- 3. 配置cinder
- 4. 创建第一个虚拟机
- 8.1.6 OpenStack报错处理
- 1. cinder僵尸卷删除
- 8.1.7 快速孵化虚拟机方案
- 8.1.8 Kolla容器化部署OpenStack
- 1. 单点部署
- 2. 多节点部署
- 8.2 Tstack(腾讯云平台)
- 8.3 K8s(微服务容器化)
- 九、运维编程技能
- 9.1 Shell(运维必会语言)
- 9.2 Python(万能的胶水语言)
- 十、Devops运维
- 10.1 理念
- 10.2 Devops实战