第一章 安装OpenResty(Nginx+Lua)开发环境

2023-10-31

首先我们选择使用OpenResty,其是由Nginx核心加很多第三方模块组成,其最大的亮点是默认集成了Lua开发环境,使得Nginx可以作为一个Web Server使用。借助于Nginx的事件驱动模型和非阻塞IO,可以实现高性能的Web应用程序。而且OpenResty提供了大量组件如Mysql、Redis、Memcached等等,使在Nginx上开发Web应用更方便更简单。目前在京东如实时价格、秒杀、动态服务、单品页、列表页等都在使用Nginx+Lua架构,其他公司如淘宝、去哪儿网等。

安装环境

安装步骤可以参考OpenResty® - Official Site

 

1、创建目录/usr/servers,以后我们把所有软件安装在此目录

Java代码  

收藏代码

  1. mkdir -p /usr/servers  
  2. cd /usr/servers/  

 

2、安装依赖(我的环境是ubuntu,可以使用如下命令安装,其他的可以参考openresty安装步骤)

Java代码  

收藏代码

  1. apt-get install libreadline-dev libncurses5-dev libpcre3-dev libssl-dev perl  

 

3、下载ngx_openresty-1.7.7.2.tar.gz并解压

Java代码  

收藏代码

  1. wget http://openresty.org/download/ngx_openresty-1.7.7.2.tar.gz  
  2. tar -xzvf ngx_openresty-1.7.7.2.tar.gz  

 

ngx_openresty-1.7.7.2/bundle目录里存放着nginx核心和很多第三方模块,比如有我们需要的Lua和LuaJIT。

 

3、安装LuaJIT

Java代码  

收藏代码

  1. cd bundle/LuaJIT-2.1-20150120/  
  2. make clean && make && make install  
  3. ln -sf luajit-2.1.0-alpha /usr/local/bin/luajit  

 

4、下载ngx_cache_purge模块,该模块用于清理nginx缓存

Java代码  

收藏代码

  1. cd /usr/servers/ngx_openresty-1.7.7.2/bundle  
  2. wget https://github.com/FRiCKLE/ngx_cache_purge/archive/2.3.tar.gz  
  3. tar -xvf 2.3.tar.gz  

 

5、下载nginx_upstream_check_module模块,该模块用于ustream健康检查

Java代码  

收藏代码

  1. cd /usr/servers/ngx_openresty-1.7.7.2/bundle  
  2. wget https://github.com/yaoweibin/nginx_upstream_check_module/archive/v0.3.0.tar.gz  
  3. tar -xvf v0.3.0.tar.gz   
  

6、安装ngx_openresty

Java代码  

收藏代码

  1. cd /usr/servers/ngx_openresty-1.7.7.2  
  2. ./configure --prefix=/usr/servers --with-http_realip_module  --with-pcre  --with-luajit --add-module=./bundle/ngx_cache_purge-2.3/ --add-module=./bundle/nginx_upstream_check_module-0.3.0/ -j2  
  3. make && make install  

 

--with***                安装一些内置/集成的模块

--with-http_realip_module  取用户真实ip模块

-with-pcre               Perl兼容的达式模块

--with-luajit              集成luajit模块

 

--add-module            添加自定义的第三方模块,如此次的ngx_che_purge

 

8、到/usr/servers目录下 

Java代码  

收藏代码

  1. cd /usr/servers/  
  2. ll   

 

会发现多出来了如下目录,说明安装成功

/usr/servers/luajit :luajit环境,luajit类似于java的jit,即即时编译,lua是一种解释语言,通过luajit可以即时编译lua代码到机器代码,得到很好的性能;

/usr/servers/lualib:要使用的lua库,里边提供了一些默认的lua库,如redis,json库等,也可以把一些自己开发的或第三方的放在这;

/usr/servers/nginx :安装的nginx;

 

通过/usr/servers/nginx/sbin/nginx  -V 查看nginx版本和安装的模块

 

7、启动nginx

/usr/servers/nginx/sbin/nginx

 

接下来该配置nginx+lua开发环境了

 

配置环境

配置及Nginx HttpLuaModule文档在可以查看Lua | NGINX

 

 

1、编辑nginx.conf配置文件 

Java代码  

收藏代码

  1. vim /usr/servers/nginx/conf/nginx.conf  

  

