[实战AWS EC2]六、基于Ubuntu,Tengine服务器构建Git管理Nodejs,Redis,MongoDB的网站(更新中)

[实战AWS EC2]六、基于Ubuntu,Tengine服务器构建Git管理Nodejs,Redis,MongoDB的网站(更新中)

**技术交流加入QQ群:261654896 **

实战AWS EC2文章目录http://cnodejs.org/topic/5295e58aa6957a0809b0fe43

Tengine是Nginx的一个超集,它基于Nginx的最新稳定版本,对其核心进行扩展和增强,同时保持对Nginx的100%向后兼容性。使用Nginx为Web服务器的业务可以无缝迁移到Tengine。

Lua模块

基于降低Nginx模块开发难度的初衷,Lua模块(ngx_lua)将Lua嵌入进Nginx核心中,借助 于Lua的协程和Nginx的事件模型实现同步、非阻塞的I/O操作,开发者在Nginx配置文件中可串行同步编写Lua脚本来处理业务逻辑,既可以用它来黏合各种上游(Proxy、Drizzle、Redis、Memcached等)的输出,也可以使用它的Cosocket接口来编写访问上游的客户端。得益于Lua解释器极低的开销和JIT技术(LuaJIT),用户不用编写复杂的C模块就能获得极高的吞吐性能。也可以动态更改逻,不用再重新编译Nginx代码,从而带来了极大的灵活性。

Concat模块

可以组合多个JavaScript和CSS请求变成一个,从而降低下载时间,提高用户体验。该模块对于提高前端的响应时间非常有用。

Sysguard模块

在系统的Load或者内存(Swap)使用超过一定阈值或比例时返回等待页面,从而保护服务器。

User_agent模块

利用trie结构,扫描浏览器和爬虫的种类,定义$browser和$os变量,比Nginx的Browser模块更加 灵活且性能更高。

** Footer模块**

在响应内容后添加一段内容。可用来添加Host信息,对定位大量服务器中出问题的个别机器很有用。 ** Slice模块**

用来访问一个文件中的一个片段,可以指定开始和结束的偏移值也可以增加头和尾。

** Backtrace模块**

在遇到异常如崩溃时将调用栈输出到日志以便于问题定位。

** 主动式Upstream健康检查模块**

可以对后端的HTTP、HTTPS、MySQL等类型的服务器定期发起心跳包,维护后端的健康情况,当 服务器不可用时,就不再向其发送实际请求。实现了Tengine与后端服务器的高可用。

以上是来自TMD对Tengine的描述,经过我的查证以下的网站Web服务器全是使用的Tengine
可以alibaba技术团队对Tengine的重视,事实上它就是对nginx提供了更多的module而已

淘宝网:www.taobao.com

天猫:www.tmall.com

一淘:www.etao.com

阿里妈妈:www.alimama.com

阿里云:www.aliyun.com

云OS:www.yunos.com

阿里巴巴中国站:www.1688.com

全球速卖通:www.aliexpress.com

安装过程也十分简单

先进到到某个目录比如 /soft

git clone git://github.com/alibaba/tengine.git

cd tengine

./configure

make

sudo make install

**启动Tengine **
事实上Tengine安装后的目录还是nginx的目录

sudo /usr/local/nginx/sbin/nginx

当修改了nginx.conf文件

sudo /usr/local/nginx/sbin/nginx -s reload

可以使用nginx -m来查看所有的module

sudo /usr/local/nginx/sbin/nginx -m

可以使用nginx -l来查看所有可用的方法

sudo /usr/local/nginx/sbin/nginx -l

**因为concat module没有默认安装到Tenginx所以要执行–with-http_concat_module,这个module的作用就是一次性的读到所有的js文件或是css文件。 **

比如:http://phoneqq.com/javascripts/??a.js,b.js,c.js?v=123
或者:http://sogego.com/stylesheets/??a.css,b.css,c.css?v=456

#为了使用Lua语言先要安装lua5.1,如下操作

-------安装 module----

