安装所需要的库文件(通常centos7已经自带了)
yum -y install gcc-c++ pcre pcre-devel openssl openssl-devel zlib zlib-devel
gzip模块需要 zlib 库(可使用系统自带的也可以使用自己安装的,下同)
rewrite模块需要 pcre 库
ssl 功能需要openssl库
安装lua-5.1.5
build.sh
#!/bin/sh
make clean
make linux && make install
cd src
gcc -O2 -Wall -DLUA_USE_LINUX lapi.c lcode.c ldebug.c ldo.c ldump.c lfunc.c lgc.c llex.c lmem.c lobject.c lopcodes.c lparser.c lstate.c lstring.c ltable.c ltm.c lundump.c lvm.c lzio.c lauxlib.c lbaselib.c ldblib.c liolib.c lmathlib.c loslib.c ltablib.c lstrlib.c loadlib.c linit.c -fPIC -shared -o liblua.so
mkdir -p /usr/local/nginx/lua/lib/lua/5.1/
mv -f liblua.so /usr/local/nginx/lua/lib/lua/5.1/
cd -
我这里把编译后的动态链接库移动到nginx安装的目录下,在nginx配置文件里面包含进去即可。如何包含请看第6步骤。
安装luajit
注意:不要在luajit的官网下载,因为这可能导致nginx+lua的一些模块不能使用。
tar -xzvf luajit-2.1.tar.gz
cd LuaJIT-2.1
make && make install
# 找不到动态库时
# ln -s /usr/local/lib/libluajit-5.1.so.2 /lib64/libluajit-5.1.so.2
命令行输入luajit -v
可查看其版本
下载Nginx,下载需要的模块
lua-nginx-module-0.9.15.tar.gz为了使用ngx+lua进行开发
ngx_devel_kit(NDK) 为了使用luajit
编译安装
强烈建议将其写为脚本进行编译和安装,因为在开发过程中很可能需要加入第三方模块,如果每次都重新输入命令安装着实太麻烦了,使用脚本直接将模块路径参数等写进去会方便很多。
ngx.bash
#!/bin/bash
export LUAJIT_LIB=/usr/local/lib
export LUAJIT_INC=/usr/local/include/luajit-2.1
chmod +x configure
make clean
./configure --prefix=/usr/local/nginx \
--with-ld-opt='-Llibssl/ -Wl,-Bstatic -lssl -lcrypto -Wl,-Bdynamic -ldl' \
--add-module=src/ext/lua-nginx-module \
--add-module=src/ext/ngx_devel_kit \
--with-pcre-jit \
--with-http_ssl_module \
--with-http_stub_status_module \
--with-debug
make && make install
安装lua三方模块
常用的三方库基本都在openresty官网中,在里面搜索即可找到。比如lua-cjson
(强烈建议下载最新版本,因为最新版本加入了cjson_safe模块:在解析json出现异常时返回nil而不是抛出异常)
下载后编译安装(make && make install
),其动态库默认安装在/usr/local/lib/lua
下,如/usr/local/lib/lua/5.1/cjson.so
,然后在nginx.conf文件中包含进去就可以使用这个模块了。如:
http {
lua_package_path '${prefix}conf/?.lua;${prefix}lua/lib/lua/5.1/?.lua;;';
lua_package_cpath '${prefix}lua/lib/lua/5.1/?.so;;';
}
最后的;;
表示lua动态库的默认安装路径。
运行报错
nginx: [error] lua_load_resty_core failed to load the resty.core module from https://github.com/openresty/lua-resty-core; ensure you are using an OpenResty release from https://openresty.org/en/download.html (rc: 2, reason: module 'resty.core' not found:
no field package.preload['resty.core']
no file '../lua-resty-core/lib/resty/core.lua'
no file '../lua-resty-lrucache/lib/resty/core.lua'
no file './resty/core.lua'
no file '/usr/local/share/luajit-2.1.0-beta3/resty/core.lua'
no file '/usr/local/share/lua/5.1/resty/core.lua'
no file '/usr/local/share/lua/5.1/resty/core/init.lua'
no file './resty/core.so'
no file '/usr/local/lib/lua/5.1/resty/core.so'
no file '/usr/local/lib/lua/5.1/loadall.so'
no file './resty.so'
no file '/usr/local/lib/lua/5.1/resty.so'
no file '/usr/local/lib/lua/5.1/loadall.so')
一旦使用了lua-nginx-module就表示使用了openresty,这个resty.core是openresty的核心模块,对其下的很多函数进行了优化等。之前的一些版本默认是不编译进去的,所以需要你手动安装,或者禁用这个核心模块。最新版的lua-nginx-module模块已经强制性安装了。
方案一:下载安装所需要的库
lua-resty-lrucache
lua_resty_core
[root@localhost lua-resty-core-0.1.17]# make install
install -d /usr/local/lib/lua//resty/core/
install -d /usr/local/lib/lua//ngx/
install -d /usr/local/lib/lua//ngx/ssl
install lib/resty/*.lua /usr/local/lib/lua//resty/
install lib/resty/core/*.lua /usr/local/lib/lua//resty/core/
install lib/ngx/*.lua /usr/local/lib/lua//ngx/
install lib/ngx/ssl/*.lua /usr/local/lib/lua//ngx/ssl/
库默认安装在/usr/local/lib/lua/下,包含进去即可。
http{
lua_package_path '${prefix}conf/?.lua;${prefix}lua/lib/lua/5.1/?.lua;;';
lua_package_cpath '${prefix}lua/lib/lua/5.1/?.so;;';
}
方案二:不使用resty-core,nginx.conf,http块下设置
http {
lua_load_resty_core off;
}
附上nginx编译参数
./configure --help # 查看配置参数
# --without-xxx 表示不安装此模块
# --with-xxx 表示安装此模块
--prefix=PATH set installation prefix
--sbin-path=PATH set nginx binary pathname
--modules-path=PATH set modules path
--conf-path=PATH set nginx.conf pathname
--error-log-path=PATH set error log pathname
--pid-path=PATH set nginx.pid pathname
--lock-path=PATH set nginx.lock pathname
--user=USER 设置Nginx工作进程的所属用户,不要设置为root,工作进程所属用 户级别低于管理进程所属用户级别便于管理
--group=GROUP set non-privileged group for worker processes
--build=NAME set build name
--builddir=DIR configure执行和编译期间产生的临时文件存放目录
--with-select_module enable select module
--without-select_module disable select module
--with-poll_module enable poll module
--without-poll_module disable poll module
--with-threads enable thread pool support
--with-file-aio 启用文件异步I/O处理磁盘文件,需要Linux支持异步I/O
--with-http_ssl_module 支持HTTPS
--with-http_v2_module enable ngx_http_v2_module
--with-http_realip_module 从客户端请求的头域信息(如X-Real-IP或X-Forwarded-For)获 取真实的客户端IP
--with-http_addition_module 在返回给客户端的HTTP响应头或响应体尾部追加内容
--with-http_xslt_module 将XML格式数据返回给客户端前加入XML渲染
--with-http_xslt_module=dynamic enable dynamic ngx_http_xslt_module
--with-http_image_filter_module 将符合配置的图片实时压缩为指定大小的缩略图再发送给客户端,支 持JPEG、PNG、GIF格式。依赖libgd库
--with-http_image_filter_module=dynamic
enable dynamic ngx_http_image_filter_module
--with-http_geoip_module 依据MaxMind GeoIP的IP地址数据库分析得到客户端的实际物理地 址,依赖MaxMind GeoIP库
--with-http_geoip_module=dynamic enable dynamic ngx_http_geoip_module
--with-http_sub_module 将返回给客户端的HTTP应答包中指定的字符串替换为需要的字符串
--with-http_dav_module 让Nginx支持Webdav标准,如put delete copy mkcol move等
--with-http_flv_module 在向客户端发送HTTP响应时对FLV格式视频文件头部做一些处理
--with-http_mp4_module 使客户端可以观看、拖动MP4视频
--with-http_gunzip_module enable ngx_http_gunzip_module
--with-http_gzip_static_module 使Nginx做gzip压缩前先检查是否已经存在压缩过的文件,如果有就 直接返回。提前在服务器压缩好文档以减少压缩带来的系统开销
--with-http_auth_request_module enable ngx_http_auth_request_module
--with-http_random_index_module 在客户端访问某个目录时,随机返回这个目录下的任意文件
--with-http_secure_link_module 提供一种验证请求是否有效的机制。如:验证URL中需要加入的token 参数是否属于特定客户端
--with-http_degradation_module 针对一些特殊的系统调用做优化,但暂不支持Linux系统?
--with-http_slice_module enable ngx_http_slice_module
--with-http_stub_status_module 提供Nginx性能统计页面
--without-http_charset_module 将服务器发出的HTTP响应重新编码
--without-http_gzip_module 按照配置文件指定的Content-Type将响应体进行gzip压缩
--without-http_ssi_module 可向客户端返回的HTTP包体中加入特定的内容,如HTML的页头或页尾
--without-http_userid_module 可通过HTTP请求头部中的一些字段认证用户,确定请求是否合法
--without-http_access_module 根据IP地址限制客户端对服务器的访问
--without-http_auth_basic_module 提供最简单的用户名/密码认证
--without-http_mirror_module disable ngx_http_mirror_module
--without-http_autoindex_module 目录浏览功能
--without-http_geo_module 定义与用户IP关联的常量,针对不同地区客户端返回不同的结果,如 不同地区显示不同语言的网页
--without-http_map_module 可建立一个key/value映射表,可针对不同的URL做特殊处理,如: 返回302重定向时,可以根据URL不同返回不同的location
--without-http_split_clients_module根据客户端信息如IP、headers头、cookie等进行区分处理
--without-http_referer_module 根据请求头中的referer字段拒绝请求
--without-http_rewrite_module HTTP重定向,依赖PCRE库
--without-http_proxy_module HTTP反向代理
--without-http_fastcgi_module FastCGI功能
--without-http_uwsgi_module disable ngx_http_uwsgi_module
--without-http_scgi_module disable ngx_http_scgi_module
--without-http_grpc_module disable ngx_http_grpc_module
--without-http_memcached_module 可以直接从Memcached服务器读取数据并返回给客户端
--without-http_limit_conn_module disable ngx_http_limit_conn_module
--without-http_limit_req_module 限制某个IP地址并发请求数
--without-http_empty_gif_module Nginx收到无效请求后返回内存1*1像素的GIF图
--without-http_browser_module 根据HTTP请求头的user-agent识别浏览器
--without-http_upstream_hash_module
disable ngx_http_upstream_hash_module
--without-http_upstream_ip_hash_module
用于Nginx与后端服务器连接时根据IP做散列运算决定与哪台服务 器通信,实现保持回话的负载均衡
--without-http_upstream_least_conn_module
disable ngx_http_upstream_least_conn_module
--without-http_upstream_random_module
disable ngx_http_upstream_random_module
--without-http_upstream_keepalive_module
disable ngx_http_upstream_keepalive_module
--without-http_upstream_zone_module
disable ngx_http_upstream_zone_module
--with-http_perl_module enable ngx_http_perl_module
--with-http_perl_module=dynamic enable dynamic ngx_http_perl_module
--with-perl_modules_path=PATH 指定第三方perl模块路径
--with-perl=PATH perl二进制文件路径,如果Nginx要执行perl脚本,需配置此目录
--http-log-path=PATH access日志目录
--http-client-body-temp-path=PATH set path to store
http client request body temporary files
--http-proxy-temp-path=PATH Nginx作为反向代理时,上游服务器产生的HTTP包体临时存放的目录 一般为了性能,通常将此目录设置为内存虚拟磁盘
--http-fastcgi-temp-path=PATH set path to store
http fastcgi temporary files
--http-uwsgi-temp-path=PATH set path to store
http uwsgi temporary files
--http-scgi-temp-path=PATH set path to store
http scgi temporary files
--without-http 禁用HTTP服务器
--without-http-cache 禁用HTTP服务器里面的缓存Cache特性
--with-mail 使Nginx可以方向代理POP3/IMAP4/SMTP等邮件协议
--with-mail=dynamic enable dynamic POP3/IMAP4/SMTP proxy module
--with-mail_ssl_module 基于SSL/TLS协议使用邮件,依赖OpenSSL库
--without-mail_pop3_module 使用--with-mail后默认安装
--without-mail_imap_module 使用--with-mail后默认安装
--without-mail_smtp_module 使用--with-mail后默认安装
--with-stream TCP/UDP代理模块
--with-stream=dynamic enable dynamic TCP/UDP proxy module
--with-stream_ssl_module enable ngx_stream_ssl_module
--with-stream_realip_module enable ngx_stream_realip_module
--with-stream_geoip_module enable ngx_stream_geoip_module
--with-stream_geoip_module=dynamic enable dynamic ngx_stream_geoip_module
--with-stream_ssl_preread_module enable ngx_stream_ssl_preread_module
--without-stream_limit_conn_module disable ngx_stream_limit_conn_module
--without-stream_access_module disable ngx_stream_access_module
--without-stream_geo_module disable ngx_stream_geo_module
--without-stream_map_module disable ngx_stream_map_module
--without-stream_split_clients_module
disable ngx_stream_split_clients_module
--without-stream_return_module disable ngx_stream_return_module
--without-stream_upstream_hash_module
disable ngx_stream_upstream_hash_module
--without-stream_upstream_least_conn_module
disable ngx_stream_upstream_least_conn_module
--without-stream_upstream_random_module
disable ngx_stream_upstream_random_module
--without-stream_upstream_zone_module
disable ngx_stream_upstream_zone_module
--with-google_perftools_module 提供Google性能测试工具
--with-cpp_test_module enable ngx_cpp_test_module
--add-module=PATH enable external module
--add-dynamic-module=PATH enable dynamic external module
--with-compat dynamic modules compatibility
# 编译相关参数
--with-cc=PATH set C compiler pathname
--with-cpp=PATH set C preprocessor pathname
--with-cc-opt=OPTIONS set additional C compiler options
--with-ld-opt=OPTIONS set additional linker options
--with-cpu-opt=CPU 指定CPU处理器架构,取值如下:
pentium, pentiumpro, pentium3, pentium4,
athlon, opteron, sparc32, sparc64, ppc64
--without-pcre disable PCRE library usage
--with-pcre force PCRE library usage
--with-pcre=DIR set path to PCRE library sources
--with-pcre-opt=OPTIONS set additional build options for PCRE
--with-pcre-jit 使用JIT编译支持构建PCRE
--with-zlib=DIR set path to zlib library sources
--with-zlib-opt=OPTIONS set additional build options for zlib
--with-zlib-asm=CPU 对特定的CPU指定汇编优化功能,目前支持以下两种架构:
pentium, pentiumpro
--with-libatomic 强制使用atomic库(CPU架构独立的原子操作)
--with-libatomic=DIR set path to libatomic_ops library sources
--with-openssl=DIR set path to OpenSSL library sources
--with-openssl-opt=OPTIONS set additional build options for OpenSSL
--with-debug 将debug级别的日志编译进Nginx,也可在配置文件修改日志级别