欢迎访问我的博客,你的支持,是我最大的动力!

编译Nginx(OpenResty)支持Lua扩展

Linux 小马奔腾 10811℃ 评论
目录:
[显示]

OpenResty是一款非常优秀的基于Nginx与Lua的高性能Web平台,它集成了大量精良的Lua库、第三方的模块以及大多数的依赖项,是Nginx的加强版。可以使用灵活的Lua语言,实现很多Nginx自身很难实现的功能。

之前写了一篇编译安装Nginx的博客,当时并没有集成Lua的扩展,最近要实现Nginx对接口访问控制,即限制某一IP对接口请求的频率,如果高于某一个频率,则部分请求不作处理,直接返回一个带提示的json,从而降低过多请求对服务器资源的消耗。这过程中,我们发现可以使用Nginx的Lua扩展来实现。使用Lua的方式有几个优化:一是后端服务器业务逻辑可以保持不变,不需要重构或者修改原业务逻辑;二是低成本,不需要使用专门的硬件、软件防火墙;三是Lua的运行效率非常高,集成到Nginx后,几乎对性能没有影响;四是部署简单,不需要使用中间件,维护方便。要使Nginx支持Lua,现在有两个可以采用的方案,一个是在编译时添加Lua扩展(扩展下载地址:https://github.com/openresty/lua-nginx-module),但是作者在说明中写到,并不建议使用这种方式,建议的方式是直接使用OpenResty项目。因为该项目不仅集成了Lua以及很多的扩展,而且对Nginx的源码有非常多的优化,可以非常好的运行Lua。并且,这个项目更新也非常及时,写这篇博文的时候是2018年03月19日,此时OpenResty使用的Nginx是1.13.6,可以说,还是非常新的。OpenResty有中文主页:http://openresty.org/cn/,有中文的使用文档,非常方便学习和使用。

这里记录下安装步骤,既是一份笔记,也可以方便大家和自己进行参考。

rpm/yum安装

yum install yum-utils
yum-config-manager --add-repo https://openresty.org/package/centos/openresty.repo
yum install openresty

其中得到的openresty.repo文件内容如下:

[openresty]
name=Official OpenResty Open Source Repository for CentOS
baseurl=https://openresty.org/package/centos/$releasever/$basearch
skip_if_unavailable=False
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://openresty.org/package/pubkey.gpg
enabled=1
enabled_metadata=1

这样安装实际会安装4个rpm包,并没有其它依赖,因此,也可以直接下载这4个rpm文件,使用rpm -ivh *.rpm进行安装

openresty  https://openresty.org/package/centos/7/x86_64/openresty-1.13.6.1-1.el7.centos.x86_64.rpm

openresty-openssl  https://openresty.org/package/centos/7/x86_64/openresty-openssl-1.0.2k-1.el7.centos.x86_64.rpm

openresty-pcre  https://openresty.org/package/centos/7/x86_64/openresty-pcre-8.41-1.el7.centos.x86_64.rpm

openresty-zlib  https://openresty.org/package/centos/7/x86_64/openresty-zlib-1.2.11-3.el7.centos.x86_64.rpm

使用这种方式安装不能自定义路径和添加删减nginx功能模块,实际使用中,为适应业务需要,通常选用编译安装

编译安装

Nginx的./configure编译参数说明

configure编译参数说明这部分参考了这篇文章:Nginx基础入门之nginx编译参数说明介绍

另外还有这篇文章,主要介绍openresty编译参数:openresty编译参数详解

编译安装过程

#同步系统时间(非必须)
yum install ntpdate
ntpdate cn.pool.ntp.org

#安装工具
yum install wget unzip

#准备编译环境
yum install gcc gcc-c++

#下载并解压源码包
#openresty含nginx版本1.13.6
wget https://openresty.org/download/openresty-1.13.6.1.tar.gz
tar zxf openresty-1.13.6.1.tar.gz
#pcre
wget https://ftp.pcre.org/pub/pcre/pcre-8.32.tar.gz
tar zxvf pcre-8.32.tar.gz
#zlib
wget http://www.zlib.net/fossils/zlib-1.2.7.3.tar.gz
tar zxvf zlib-1.2.7.3.tar.gz
#openssl
wget https://www.openssl.org/source/old/1.0.2/openssl-1.0.2k.tar.gz
tar zxvf openssl-1.0.2k.tar.gz
#nginx dav扩展
yum install unzip
wget https://github.com/arut/nginx-dav-ext-module/archive/master.zip
unzip master.zip

#解决依赖
yum install perl libxml2 libxml2-devel libxslt libxslt-devel gd gd-devel perl-ExtUtils-Embed geoip geoip-devel

#可能需要的包
yum install pcre zlib openssl

#将编译好的文件移到其它同类型服务器时,安装必要依赖,【绿色化】
#yum install pcre zlib openssl perl libxml2 libxslt gd perl-ExtUtils-Embed geoip

#修改服务器版本号
#默认为OpenResty 1.13.6.1  这里修改为Nginx 1.13.6
vim bundle/nginx-1.13.6/src/core/nginx.h
修改:#define NGINX_VER "nginx/" NGINX_VERSION

#编译
cd openresty-1.13.6.1
./configure ......

Configuration summary
+ using threads
+ using PCRE library: /root/pcre-8.32
+ using OpenSSL library: /root/openssl-1.0.2k
+ using zlib library: /root/zlib-1.2.7.3

nginx path prefix: "/opt/web_engine/openresty/nginx"
nginx binary file: "/opt/web_engine/nginx/sbin/nginx"
nginx modules path: "/opt/web_engine/nginx/modules"
nginx configuration prefix: "/opt/web_engine/nginx/conf"
nginx configuration file: "/opt/web_engine/nginx/conf/nginx.conf"
nginx pid file: "/opt/web_engine/nginx/run/nginx.pid"
nginx error log file: "/var/log/nginx/error.log"
nginx http access log file: "/var/log/nginx/access.log"
nginx http client request body temporary files: "/opt/web_engine/nginx/cache/client_temp"
nginx http proxy temporary files: "/opt/web_engine/nginx/cache/proxy_temp"
nginx http fastcgi temporary files: "/opt/web_engine/nginx/cache/fastcgi_temp"
nginx http uwsgi temporary files: "/opt/web_engine/nginx/cache/uwsgi_temp"
nginx http scgi temporary files: "/opt/web_engine/nginx/cache/scgi_temp"

编译参数:

./configure \
--prefix=/opt/web_engine/nginx \
--with-http_iconv_module \
--with-luajit \
--sbin-path=/opt/web_engine/nginx/sbin/nginx \
--modules-path=/opt/web_engine/nginx/modules \
--conf-path=/opt/web_engine/nginx/conf/nginx.conf \
--error-log-path=/var/log/nginx/error.log \
--http-log-path=/var/log/nginx/access.log \
--pid-path=/opt/web_engine/nginx/run/nginx.pid \
--lock-path=/opt/web_engine/nginx/run/nginx.lock \
--http-client-body-temp-path=/opt/web_engine/nginx/cache/client_temp \
--http-proxy-temp-path=/opt/web_engine/nginx/cache/proxy_temp \
--http-fastcgi-temp-path=/opt/web_engine/nginx/cache/fastcgi_temp \
--http-uwsgi-temp-path=/opt/web_engine/nginx/cache/uwsgi_temp \
--http-scgi-temp-path=/opt/web_engine/nginx/cache/scgi_temp \
--user=nginx \
--group=nginx \
--with-threads \
--with-file-aio \
--with-http_v2_module \
--with-http_realip_module \
--with-http_addition_module \
--with-http_xslt_module=dynamic \
--with-http_image_filter_module=dynamic \
--with-http_geoip_module=dynamic \
--with-http_sub_module \
--with-http_dav_module \
--with-http_flv_module \
--with-http_mp4_module \
--with-http_gunzip_module \
--with-http_gzip_static_module \
--with-http_auth_request_module \
--with-http_random_index_module \
--with-http_secure_link_module \
--with-http_degradation_module \
--with-http_slice_module \
--with-http_stub_status_module \
--with-http_perl_module=dynamic \
--with-mail=dynamic \
--with-stream \
--with-stream_ssl_module \
--with-pcre \
--with-http_ssl_module \
--with-cc-opt='-O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches -m64 -mtune=generic -fPIC' \
--with-openssl=/root/openssl-1.0.2k \
--with-pcre=/root/pcre-8.32 \
--with-zlib=/root/zlib-1.2.7.3 \
--add-module=/root/nginx-dav-ext-module-master

后续工作:

#添加nginx用户
adduser --system --no-create-home --shell /bin/false nginx#创建各类目录
mkdir -p /opt/web_engine/nginx/cache/client_temp
mkdir -p /opt/web_engine/nginx/cache/proxy_temp
mkdir -p /opt/web_engine/nginx/cache/fastcgi_temp
mkdir -p /opt/web_engine/nginx/cache/uwsgi_temp
mkdir -p /opt/web_engine/nginx/cache/scgi_temp
mkdir -p /opt/web_engine/nginx/conf/conf.d
mkdir -p /var/log/nginx

#日志轮换
#添加systemd管理
参考:http://pdf.us/2018/02/01/641.html

报错的处理

./configure: error: the HTTP XSLT module requires the libxml2/libxslt
libraries.
yum -y install libxml2 libxml2-devel
yum -y install libxslt-devel

./configure: error: the HTTP image filter module requires the GD library.
yum -y install gd-devel

./configure: error: perl 5.8.6 or higher is required
去掉with perl=path

./configure: error: perl module ExtUtils::Embed is required
yum -y install perl-devel perl-ExtUtils-Embed

./configure: error: the GeoIP module requires the GeoIP library.
yum install geoip-devel

./configure: warning: the "--with-ipv6" option is deprecated
去掉--with-ipv6

 

转载请注明:轻风博客 » 编译Nginx(OpenResty)支持Lua扩展

喜欢 (1)or分享 (0)