**在任何目录下执行 安装taobao的lua **

sudo apt-get install lua5.1

sudo apt-get install liblua5.1-dev

cd /soft 目录

**下载NDK、lua模块、redis模块,来自淘宝 **

git clone https://github.com/simpl/ngx_devel_kit.git

git clone https://github.com/chaoslawful/lua-nginx-module.git

git clone https://github.com/agentzh/redis2-nginx-module.git

git clone https://github.com/agentzh/set-misc-nginx-module.git

git clone https://github.com/agentzh/echo-nginx-module.git

cd tengine 源代码目录 ,我们当时载到了/soft目录下,也就是/soft/tengine目录,执行configure,如下:添加了上面的module,其中concat和sysguard要用tengine自带的with,而不是add-module,因为tengine默认包括了它们两个module

./configure --with-http_concat_module --with-http_sysguard_module --add-module=…/ngx_devel_kit --add-module=…/lua-nginx-module --add-module=…/redis2-nginx-module --add-module=…/set-misc-nginx-module --add-module=…/echo-nginx-module

sudo make

sudo make install

**如果已安装nginx,不需要执行这一步,只要make就行了。 **

**安装lua-redis-parser lua-redis-parser为本机编译链接库,不是nginx module **

cd /soft 目录

git clone https://github.com/agentzh/lua-redis-parser.git

cd lua-redis-parser

export LUA_INCLUDE_DIR=/usr/include/lua5.1

make CC=gcc

make install CC=gcc

#最后,有关tengine(nginx)操作lua,快速读取redis的,接下来再讨论


2 回复

[实战AWS EC2] 六、基于Ubuntu, Tengine服务器构建Git管理Nodejs, Redis, MongoDB的网站(更新中)


技术交流加入QQ群:261654896


文章目录


Tengine介绍

Tengine是Nginx的一个超集,它基于Nginx的最新稳定版本,并对其进行增强,同时保持了对Nginx的100%向后兼容性。这意味着你可以无缝地从Nginx迁移到Tengine。


Lua模块

Tengine的Lua模块允许你在Nginx配置文件中直接使用Lua脚本来处理业务逻辑。这不仅降低了模块开发的难度,还提高了灵活性和性能。例如:

# 配置一个简单的Lua脚本
http {
    lua_package_path "/path/to/lua/scripts/?.lua;;";

    server {
        location /test {
            content_by_lua_file /path/to/lua/test.lua;
        }
    }
}

在这个例子中,content_by_lua_file指令指定了一个Lua脚本文件的位置,该脚本将在匹配/test路径时被执行。


Concat模块

Concat模块可以将多个JavaScript和CSS文件合并成一个文件,以减少HTTP请求次数,提高页面加载速度。配置如下:

http {
    server {
        location /stylesheets/ {
            concat on;
            concat_max_files 20;
        }

        location /javascripts/ {
            concat on;
            concat_max_files 20;
        }
    }
}

上述配置将合并最多20个JavaScript和CSS文件。


Sysguard模块

Sysguard模块可以在系统负载或内存使用超过阈值时返回等待页面,以保护服务器不被压垮。配置示例如下:

http {
    server {
        location / {
            sysguard_load_threshold 5;
            sysguard_memory_threshold 80;
        }
    }
}

上述配置将设置负载阈值为5,内存使用阈值为80%。


User_agent模块

User_agent模块可以根据不同的浏览器类型返回不同的内容。配置示例如下:

http {
    server {
        if ($http_user_agent ~* "Chrome") {
            return 200 "You are using Chrome";
        }
    }
}

上述配置将检查用户的User-Agent字符串,如果是Chrome浏览器,则返回特定消息。


安装Tengine

安装Tengine的过程相对简单,只需几个步骤:

  1. 克隆Tengine仓库:

    cd /soft
    git clone git://github.com/alibaba/tengine.git
    
  2. 进入Tengine目录并配置:

    cd tengine
    ./configure --with-http_concat_module --with-http_sysguard_module --add-module=../ngx_devel_kit --add-module=../lua-nginx-module --add-module=../redis2-nginx-module --add-module=../set-misc-nginx-module --add-module=../echo-nginx-module
    
  3. 编译并安装:

    sudo make
    sudo make install
    
  4. 启动Tengine:

    sudo /usr/local/nginx/sbin/nginx
    