2、在http部分添加如下配置 

Java代码  

收藏代码

  1. #lua模块路径,多个之间”;”分隔,其中”;;”表示默认搜索路径,默认到/usr/servers/nginx下找  
  2. lua_package_path "/usr/servers/lualib/?.lua;;";  #lua 模块  
  3. lua_package_cpath "/usr/servers/lualib/?.so;;";  #c模块   

  

3、为了方便开发我们在/usr/servers/nginx/conf目录下创建一个lua.conf 

Java代码  

收藏代码

  1. #lua.conf  
  2. server {  
  3.     listen       80;  
  4.     server_name  _;  
  5. }  

 

4、在nginx.conf中的http部分添加include lua.conf包含此文件片段 

Java代码  

收藏代码

  1. include lua.conf;  

  

5、测试是否正常 

Java代码  

收藏代码

  1. /usr/servers/nginx/sbin/nginx  -t   

 

如果显示如下内容说明配置成功

nginx: the configuration file /usr/servers/nginx/conf/nginx.conf syntax is ok

nginx: configuration file /usr/servers/nginx/conf/nginx.conf test is successful

 

HelloWorld

1、在lua.conf中server部分添加如下配置 

Java代码  

收藏代码

  1. location /lua {  
  2.     default_type 'text/html';  
  3.         content_by_lua 'ngx.say("hello world")';  
  4. }  

         

2、测试配置是否正确 

Java代码  

收藏代码

  1. /usr/servers/nginx/sbin/nginx  -t  

   

3、重启nginx 

Java代码  

收藏代码

  1. /usr/servers/nginx/sbin/nginx  -s reload  

 

 4、访问如http://192.168.1.6/lua(自己的机器根据实际情况换ip),可以看到如下内容 

hello world

 

5、lua代码文件

我们把lua代码放在nginx配置中会随着lua的代码的增加导致配置文件太长不好维护,因此我们应该把lua代码移到外部文件中存储。 

Java代码  

收藏代码

  1. vim /usr/servers/nginx/conf/lua/test.lua  
Java代码  

收藏代码

  1. #添加如下内容  
  2. ngx.say("hello world");   

 

然后lua.conf修改为   

Java代码  

收藏代码

  1. location /lua {  
  2.     default_type 'text/html';  
  3.     content_by_lua_file conf/lua/test.lua; #相对于nginx安装目录  
  4. }   

此处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;但是正式环境一定记得开启缓存。 

Java代码  

收藏代码

  1.     location /lua {  
  2.         default_type 'text/html';  
  3.         lua_code_cache off;  
  4.         content_by_lua_file conf/lua/test.lua;  
  5. }  

 

开启后reload nginx会看到如下报警

nginx: [alert] lua_code_cache is off; this will hurt performance in /usr/servers/nginx/conf/lua.conf:8

 

7、错误日志

 

如果运行过程中出现错误,请不要忘记查看错误日志。 

Java代码  

收藏代码

  1. tail -f /usr/servers/nginx/logs/error.log  

 

到此我们的基本环境搭建完毕。

 

nginx+lua项目构建

以后我们的nginx lua开发文件会越来越多,我们应该把其项目化,已方便开发。项目目录结构如下所示:

example

    example.conf     ---该项目的nginx 配置文件

    lua              ---我们自己的lua代码

      test.lua

    lualib            ---lua依赖库/第三方依赖

      *.lua

      *.so

 

其中我们把lualib也放到项目中的好处就是以后部署的时候可以一起部署,防止有的服务器忘记复制依赖而造成缺少依赖的情况。

 

我们将项目放到到/usr/example目录下。

 

/usr/servers/nginx/conf/nginx.conf配置文件如下(此处我们最小化了配置文件)

Java代码  

收藏代码

  1. #user  nobody;  
  2. worker_processes  2;  
  3. error_log  logs/error.log;  
  4. events {  
  5.     worker_connections  1024;  
  6. }  
  7. http {  
  8.     include       mime.types;  
  9.     default_type  text/html;  
  10.   
  11.     #lua模块路径,其中”;;”表示默认搜索路径,默认到/usr/servers/nginx下找  
  12.     lua_package_path "/usr/example/lualib/?.lua;;";  #lua 模块  
  13.     lua_package_cpath "/usr/example/lualib/?.so;;";  #c模块  
  14.     include /usr/example/example.conf;  
  15. }  

