高并发 Nginx+Lua OpenResty系列(1)——环境搭建
OpenResty是一款基于Nginx的高性能负载均衡服务器容器,简单来说是Nginx+Lua。结合了Lua语言来对Nginx进行扩展,使得在Nginx上具有web容器功能。
OpenResty运行环境搭建
首先是在CentOS 7.6上的安装过程:
cd /opt
安装编译所需要的环境:
yum install readline-devel pcre-devel openssl-devel gcc
去OpenResty的官网下载安装包:
地址:http://openresty.org/cn/download.html
复制下载地址:
wget https://openresty.org/download/openresty-1.15.8.1.tar.gz
解压文件:
tar -xvzf openresty-1.15.8.1.tar.gz
cd openresty-1.15.8.1
安装OpenResty并设置安装目录为/opt/openresty,如果不做设置,默认会安装至/usr/local/openresty:
./configure --with-cc-opt="-I/usr/local/include" --with-ld-opt="-L/usr/local/lib" --prefix=/opt/openresty
make
make install
至此,OpenResty安装完成,可以尝试启动:
/opt/openresty/nginx/sbin/nginx -c /opt/openresty/nginx/conf/nginx.conf -p /opt/openresty/nginx/
可以查看端口占用:
netstat -tnlp
从图中可以看出nginx已经在监听80端口,用浏览器访问服务器的80端口,如图:
OpenResty已经成功启动
在修改相关配置文件后,需先停止服务,再做启动:
/opt/openresty/nginx/sbin/nginx -s stop
/opt/openresty/nginx/sbin/nginx -c /opt/openresty/nginx/conf/nginx.conf -p /opt/openresty/nginx/
nginx+lua 开发环境配置:
1. 编辑nginx.conf配置文件
vi /opt/openresty/nginx/conf/nginx.conf
2. 在http部分添加如下配置
#lua模块路径,多个之间”;”分隔,其中”;;”表示默认搜索路径,默认到/usr/servers/nginx下找
lua_package_path "/opt/openresty/lualib/?.lua;;"; #lua 模块
lua_package_cpath "/opt/openresty/lualib/?.so;;"; #c 模块
3. 为了方便开发在/opt/openresty/nginx/conf目录下创建一个lua.conf
#lua.conf
server {
listen 80;
server_name _;
}
4 在nginx.conf中的http部分添加include lua.conf包含此文件片段
include lua.conf;
5. 测试是否正常
/opt/openresty/nginx/sbin/nginx -t
如果如下图所示,表示配置添加成功
Hello world
1.在lua.conf中server部分添加如下配置
location /lua {
default_type 'text/html';
content_by_lua 'ngx.say("hello world")';
}
2. 测试配置是否正确
/opt/openresty/nginx/sbin/nginx -t
3. 重启nginx
/opt/openresty/nginx/sbin/nginx -s stop
/opt/openresty/nginx/sbin/nginx -c /opt/openresty/nginx/conf/nginx.conf -p /opt/openresty/nginx/
4. 访问域名http://xxx.xxx.xxx/lua(自己的机器根据实际情况换ip),可以看到如下内容
hello world
5. lua代码文件
我们把lua代码放在nginx配置中会随着lua的代码的增加导致配置文件太长不好维护,因此我们应该把lua代码移到外部文件中存储。
vi /opt/openresty/nginx/conf/lua/test.lua
我这里把代码放在nginx/config/lua中
修改lua.conf,在http下增加
content_by_lua_file conf/lua/test.lua; #相对于nginx安装目录
现在lua.conf整体为:
#lua.conf
server {
listen 80;
server_name _;
location /lua {
default_type 'text/html';
content_by_lua_file conf/lua/test.lua; #相对于nginx安装目录
}
}
此处conf/lua/test.lua也可以使用绝对路径/usr/servers/nginx/conf/lua/test.lua。
6. lua_code_cache
默认情况下lua_code_cache 是开启的,即缓存lua代码,即每次lua代码变更必须reload nginx才生效,如果在开发阶段可以通过lua_code_cache off;关闭缓存,这样调试时每次修改lua代码不需要reload nginx;但是正式环境一定记得开启缓存。
#lua.conf
server {
listen 80;
server_name _;
location /lua {
default_type 'text/html';
lua_code_cache off;
content_by_lua_file conf/lua/test.lua; #相对于nginx安装目录
}
}
开启后reload nginx会看到如下报警
nginx: [alert] lua_code_cache is off; this will hurt performance in /opt/openresty/nginx/conf/lua.conf:7
7. 错误日志
如果运行过程中出现错误,请不要忘记查看错误日志。
tail -f /opt/openresty/nginx/logs/error.log
到此,基本环境搭建完毕。
nginx+lua项目构建
以后我们的nginx lua开发文件会越来越多,我们应该把其项目化,已方便开发。项目目录结构如下所示:
OpenResty
其中我们把lualib也放到项目中的好处就是以后部署的时候可以一起部署,防止有的服务器忘记复制依赖而造成缺少依赖的情况。
我们将项目放到到/usr/openResty目录下。
nginx.conf配置文件修改includ的conf文件,修改为我们项目中的conf,同时修改引入lualib的地址
#lua模块路径,多个之间”;”分隔,其中”;;”表示默认搜索路径,默认到/usr/servers/nginx下找
lua_package_path "/usr/openResty/lualib/?.lua;;"; #lua 模块
lua_package_cpath "/usr/openResty/lualib/?.so;;"; #c 模块
include /usr/openResty/openResty.conf;
通过绝对路径包含我们的lua依赖库和nginx项目配置文件。
/usr/openResty/openResty.conf的内容如下:
server {
listen 80;
server_name _;
location /lua {
default_type 'text/html';
lua_code_cache off;
content_by_lua_file /usr/openResty/lua/test.lua;
}
}
lua文件我们使用绝对路径/usr/openResty/lua/test.lua
到此,整个openResty就可以扔到github上了。
github:git@github.com:meteor1993/openResty.git
高并发 Nginx+Lua OpenResty系列(1)——环境搭建的更多相关文章
- 高并发 Nginx+Lua OpenResty系列(3)——模块指令
Nginx Lua 模块指令 Nginx共11个处理阶段,而相应的处理阶段是可以做插入式处理,即可插拔式架构:另外指令可以在http.server.server if.location.locatio ...
- 高并发 Nginx+Lua OpenResty系列(11)——流量复制/AB测试/协程
流量复制 在实际开发中经常涉及到项目的升级,而该升级不能简单的上线就完事了,需要验证该升级是否兼容老的上线,因此可能需要并行运行两个项目一段时间进行数据比对和校验,待没问题后再进行上线.这其实就需要进 ...
- 高并发 Nginx+Lua OpenResty系列(10)——商品详情页
本章以京东商品详情页为例,京东商品详情页虽然仅是单个页面,但是其数据聚合源是非常多的,除了一些实时性要求比较高的如价格.库存.服务支持等通过AJAX异步加载加载之外,其他的数据都是在后端做数据聚合然后 ...
- 高并发 Nginx+Lua OpenResty系列(9)——HTTP服务
此处我说的HTTP服务主要指如访问京东网站时我们看到的热门搜索.用户登录.实时价格.实时库存.服务支持.广告语等这种非Web页面,而是在Web页面中异步加载的相关数据.这些服务有个特点即访问量巨大.逻 ...
- 高并发 Nginx+Lua OpenResty系列(2)——Nginx Lua API
Nginx Lua API 和一般的Web Server类似,我们需要接收请求.处理并输出响应.而对于请求我们需要获取如请求参数.请求头.Body体等信息:而对于处理就是调用相应的Lua代码即可:输出 ...
- 高并发 Nginx+Lua OpenResty系列(8)——Lua模版渲染
模版渲染 动态web网页开发是Web开发中一个常见的场景,比如像京东商品详情页,其页面逻辑是非常复杂的,需要使用模板技术来实现.而Lua中也有许多模板引擎,如目前京东在使用的lua-resty-tem ...
- 高并发 Nginx+Lua OpenResty系列(5)——Lua开发库Redis
Redis客户端 lua-resty-redis是为基于cosocket API的ngx_lua提供的Lua redis客户端,通过它可以完成Redis的操作.默认安装OpenResty时已经自带了该 ...
- 高并发 Nginx+Lua OpenResty系列(4)——Lua 模块开发
在实际开发中,不可能把所有代码写到一个大而全的lua文件中,需要进行分模块开发:而且模块化是高性能Lua应用的关键.使用require第一次导入模块后,所有Nginx 进程全局共享模块的数据和代码,每 ...
- 高并发 Nginx+Lua OpenResty系列(7)——Lua开发库json
JSON库 在进行数据传输时JSON格式目前应用广泛,因此从Lua对象与JSON字符串之间相互转换是一个非常常见的功能:目前Lua也有几个JSON库,如:cjson.dkjson.其中cjson的语法 ...
随机推荐
- jQuery整体架构
(function(global, factory) { factory(global); }(typeof window !== "undefined" ? window : t ...
- 对偶空间(dual linear space)
1. 定义 设 V 为定义在数域 F 上的向量空间,定义 V 上的线性函数是从 V 到 F 的映射:f:V→F,且满足 ∀x,y∈V,k∈F 有:f(x+y)=f(x)+f(y),f(ka)=kf(a ...
- Redis (一)Redis简介、安装部署
Redis是一个开源的,先进的 key-value 存储可用于构建高性能,可扩展的 Web 应用程序的解决方案. 既然是key-value,对于Java开发来说更熟悉的是Map集合.那就有问题了,有M ...
- 大约laravel错误的解决方案
2015-3-13 夜晚 9:13 执行laravel发生错误Indirect modification of overloaded element of BbsArticle has no effe ...
- 图形的认识(curve,surface,hypersurface)
平滑函数(smooth function): curve:曲线: 二维平面: surface:曲面: 三维空间: hypersurface:超曲面: 更高维度: 1. surface 是对平面的泛化, ...
- android该怎么办iphone那种画面抖动的动画效果(含有button和EditText)
首先在效果图: 要做到抖动效果按钮,能够这样做.设定anim房源res以下.创建一个button_shake.xml <? xml version="1.0" encodin ...
- CORSFilter
import java.io.IOException; import javax.servlet.Filter;import javax.servlet.FilterChain;import java ...
- JS 输入框智能提示
<!DOCTYPE html><html><head><meta http-equiv="Content-Type" content=&q ...
- JAVASCRIPT高程笔记-------第 七章 函数表达式
7.1递归 经典递归例子 function factorial(num){ if(num <= 1){ return 1; }else{ return num * factorial(num - ...
- 加载dll、lib库(例子的代码很全)
是关于如何加载dll或lib库的.可以看这篇bog Qt调用dll中的功能函数点击打开链接 **************************************************** ...