centos7源码安装nginx

  1. 安装所需要的库文件(通常centos7已经自带了)

    yum -y install gcc-c++ pcre pcre-devel openssl openssl-devel zlib zlib-devel

    gzip模块需要 zlib 库(可使用系统自带的也可以使用自己安装的,下同)

    rewrite模块需要 pcre 库

    ssl 功能需要openssl库

  2. 安装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步骤。

  3. 安装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 可查看其版本

  4. 下载Nginx,下载需要的模块

    lua-nginx-module-0.9.15.tar.gz为了使用ngx+lua进行开发

    ngx_devel_kit(NDK) 为了使用luajit

  5. 编译安装
    强烈建议将其写为脚本进行编译和安装,因为在开发过程中很可能需要加入第三方模块,如果每次都重新输入命令安装着实太麻烦了,使用脚本直接将模块路径参数等写进去会方便很多。

    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
    
  6. 安装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动态库的默认安装路径。

  7. 运行报错

    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;  
    }
    
  8. 附上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,也可在配置文件修改日志级别
    

你可能感兴趣的:(Nginx)