Tengine

Nginx和Tengine

Nginx

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网站用户有:新浪、网易、腾讯等。

illustration

功能:

  • web服务器
  • web reverse proxy
  • smtp reverse proxy
  • Nginx和apache的优缺点

    #### nginx相对于apache的优点:

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

  • rewrite -比nginx 的rewrite 强大
  • 模块超多-基本想到的都可以找到
  • 少bug -nginx 的bug 相对较多
  • Nginx 配置简洁, Apache 复杂

    最核心的区别在于apache是同步多进程模型-一个连接对应一个进程;

    nginx是异步的-多个连接(万级别)可以对应一个进程

    Nginx解决的问题

  • 高并发
  • 负载均衡
  • 高可用
  • 虚拟主机
  • 伪静态
  • 动静分离
  • 安装

    准备工作

    #### 操作系统

    最好使用linux操作系统-课上使用VirtualBox或VMware虚拟机搭建centos6.x做实验。

    系统依赖组件 gcc openssl-devel pcre-devel zlib-devel

    安装:yum install gcc openssl-devel pcre-devel zlib-devel

    #### Tengine下载和文档

    http://tengine.taobao.org/

    #### Nginx官网和文档

    http://nginx.org

    上传Nginx压缩包到服务器-一般安装在/usr/local目录下

    编译安装

    ``shell ./ configure --prefix=/安装路径make && make install `

    启动服务

    脚本自启动

    拷贝附件提供的Nginx启动脚本文件内容到/etc/init.d/nginx这个文件中

    目录下如果没有这个文件的话需要手动创建

    #### 修改可执行权限

    chmod 777 nginx

    #### 启动服务

    service Nginx start 启动服务

    service Nginx stop 停止

    service Nginx status 状态

    service Nginx reload 动态重载配置文件

    #### 脚本内容:

    `shell #!/bin/sh## nginx - this script starts and stops the nginx daemon## chkconfig: - 85 15 # description: Nginx is an HTTP(S) server, HTTP(S) reverse # proxy and IMAP/POP3 proxy server# processname: nginx# config: /etc/nginx/nginx.conf# config: /etc/sysconfig/nginx# pidfile: /var/run/nginx.pid # Source function library.. /etc/rc.d/init.d/functions # Source networking configuration.. /etc/sysconfig/network # Check that networking is up.[ "$NETWORKING" = "no" ] && exit 0 nginx="/usr/local/tengine/sbin/nginx"prog=$(basename $nginx) NGINX_CONF_FILE="/usr/local/tengine/conf/nginx.conf" [ -f /etc/sysconfig/nginx ] && . /etc/sysconfig/nginx lockfile=/var/lock/subsys/nginx make_dirs() { # make required directories user=nginx -V 2>&1 | grep "configure arguments:" | sed 's/[^*]*--user=([^ ]*).*/\1/g' - options=$nginx -V 2>&1 | grep 'configure arguments:' for opt in $options; do if [ echo $opt | grep '.*-temp-path' ]; then value=echo $opt | cut -d "=" -f 2 if [ ! -d "$value" ]; then # echo "creating" $value mkdir -p $value && chown -R $user $value fi fi done} start() { [ -x $nginx ] || exit 5 [ -f $NGINX_CONF_FILE ] || exit 6 make_dirs echo -n $"Starting $prog: " daemon $nginx -c $NGINX_CONF_FILE retval=$? echo [ $retval -eq 0 ] && touch $lockfile return $retval} stop() { echo -n $"Stopping $prog: " killproc $prog -QUIT retval=$? echo [ $retval -eq 0 ] && rm -f $lockfile return $retval} restart() { configtest || return $? stop sleep 1 start} reload() { configtest || return $? echo -n $"Reloading $prog: " killproc $nginx -HUP RETVAL=$? echo} force_reload() { restart} configtest() { $nginx -t -c $NGINX_CONF_FILE} rh_status() { status $prog} rh_status_q() { rh_status >/dev/null 2>&1} case "$1" in start) rh_status_q && exit 0 $1 ;; stop) rh_status_q || exit 0 $1 ;; restart|configtest) $1 ;; reload) rh_status_q || exit 7 $1 ;; force-reload) force_reload ;; status) rh_status ;; condrestart|try-restart) rh_status_q || exit 0 ;; *) echo $"Usage: $0 {start|stop|status|restart|condrestart|try-restart|reload|force-reload|configtest}" exit 2esac `

    Nginx配置解析

    定义Nginx运行的用户和用户组

    user www www;

    进程数

    建议设置为等于CPU总核心数。

    worker_processes 8;

    全局错误日志

    全局错误日志定义类型-[ debug | info | notice | warn | error | crit ]

    error_log /var/log/nginx/error.log