使用Lua读取Redis数据

首先需要安装Lua和相关的依赖:

sudo apt-get install lua5.1
sudo apt-get install liblua5.1-dev

然后安装lua-redis-parser:

cd /soft
git clone https://github.com/agentzh/lua-redis-parser.git
cd lua-redis-parser
export LUA_INCLUDE_DIR=/usr/include/lua5.1
make CC=gcc
make install CC=gcc

接下来,你可以在Lua脚本中使用这些模块来读取Redis数据:

local redis = require "resty.redis"
local red = redis:new()

red:set_timeout(1000) -- 设置超时时间为1秒

-- 连接到Redis
local ok, err = red:connect("127.0.0.1", 6379)
if not ok then
    ngx.say("failed to connect: ", err)
    return
end

-- 设置一个键值对
ok, err = red:set("key", "value")
if not ok then
    ngx.say("failed to set: ", err)
    return
end

-- 获取键对应的值
local res, err = red:get("key")
if not res then
    ngx.say("failed to get key: ", err)
    return
end

ngx.say("key: ", res)

通过以上步骤,你可以在基于Ubuntu的AWS EC2实例上搭建一个高效且安全的Web服务器,集成Node.js、Redis、MongoDB,并使用Tengine进行管理和优化。


在本帖中,我们将重点介绍如何在Ubuntu上使用Tengine服务器构建一个可以管理Node.js、Redis和MongoDB的网站。以下是具体的步骤和一些代码示例。

1. 安装Tengine

首先,我们需要从GitHub克隆Tengine仓库并安装它:

# 进入指定目录
cd /soft

# 克隆Tengine
git clone git://github.com/alibaba/tengine.git

# 进入目录并配置
cd tengine
./configure --with-http_concat_module --with-http_sysguard_module \
            --add-module=../ngx_devel_kit --add-module=../lua-nginx-module \
            --add-module=../redis2-nginx-module --add-module=../set-misc-nginx-module \
            --add-module=../echo-nginx-module

# 编译和安装
make
sudo make install

2. 安装Lua和相关模块

接下来,需要安装Lua及其相关的Nginx模块:

sudo apt-get install lua5.1 liblua5.1-dev

# 安装必要的Lua Nginx模块
git clone https://github.com/simpl/ngx_devel_kit.git
git clone https://github.com/chaoslawful/lua-nginx-module.git
git clone https://github.com/agentzh/redis2-nginx-module.git
git clone https://github.com/agentzh/set-misc-nginx-module.git
git clone https://github.com/agentzh/echo-nginx-module.git

# 编译安装Lua Redis解析器
cd /soft/lua-redis-parser
export LUA_INCLUDE_DIR=/usr/include/lua5.1
make CC=gcc
make install CC=gcc

3. 配置Tengine

编辑Tengine配置文件nginx.conf,添加以下内容以支持Lua和Redis:

http {
    ...
    lua_package_path "/path/to/lua-redis-parser/lib/?.lua;;";
    
    server {
        listen 80;
        
        location / {
            default_type text/html;
            content_by_lua_file /path/to/your/script.lua;
        }
        
        location /redis {
            redis2_query get mykey;
            echo $redis2_result;
        }
    }
}

4. 启动Tengine

确保一切配置正确后,启动Tengine服务器:

sudo /usr/local/nginx/sbin/nginx

5. 使用Git管理项目

使用Git来管理你的Node.js、Redis和MongoDB项目:

git clone https://github.com/your/repo.git
cd repo
npm install

6. 运行Node.js应用

启动你的Node.js应用:

node app.js

通过上述步骤,你可以在Ubuntu上搭建一个使用Tengine、Node.js、Redis和MongoDB的高效Web服务器。

回到顶部