ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
# 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)