通过绝对路径包含我们的lua依赖库和nginx项目配置文件。

 

/usr/example/example.conf配置文件如下 

Java代码  

收藏代码

  1. server {  
  2.     listen       80;  
  3.     server_name  _;  
  4.   
  5.     location /lua {  
  6.         default_type 'text/html';  
  7.         lua_code_cache off;  
  8.         content_by_lua_file /usr/example/lua/test.lua;  
  9.     }  
  10. }  

lua文件我们使用绝对路径/usr/example/lua/test.lua。 

 

到此我们就可以把example扔svn上了。

 

跟我学Nginx+Lua开发

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

第一章 安装OpenResty(Nginx+Lua)开发环境 的相关文章

  • kubernetes 集群中 django 应用程序的 Nginx 配置

    我在为部署在 kubernetes 中的 django 应用程序创建 nginx 配置文件时遇到困难 Nginx 和 app 是同一集群中的两个独立容器 据我了解 容器可以通过 127 0 0 1 XX 和主机名相互通信 我为此使用 min
  • nginx docker 容器:502 错误网关响应

    我有一个服务监听 8080 端口 这不是一个容器 然后 我使用官方镜像创建了一个 nginx 容器 docker run name nginx d v root nginx conf etc nginx conf d p 443 443 p
  • 使用 Nginx 或 Apache 来提供动态内容? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 去掉尾随零和小数点

    使用 Lua 我将数字格式化为可变位数并去掉尾随零 小数点 例如 string format precision f value gsub 0 1 gsub 值的类型为数字 正数 负数 整数 小数 所以任务已经解决了 但出于美学 教育和性能
  • 找不到 NGINX brew 安装命令

    I do brew install nginx and get gt Downloading http nginx org download nginx 1 2 2 tar gz Already downloaded Library Cac
  • nginx 反向代理到 apache-wordpress 可以工作,但到外部 url 的 proxy_pass 失败

    我有一个针对 apache wordpress 的 nginx 反向代理设置 效果很好 但是 根据位置需要重定向到失败的外部 url 请检查以下配置 这是一个有效的设置吗 https platform com https platform
  • nginx代理认证拦截

    我有几个服务 它们支持 nginx 实例 为了处理身份验证 在 nginx 中 我拦截每个请求并将其发送到身份验证服务 在那里 如果凭据正确 我将设置一个包含用户相关信息的 cookie 现在 请求应该被路由到适当的服务 并设置 cooki
  • 如何在 emacs lua-mode 中配置缩进?

    完整的 emacs 新手在这里 我在 Ubuntu 上使用 emacs 23 1 1emacs 入门套件 https github com technomancy emacs starter kit 我主要在 lua 模式下工作 安装了pa
  • 连接到上游时 Nginx 错误:(13:权限被拒绝)

    我在我的中收到此错误nginx error log file 2014 02 17 03 42 20 crit 5455 0 1 connect to unix tmp uwsgi sock failed 13 Permission den
  • Beanstalk 部署忽略 .ebextensions 中的 nginx 配置文件

    我在单实例 Elastic Beanstalk 环境中托管 Java Web 应用程序 并添加了几个 ebextension 文件 这些文件在每次部署时成功为我创建配置文件 然而 我无法找到一种方法让 Beanstalk 在 etc ngi
  • Kubernetes Ingress 在 nginx 反向代理后面运行

    我已经在可以从互联网访问的服务器上安装了 minikube 我创建了一个可用的 kubernetes 服务 gt kubectl get service myservice NAME CLUSTER IP EXTERNAL IP PORT
  • Lua 访问表的键和值

    我想在关卡编辑器中读取 Lua 文件 这样我就可以以可视化格式显示其数据供用户编辑 如果我有一个像这样的 Lua 表 properties Speed 10 TurnSpeed 5 Speed显然是关键并且10价值 我知道如果我知道像这样的
  • Nginx - Heroku Docker - 是否可以在 Heroku 上运行 Nginx 作为反向代理

    我试图弄清楚如何使用 Nginx 在 Heroku 应用程序上构建反向代理 问题是 Heroku 似乎每个应用程序只接受一个容器 但我的应用程序系统至少会使用三个容器 一个用于 Nginx 一个用于我的应用程序前端 一个用于我的业务逻辑服务
  • 使用 Nginx 在 Docker 容器内部署带有路由器的 Angular2

    我正在尝试部署一个使用框架的路由器功能的 Angular 2 但在 docker 容器内使用 nginx 为其提供服务时遇到一些问题 由 angular cli 构建的 Angular 应用程序具有如下文件结构 dist 08c42df75
  • 如何使用gunicorn和bokeh服务配置Nginx

    我想提供一个 Flask 应用程序 该应用程序使用本地网络服务器上的嵌入式散景服务 为了说明这一点 我使用了一个例子散景服务示例 https github com bokeh bokeh blob 0 12 11 examples howt
  • 如何通过 C API 在自己的环境中执行不受信任的 Lua 文件

    我想通过调用在其自己的环境中执行不受信任的 lua 文件lua setfenv http pgl yoyo org luai i lua setfenv这样它就不会影响我的任何代码 该函数的文档仅解释了如何调用函数 而不解释如何执行文件 目
  • PHP cURL 在本地工作,在 AWS 服务器上出现错误 77

    最新更新 脚本作为管理员用户通过 SSH shell 作为 php script php 成功运行 当由 nginx 用户运行时 curl 命令无法执行 https 请求 所以我猜测这是nginx用户无法正确使用curl的问题 我已经检查了
  • 在 Awesome-wm 中为特定应用程序设置窗口布局

    如何配置很棒 以便它可以启动两个窗口对齐的新应用程序 如下所示 xxxxxxxxxx xxxxxxxxxx xxxxxxxxxx xxxxxxxxxx 其中 x 是 pidgin 中的对话窗口 是好友列表窗口 一般来说 我想指定右窗口的宽度
  • Lua中有状态迭代器和无状态迭代器的区别

    Lua中无状态和有状态迭代器有什么区别 请详细解释一下 什么时候需要使用无状态 什么时候需要使用另一种 我需要例子来理解这个概念 首先让我们就一个定义达成一致 在 Lua 中 迭代器是function 类似对象 每次调用时都会返回序列中的下
  • 重定向而不是 404 错误页面 - 状态代码不起作用 (Nginx)

    我目前正在迁移到 nginx 服务器 我尝试将其放入名为的 404 ErrorDocument 中404 php 如果我现在尝试访问http mydomain com 404 php 这按预期工作 它将我重定向到 Google 但是一旦我尝

