[实战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.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的,接下来再讨论
[实战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的过程相对简单,只需几个步骤:
-
克隆Tengine仓库:
cd /soft git clone git://github.com/alibaba/tengine.git
-
进入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
-
编译并安装:
sudo make sudo make install
-
启动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服务器。