随机推荐

  • 电脑抓屏按钮使用:

    键盘上 Print Screen Sys Rq 键的作用是屏幕抓图 用法一 按 Print Screen SysRq 一下 对当前屏幕进行抓图 就是整个显示屏的内容 用法二 先按住 Alt 键 再按 Print Screen SysRq 键
  • HBase高手之路1-Hbase简介

    文章目录 HBase高手之路1 Hbase简介 一 什么是HBase 1 HBase简介 2 HBase的发展过程 二 HBase特点 1 海量存储 2 列式存储 3 极易扩展 4 高并发 5 稀疏 6 强一致性读 写 7 自动分块 8 自
  • Web服务器的搭建

    一 Web服务器简介 Web服务器的基本功能是提供web信息浏览服务 主要涉及的协议是HTTP协议 二 Web服务器的搭建 1 安装httpd包 2 关闭防火墙 3 启动httpd服务 4 备份conf文件 5 配置浏览器网页读取的根目录
  • 微服务相关面试要点

    什么是springboot 用来简化spring应用的初始搭建以及开发过程 使用特定的方式来进行配置 properties或yml文件 创建独立的spring引用程序 main方法运行 嵌入的Tomcat 无需部署war文件 简化maven
  • python读视频文件_python读取和保存视频文件

    如何用python实现视频关键帧提取并保存为图片 也许你会觉得对小编多做一点事你会觉得你很爽 可是在小编看来这是不屑的 import cv2vc cv2 VideoCapture Test avi 读入视频文件c 1if vc isOpen
  • linux安装anaconda

    linux安装anaconda 1 下载anaconda Conda 是一个强大的包管理器和环境管理器 您可以在 Windows 的 Anaconda Prompt 或 macOS 或 Linux 的终端窗口中与命令行命令一起使用 换句话说
  • Linux Socket网络编程 循环互相通信

    一 效果展示 持续互相通信 上面是服务端 下面为客户端加上ip 最后客户端输入exit退出 二 代码展示 服务端 server c include
  • Leetcode刷题:空间缩减思想

    文章目录 167 两数之和 II 输入有序数组 11 盛最多水的容器 240 搜索二维矩阵 II 11 盛最多水的容器 暴力 空间缩减 证明 二分 167 两数之和 II 输入有序数组 167 两数之和 II 输入有序数组 1 二分 cla
  • R语言在图上标出点坐标_R语言做图plot参数

    R语言做图plot参数函数名称 plot 用 途 作图 用 法 plot x y 参 数 1 符号和线条 pch 指定绘制点所使用的符号 取值范围 0 24 其中4是 差号 20是 点 cex 指定符号的大小 cex是一个数值 表示pch的
  • NVIDIA GeFprce GTX 1080 Ti NVIDIA图形驱动程序版本466.77下载和安装

    前言 在win7下 NVIDIA GeFprce GTX 1080 Ti NVIDIA图形驱动程序版本466 77下载和安装 但安装时系统报错 缺少KB4474419和KB4490628补丁 解决 NVIDIA GeFprce GTX 10
  • win10解决COM Surrogate问题

    Fix Problems with COM Surrogate on Windows 10 For various PC problems we recommend to use this tool This tool will repai
  • NPN和PNP 的电流方向 、大小关系 、电压偏置

    电流流向 NPN三极管 电流方向为基极流向发射极 驱动电流从基极流入 集电极流向发射极 PNP三极管 电流方向为发射极流向基极 驱动电流从基极流出 发射极流向集电极 PNP的电流方向是从下往上流的 但是在实际电路图中 大多还是发射极连接高电
  • 【LVGL事件(Events)】事件在不同组件上的应用(一)

    点击 滑动 输入 数字改变等等都可触发事件 事件就是针对不同的操作做出相对应的反应 最近看到组态屏 这玩意开发起来好像挺简单的 哈哈哈 研究完LVGL的事件就看看这个 LVGL事件 Events 事件代码 喜暖知寒的博客 CSDN博客LVG
  • 如何监听edittext输入完成

    转载于 http blog csdn net harryweasley article details 50395209 假如你要做这样的一个功能 通过在编辑框输入一些字符进行搜索 输入完成后 再显示搜索结果 在输入的过程中 并不想一直通知
  • ffmpeg命令行太多了_如何使用FFmpeg从视频中删除多个片段?

    我编写了一个脚本来加快编辑录制的电视的速度 该脚本会询问您要保留的段的开始和结束时间 并将其拆分为文件 它为您提供了选择 您可以 采取一个或多个细分 您可以将这些段合并为一个结果文件 加入后 您可以保留或删除零件文件 您可以保留原始文件或将
  • python爬虫-单线程爬取图片

    今天我们准备使用爬虫来爬取一些图片首先我们找到其url页面 https pvp qq com web201605 wallpaper shtml 进入之后当我们点击跳转页面的时候 发现其上方的网址没有发生变化 如果不发生变化的话就不可以进行
  • 【TensorFlow】tf.nn、tf.layers和tf.contrib模块

    转自 https blog csdn net u014365862 article details 77833481 我们在使用tensorflow时 会发现tf nn tf layers tf contrib模块有很多功能是重复的 尤其是
  • Aware&原理---Spring源码从入门到精通(十四)

    上篇文章主要介绍 Autowired自动装配 1 Bean注解 传参在方法上 自动装配 参数会从ioc容器从获取 2 有参构造器如果只有一个的情况下 也可以省略 Autowired不写 自动装配 感兴趣的同学可以点进去看看 自动装配构造器
  • php 代码需要重写注释_不要注释错误的代码-重写它

    php 代码需要重写注释 在这篇文章中 我将分享我通过阅读代码 编写代码和阅读书本获得的 代码注释 的经验 让我们从著名的报价开始 Don t comment bad code rewrite it Brian W Kernighan an
  • 第一章 安装OpenResty(Nginx+Lua)开发环境

    首先我们选择使用OpenResty 其是由Nginx核心加很多第三方模块组成 其最大的亮点是默认集成了Lua开发环境 使得Nginx可以作为一个Web Server使用 借助于Nginx的事件驱动模型和非阻塞IO 可以实现高性能的Web应用