使用rpmbuild制作Nginx的RPM包

image

前言

題圖為RPM包制作原理圖,有時候為了方便源碼包的安裝,和我們自己訂制軟件包的需求,我們會把一些源碼包按照我們的需求來做成 rpm 包,當有了源碼包就可以直接編譯得到二進制安裝包和其他任意包。spec file 是制作 rpm 包最核心的部分,rpm 包的制作就是根據(jù) spec file 來實現(xiàn)的。在制作自定義 rpm 包的時候最好不要使用管理員進行, 因為管理員權(quán)限過大,如果一個命令寫錯了,結(jié)果可能是災(zāi)難性的,而制件一個 rpm 包普通用戶完全可以實現(xiàn)。本文主要介紹使用rpmbuild制作Nginx的RPM包,大部分步驟已經(jīng)使用Bash Shell自動化完成了,大家可以基于此重新定義。

使用rpmbuild制作Nginx的RPM包

更新歷史

2019年11月04日 - 更新openresty/lua-nginx-module
2019年01月16日 - 初稿

閱讀原文 - https://wsgzao.github.io/post/rpmbuild/

擴展閱讀

OpenResty
Creating RPM packages - https://docs.fedoraproject.org/en-US/quick-docs/creating-rpm-packages/index.html
How to create a GNU Hello RPM - https://fedoraproject.org/wiki/How_to_create_a_GNU_Hello_RPM_package/zh-cn
使用 rpm-build 制作 nginx 的 rpm 包 - http://blog.51cto.com/nmshuishui/1583117


什么是RPM

An RPM package is simply a file containing other files and information about them needed by the system. Specifically, an RPM package consists of the cpio archive, which contains the files, and the RPM header, which contains metadata about the package. The rpm package manager uses this metadata to determine dependencies, where to install files, and other information.

There are two types of RPM packages:

  • source RPM (SRPM)
  • binary RPM

SRPMs and binary RPMs share the file format and tooling, but have different contents and serve different purposes. An SRPM contains source code, optionally patches to it, and a SPEC file, which describes how to build the source code into a binary RPM. A binary RPM contains the binaries built from the sources and patches.

RPM 有五種基本的操作功能:安裝、卸載、升級、查詢和驗證。

Linux 軟件包分為兩大類:

  1. 二進制類包,包括 rpm 安裝包(一般分為 i386 和 x86 等幾種)
  2. 源碼類包,源碼包和開發(fā)包應(yīng)該歸位此類(.src.rpm)

在 Redhat 下,rpm 包的默認制作路徑在 /usr/src/redhat 下,這其中包含了 6 個目錄(要求全部大寫)。但 Centos 并沒有該目錄,因此我們不得不自定義工作車間,即使在 Redhat 下有該目錄,一般也是自定義到普通用戶的家目錄下的

Directory Usage
BUILD 源代碼解壓以后放的位置,只需提供BUILD目錄,具體里面放什么,不用我們管,所以真正的制作車間是BUILD目錄
RPMS 制作完成后的rpm包存放目錄,為特定平臺指定子目錄(i386,i686,ppc)
SOURCES 收集的源文件,源材料,補丁文件等存放位置
SPECS 存放spec文件,作為制作rpm包的領(lǐng)崗文件,以 rpm名.spec
SRPMS src格式的rpm包位置 ,既然是src格式的包,就沒有平臺的概念了
BuiltRoot 假根,使用install臨時安裝到這個目錄,把這個目錄當作根來用的,所以在這個目錄下的目錄文件,才是真正的目錄文件。當打包完成后,在清理階段,這個目錄將被刪除

更詳細的介紹可以參考 RPM Packaging Guide

https://rpm-packaging-guide.github.io/

制作rpm包

如果你只關(guān)心如何使用可以直接跳過看下文,這里主要展示代碼和配置文件

build shell

# luajit.sh
LUAVER=2.0.5
WKDIR="/root/rpmbuild/SOURCES"
cd $WKDIR
wget http://luajit.org/download/LuaJIT-$LUAVER.tar.gz
tar zxf LuaJIT-$LUAVER.tar.gz
rm LuaJIT-$LUAVER.tar.gz
cd LuaJIT-$LUAVER
make BUILDMODE=static
make install
export LUAJIT_LIB=/usr/local/lib
export LUAJIT_INC=/usr/local/include/luajit-2.0

# build.sh
NGX_VER=1.14.2
WKDIR="/root/rpmbuild/SOURCES"
CURRENTDIR=`dirname $(readlink -f "$0")`
echo $CURRENTDIR
export LUAJIT_LIB=/usr/local/lib
export LUAJIT_INC=/usr/local/include/luajit-2.0
cd $WKDIR
wget http://nginx.org/download/nginx-$NGX_VER.tar.gz
tar xzf nginx-$NGX_VER.tar.gz
rm nginx-$NGX_VER.tar.gz
mv nginx-$NGX_VER nginx-garena-$NGX_VER
cd nginx-garena-$NGX_VER/

mkdir -p contrib
cd contrib/
git clone git://github.com/bigplum/Nginx-limit-traffic-rate-module.git
git clone git://github.com/agentzh/headers-more-nginx-module.git
#git clone git://github.com/gnosek/nginx-upstream-fair.git
git clone git://github.com/agentzh/echo-nginx-module.git
#git clone git://github.com/arut/nginx-dav-ext-module.git
git clone git://github.com/r10r/ngx_http_auth_pam_module.git
git clone git://github.com/FRiCKLE/ngx_cache_purge.git
git clone git://github.com/simpl/ngx_devel_kit.git
git clone git://github.com/openresty/lua-nginx-module.git
git clone git://github.com/nbs-system/naxsi.git
rm -rf */.git
cd ..

cp -r $CURRENTDIR/nginx-template/* $WKDIR/nginx-garena-$NGX_VER/
cp $CURRENTDIR/nginx-spec /root/rpmbuild/SPECS/
#cp /root/rules $WKDIR/nginx-garena-$NGX_VER/debian/
cd $WKDIR
tar zcf nginx-garena-$NGX_VER.tar.gz nginx-garena-$NGX_VER/
cd /root/rpmbuild/SPECS/
rpmbuild -ba nginx-spec
cd /root/rpmbuild/RPMS/noarch

nginx-spec

# 1.The introduction section 
Name: nginx-garena                                      # 軟件包名稱
Version: 1.14.2                                         # 版本號
Release: 0                                              # release號
Summary: nginx garena rpm                               # 簡要描述信息
Source0: nginx-garena-1.14.1.tar.gz                     # source主要是引用一下自己定義好的腳本,配置文件之類的內(nèi)容
License: GPL                                            # 一定帶上(最好是對方源碼包的License)BSD,GPL,GPLv2
Group: Rahul                                            # 要全用這里面的一個組:less /usr/share/doc/rpm-version/GROUPS
BuildArch: noarch               
BuildRoot: %{_tmppath}/%{name}-buildroot                
%description                                            # 軟件包詳述
Garena self-build Nginx.
%define _binaries_in_noarch_packages_terminate_build   0

# 2.The Prep section 準備階段,主要就是把源碼包解壓到build目錄下,設(shè)置一下環(huán)境變量,并cd進去
%prep
%setup -q %{name}-%{version}                            # 這個宏的作用靜默模式解壓并cd

# 3.The Build Section 編譯制作階段,這一節(jié)主要用于編譯源碼
%build
CFLAGS="$RPM_OPT_FLAGS" ./configure --prefix=/usr/share/nginx/ \
                    --sbin-path=/usr/sbin/nginx \
                    --conf-path=/etc/nginx/nginx.conf \
                    --error-log-path=/var/log/nginx/error.log \
                    --http-log-path=/var/log/nginx/access.log \
                    --pid-path=/var/run/nginx.pid \
                    --lock-path=/var/lock/nginx.lock \
                    --http-client-body-temp-path=/var/lib/nginx/body \
                    --http-fastcgi-temp-path=/var/lib/nginx/fastcgi \
                    --http-proxy-temp-path=/var/lib/nginx/proxy \
                    --http-scgi-temp-path=/var/lib/nginx/scgi \
                    --http-uwsgi-temp-path=/var/lib/nginx/uwsgi \
                    --with-pcre-jit \
                    --with-http_flv_module \
                    --with-http_mp4_module \
                    --with-file-aio \
                    --with-http_v2_module \
                    --with-stream \
                    --with-stream_ssl_module \
                    --with-http_auth_request_module \
                    --with-http_slice_module \
                    --with-threads \
                    --with-http_gunzip_module \
                    --with-http_random_index_module \
                    --with-http_secure_link_module \
                    --with-http_geoip_module \
                    --with-http_ssl_module \
                    --with-openssl=/usr/local/src/openssl-1.0.2p \
                    --with-http_addition_module \
                    --with-http_geoip_module \
                    --with-http_gzip_static_module \
                    --with-http_realip_module \
                    --with-ipv6 \
                    --without-mail_pop3_module \
                    --without-mail_imap_module \
                    --without-mail_smtp_module \
                    --add-module=contrib/Nginx-limit-traffic-rate-module \
                    --add-module=contrib/headers-more-nginx-module \
                    --add-module=contrib/echo-nginx-module \
                    --add-module=contrib/ngx_http_auth_pam_module \
                    --add-module=contrib/ngx_cache_purge \
                    --add-module=contrib/ngx_devel_kit \
                    --add-module=contrib/lua-nginx-module \
                    --add-module=contrib/naxsi/naxsi_src
make -j8

# 4.Install section  這一節(jié)主要用于完成實際安裝軟件必須執(zhí)行的命令,可包含4種類型腳本
%install
[ "$RPM_BUILD_ROOT" != "/" ] && rm -rf $RPM_BUILD_ROOT
make DESTDIR=$RPM_BUILD_ROOT install
install -m 0755 -d $RPM_BUILD_ROOT/etc/nginx/sites-enabled
install -m 0755 -d $RPM_BUILD_ROOT/etc/nginx/sites-available
install -m 0755 -d $RPM_BUILD_ROOT/var/log/nginx
install -m 0755 -d $RPM_BUILD_ROOT/var/lib/nginx
install -D -m 644 conf/sites-available/000_stub_status $RPM_BUILD_ROOT/etc/nginx/sites-available/000_stub_status
install -D -m 644 conf/django_fastcgi_params $RPM_BUILD_ROOT/etc/nginx/django_fastcgi_params
install -D -m 644 conf/naxsi_core.rules $RPM_BUILD_ROOT/etc/nginx/naxsi_core.rules
install -D -m 644 conf/sites-available/000_stub_status $RPM_BUILD_ROOT/etc/nginx/sites-enabled/000_stub_status
install -D -m 644 logrotate.d/nginx $RPM_BUILD_ROOT/etc/logrotate.d/nginx
install -D -m 644 nginx.service $RPM_BUILD_ROOT/usr/lib/systemd/system/nginx.service

# 5.clean section 清理段,clean的主要作用就是刪除BUILD
%clean
[ "$RPM_BUILD_ROOT" != "/" ] && rm -rf $RPM_BUILD_ROOT
%post
useradd -s /sbin/nologin -d /var/www www-data
chown -R www-data.www-data /var/log/nginx /var/lib/nginx
systemctl enable nginx
echo %{name}-%{version} is successfully installed.
systemctl start nginx
# 6.file section 文件列表段,這個階段是把前面已經(jīng)編譯好的內(nèi)容要打包了
%files
%defattr(-,root,root)
%dir /etc/nginx
/etc/nginx/*
%dir /usr/src/debug/nginx-garena-1.14.1
/usr/src/debug/nginx-garena-1.14.1/*
/usr/sbin/nginx
%dir /usr/share/nginx
/usr/share/nginx/*
/etc/logrotate.d/nginx
/usr/lib/systemd/system/nginx.service
/usr/lib/debug/*
/usr/lib/debug/.build-id/*
%dir /var/log/nginx
%dir /var/lib/nginx
%config(noreplace) /etc/nginx/nginx.conf


nginx-template

nginx-template
    ├── conf
    │   ├── django_fastcgi_params
    │   ├── naxsi_core.rules
    │   └── sites-available
    │       └── 000_stub_status
    ├── logrotate.d
    │   └── nginx
    ├── nginx.conf
    └── nginx.service

# nginx-rpmbuild-centos7/nginx-template/conf/django_fastcgi_params
fastcgi_param  QUERY_STRING       $query_string;
fastcgi_param  REQUEST_METHOD     $request_method;
fastcgi_param  CONTENT_TYPE       $content_type;
fastcgi_param  CONTENT_LENGTH     $content_length;

fastcgi_param  PATH_INFO          $fastcgi_script_name;
fastcgi_param  REQUEST_URI        $request_uri;
fastcgi_param  DOCUMENT_URI       $document_uri;
fastcgi_param  DOCUMENT_ROOT      $document_root;
fastcgi_param  SERVER_PROTOCOL    $server_protocol;

fastcgi_param  GATEWAY_INTERFACE  CGI/1.1;
fastcgi_param  SERVER_SOFTWARE    nginx/$nginx_version;

fastcgi_param  REMOTE_ADDR        $remote_addr;
fastcgi_param  REMOTE_PORT        $remote_port;
fastcgi_param  SERVER_ADDR        $server_addr;
fastcgi_param  SERVER_PORT        $server_port;
fastcgi_param  SERVER_NAME        $server_name;

fastcgi_param  HTTP_X_FORWARDED_PROTOCOL        $scheme;

fastcgi_pass_header Authorization;
fastcgi_intercept_errors off;
fastcgi_keep_conn on;

# nginx-rpmbuild-centos7/nginx-template/conf/naxsi_core.rules
##################################
## INTERNAL RULES IDS:1-999     ##
##################################
#@MainRule "msg:weird request, unable to parse" id:1;
#@MainRule "msg:request too big, stored on disk and not parsed" id:2;
#@MainRule "msg:invalid hex encoding, null bytes" id:10;
#@MainRule "msg:unknown content-type" id:11;
#@MainRule "msg:invalid formatted url" id:12;
#@MainRule "msg:invalid POST format" id:13;
#@MainRule "msg:invalid POST boundary" id:14;
#@MainRule "msg:invalid JSON" id:15;
#@MainRule "msg:empty POST" id:16;
#@MainRule "msg:libinjection_sql" id:17;
#@MainRule "msg:libinjection_xss" id:18;

##################################
## SQL Injections IDs:1000-1099 ##
##################################
MainRule "rx:select|union|update|delete|insert|table|from|ascii|hex|unhex|drop" "msg:sql keywords" "mz:BODY|URL|ARGS|$HEADERS_VAR:Cookie" "s:$SQL:4" id:1000;
MainRule "str:\"" "msg:double quote" "mz:BODY|URL|ARGS|$HEADERS_VAR:Cookie" "s:$SQL:8,$XSS:8" id:1001;
MainRule "str:0x" "msg:0x, possible hex encoding" "mz:BODY|URL|ARGS|$HEADERS_VAR:Cookie" "s:$SQL:2" id:1002;
## Hardcore rules
MainRule "str:/*" "msg:mysql comment (/*)" "mz:BODY|URL|ARGS|$HEADERS_VAR:Cookie" "s:$SQL:8" id:1003;
MainRule "str:*/" "msg:mysql comment (*/)" "mz:BODY|URL|ARGS|$HEADERS_VAR:Cookie" "s:$SQL:8" id:1004;
MainRule "str:|" "msg:mysql keyword (|)"  "mz:BODY|URL|ARGS|$HEADERS_VAR:Cookie" "s:$SQL:8" id:1005;
MainRule "str:&&" "msg:mysql keyword (&&)" "mz:BODY|URL|ARGS|$HEADERS_VAR:Cookie" "s:$SQL:8" id:1006;
## end of hardcore rules
MainRule "str:--" "msg:mysql comment (--)" "mz:BODY|URL|ARGS|$HEADERS_VAR:Cookie" "s:$SQL:4" id:1007;
MainRule "str:;" "msg:semicolon" "mz:BODY|URL|ARGS" "s:$SQL:4,$XSS:8" id:1008;
MainRule "str:=" "msg:equal sign in var, probable sql/xss" "mz:ARGS|BODY" "s:$SQL:2" id:1009;
MainRule "str:(" "msg:open parenthesis, probable sql/xss" "mz:ARGS|URL|BODY|$HEADERS_VAR:Cookie" "s:$SQL:4,$XSS:8" id:1010;
MainRule "str:)" "msg:close parenthesis, probable sql/xss" "mz:ARGS|URL|BODY|$HEADERS_VAR:Cookie" "s:$SQL:4,$XSS:8" id:1011;
MainRule "str:'" "msg:simple quote" "mz:ARGS|BODY|URL|$HEADERS_VAR:Cookie" "s:$SQL:4,$XSS:8" id:1013;
MainRule "str:," "msg:comma" "mz:BODY|URL|ARGS|$HEADERS_VAR:Cookie" "s:$SQL:4" id:1015;
MainRule "str:#" "msg:mysql comment (#)" "mz:BODY|URL|ARGS|$HEADERS_VAR:Cookie" "s:$SQL:4" id:1016;
MainRule "str:@@" "msg:double arobase (@@)" "mz:BODY|URL|ARGS|$HEADERS_VAR:Cookie" "s:$SQL:4" id:1017;

###############################
## OBVIOUS RFI IDs:1100-1199 ##
###############################
MainRule "str:http://" "msg:http:// scheme" "mz:ARGS|BODY|$HEADERS_VAR:Cookie" "s:$RFI:8" id:1100;
MainRule "str:https://" "msg:https:// scheme" "mz:ARGS|BODY|$HEADERS_VAR:Cookie" "s:$RFI:8" id:1101;
MainRule "str:ftp://" "msg:ftp:// scheme" "mz:ARGS|BODY|$HEADERS_VAR:Cookie" "s:$RFI:8" id:1102;
MainRule "str:php://" "msg:php:// scheme" "mz:ARGS|BODY|$HEADERS_VAR:Cookie" "s:$RFI:8" id:1103;
MainRule "str:sftp://" "msg:sftp:// scheme" "mz:ARGS|BODY|$HEADERS_VAR:Cookie" "s:$RFI:8" id:1104;
MainRule "str:zlib://" "msg:zlib:// scheme" "mz:ARGS|BODY|$HEADERS_VAR:Cookie" "s:$RFI:8" id:1105;
MainRule "str:data://" "msg:data:// scheme" "mz:ARGS|BODY|$HEADERS_VAR:Cookie" "s:$RFI:8" id:1106;
MainRule "str:glob://" "msg:glob:// scheme" "mz:ARGS|BODY|$HEADERS_VAR:Cookie" "s:$RFI:8" id:1107;
MainRule "str:phar://" "msg:phar:// scheme" "mz:ARGS|BODY|$HEADERS_VAR:Cookie" "s:$RFI:8" id:1108;
MainRule "str:file://" "msg:file:// scheme" "mz:ARGS|BODY|$HEADERS_VAR:Cookie" "s:$RFI:8" id:1109;
MainRule "str:gopher://" "msg:gopher:// scheme" "mz:ARGS|BODY|$HEADERS_VAR:Cookie" "s:$RFI:8" id:1110;

#######################################
## Directory traversal IDs:1200-1299 ##
#######################################
MainRule "str:.." "msg:double dot" "mz:ARGS|URL|BODY|$HEADERS_VAR:Cookie" "s:$TRAVERSAL:4" id:1200;
MainRule "str:/etc/passwd" "msg:obvious probe" "mz:ARGS|URL|BODY|$HEADERS_VAR:Cookie" "s:$TRAVERSAL:4" id:1202;
MainRule "str:c:\\" "msg:obvious windows path" "mz:ARGS|URL|BODY|$HEADERS_VAR:Cookie" "s:$TRAVERSAL:4" id:1203;
MainRule "str:cmd.exe" "msg:obvious probe" "mz:ARGS|URL|BODY|$HEADERS_VAR:Cookie" "s:$TRAVERSAL:4" id:1204;
MainRule "str:\\" "msg:backslash" "mz:ARGS|URL|BODY|$HEADERS_VAR:Cookie" "s:$TRAVERSAL:4" id:1205;
#MainRule "str:/" "msg:slash in args" "mz:ARGS|BODY|$HEADERS_VAR:Cookie" "s:$TRAVERSAL:2" id:1206;

########################################
## Cross Site Scripting IDs:1300-1399 ##
########################################
MainRule "str:<" "msg:html open tag" "mz:ARGS|URL|BODY|$HEADERS_VAR:Cookie" "s:$XSS:8" id:1302;
MainRule "str:>" "msg:html close tag" "mz:ARGS|URL|BODY|$HEADERS_VAR:Cookie" "s:$XSS:8" id:1303;
MainRule "str:[" "msg:open square backet ([), possible js" "mz:BODY|URL|ARGS|$HEADERS_VAR:Cookie" "s:$XSS:4" id:1310;
MainRule "str:]" "msg:close square bracket (]), possible js" "mz:BODY|URL|ARGS|$HEADERS_VAR:Cookie" "s:$XSS:4" id:1311;
MainRule "str:~" "msg:tilde (~) character" "mz:BODY|URL|ARGS|$HEADERS_VAR:Cookie" "s:$XSS:4" id:1312;
MainRule "str:`"  "msg:grave accent (`)" "mz:ARGS|URL|BODY|$HEADERS_VAR:Cookie" "s:$XSS:8" id:1314;
MainRule "rx:%[2|3]."  "msg:double encoding" "mz:ARGS|URL|BODY|$HEADERS_VAR:Cookie" "s:$XSS:8" id:1315;

####################################
## Evading tricks IDs: 1400-1500 ##
####################################
MainRule "str:&#" "msg:utf7/8 encoding" "mz:ARGS|BODY|URL|$HEADERS_VAR:Cookie" "s:$EVADE:4" id:1400;
MainRule "str:%U" "msg:M$ encoding" "mz:ARGS|BODY|URL|$HEADERS_VAR:Cookie" "s:$EVADE:4" id:1401;

#############################
## File uploads: 1500-1600 ##
#############################
MainRule "rx:\.ph|\.asp|\.ht" "msg:asp/php file upload" "mz:FILE_EXT" "s:$UPLOAD:8" id:1500;

# nginx-rpmbuild-centos7/nginx-template/logrotate.d/nginx
/var/log/nginx/*.log /var/log/nginx/*/*.log{
    daily
    missingok
    rotate 14
    compress
    delaycompress
    notifempty
    create 640 root adm
    sharedscripts
    postrotate
        [ ! -f /var/run/nginx.pid ] || kill -USR1 `cat /var/run/nginx.pid`
    endscript
}

# nginx-rpmbuild-centos7/nginx-template/nginx.conf
user www-data;
worker_processes auto;

#worker_cpu_affinity 00000001 00000010 00000100 00001000 00010000 00100000 01000000 10000000;
worker_rlimit_nofile 655650;

error_log  /var/log/nginx/error.log;
pid        /var/run/nginx.pid;

events {
        worker_connections  10240;
}


http {
#       include       /etc/nginx/naxsi_core.rules;
        include       mime.types;
        default_type  application/octet-stream;
    log_format garena '$remote_addr - $remote_user [$time_iso8601] "$request" $status $body_bytes_sent '
                '"$http_referer" "$http_user_agent" $request_time $upstream_response_time "$http_x_forwarded_for" "$geoip_country_code" "$host"';
        log_format garena_post '$remote_addr - $remote_user [$time_iso8601] "$request" $status $body_bytes_sent '
                '"$http_referer" "$http_user_agent" $request_time $upstream_response_time "$http_x_forwarded_for" "$geoip_country_code" "$host" "$request_body"';
    log_format compact '$time_iso8601|$remote_addr|$geoip_country_code|$http_x_forwarded_for|$status|$request_time|$upstream_response_time|$request_length|$body_bytes_sent|$host|$request|$http_referer|$http_user_agent';
    log_format compact_post '$time_iso8601|$remote_addr|$geoip_country_code|$http_x_forwarded_for|$status|$request_time|$upstream_response_time|$request_length|$body_bytes_sent|$host|$request|$http_referer|$http_user_agent|$request_body';


#       access_log  logs/access.log  main;

        sendfile        on;
#       tcp_nopush     on;

        keepalive_timeout  30;
        fastcgi_keep_conn on;
        tcp_nodelay        on;

        gzip  on;
        gzip_disable "MSIE [1-6]\.(?!.*SV1)";
        gzip_proxied any;
        gzip_buffers 16 8k;
        gzip_types    text/plain application/javascript application/x-javascript text/javascript text/xml text/css application/json;
        gzip_vary on;
        include /etc/nginx/sites-enabled/*;

    set_real_ip_from 10.0.0.0/8;
    real_ip_header    X-Forwarded-For;
#   real_ip_recursive on;
#   geoip_country /usr/share/GeoIP/GeoIP.dat;

        server_tokens off;         # returns "Server: nginx"
    more_clear_headers Server; # doesn't return "Server: " header at all
}

# nginx-rpmbuild-centos7/nginx-template/nginx.service
[Unit]
Description=The nginx HTTP and reverse proxy server
After=network.target remote-fs.target nss-lookup.target

[Service]
Type=forking
PIDFile=/run/nginx.pid
ExecStartPre=/usr/sbin/nginx -t
ExecStart=/usr/sbin/nginx
ExecReload=/bin/kill -s HUP $MAINPID
KillMode=process
KillSignal=SIGQUIT
TimeoutStopSec=5
PrivateTmp=true

[Install]
WantedBy=multi-user.target

Initialize rpmbuild env

# check current os version and kernel
cat /etc/redhat-release
CentOS Linux release 7.5.1804 (Core)
uname -r
3.10.0-862.el7.x86_64

# install lua
sh luajit.sh

# yum install dependencies
yum install -y gcc pam-devel git rpm-build pcre-devel openssl openssl-devel geoip-devel

# mkdir
mkdir -p /root/rpmbuild/SOURCES/
mkdir -p /root/rpmbuild/SPECS/
mkdir -p /root/rpmbuild/RPMS/noarch

# download openssl
cd /usr/local/src
wget https://github.com/openssl/openssl/archive/OpenSSL_1_0_2p.tar.gz
tar xf OpenSSL_1_0_2p.tar.gz
mv openssl-OpenSSL_1_0_2p/ openssl-1.0.2p

# confirm these files are correct
[root@localhost ~]# tree nginx-rpmbuild-centos7/
nginx-rpmbuild-centos7/
├── build.sh
├── conf_buid
│   ├── conf
│   │   ├── django_fastcgi_params
│   │   ├── fastcgi.conf
│   │   ├── fastcgi_params
│   │   ├── koi-utf
│   │   ├── koi-win
│   │   ├── mime.types
│   │   ├── naxsi_core.rules
│   │   ├── nginx.conf
│   │   ├── scgi_params
│   │   ├── sites-available
│   │   │   └── 000_stub_status
│   │   ├── uwsgi_params
│   │   └── win-utf
│   ├── logrotate.d
│   │   └── nginx
│   ├── nginx.conf
│   └── nginx.service
├── luajit.sh
├── nginx-spec
└── nginx-template
    ├── conf
    │   ├── django_fastcgi_params
    │   ├── naxsi_core.rules
    │   └── sites-available
    │       └── 000_stub_status
    ├── logrotate.d
    │   └── nginx
    ├── nginx.conf
    └── nginx.service

8 directories, 24 files

How to build Nginx RPM

# check nginx stable version from official website
http://nginx.org/en/download.html

# check configuration
vim build.sh

NGX_VER=1.14.2
WKDIR="/root/rpmbuild/SOURCES"

# check nginx version
vim nginx-spec

# run build.sh
./build.sh

# RPM package
Processing files: nginx-garena-1.14.2-0.noarch
warning: File listed twice: /etc/nginx/nginx.conf
Provides: config(nginx-garena) = 1.14.2-0 nginx-garena = 1.14.2-0
Requires(interp): /bin/sh
Requires(rpmlib): rpmlib(CompressedFileNames) <= 3.0.4-1 rpmlib(FileDigests) <= 4.6.0-1 rpmlib(PayloadFilesHavePrefix) <= 4.0-1
Requires(post): /bin/sh
Requires: libGeoIP.so.1()(64bit) libc.so.6()(64bit) libc.so.6(GLIBC_2.10)(64bit) libc.so.6(GLIBC_2.11)(64bit) libc.so.6(GLIBC_2.14)(64bit) libc.so.6(GLIBC_2.17)(64bit) libc.so.6(GLIBC_2.2.5)(64bit) libc.so.6(GLIBC_2.3)(64bit) libc.so.6(GLIBC_2.3.2)(64bit) libc.so.6(GLIBC_2.3.4)(64bit) libc.so.6(GLIBC_2.4)(64bit) libc.so.6(GLIBC_2.7)(64bit) libcrypt.so.1()(64bit) libcrypt.so.1(GLIBC_2.2.5)(64bit) libdl.so.2()(64bit) libdl.so.2(GLIBC_2.2.5)(64bit) libgcc_s.so.1()(64bit) libgcc_s.so.1(GCC_3.0)(64bit) libgcc_s.so.1(GCC_3.3)(64bit) libm.so.6()(64bit) libm.so.6(GLIBC_2.2.5)(64bit) libpam.so.0()(64bit) libpam.so.0(LIBPAM_1.0)(64bit) libpcre.so.1()(64bit) libpthread.so.0()(64bit) libpthread.so.0(GLIBC_2.2.5)(64bit) libpthread.so.0(GLIBC_2.3.2)(64bit) libz.so.1()(64bit) rtld(GNU_HASH)
warning: Arch dependent binaries in noarch package
Checking for unpackaged file(s): /usr/lib/rpm/check-files /root/rpmbuild/BUILDROOT/nginx-garena-1.14.2-0.x86_64
Wrote: /root/rpmbuild/SRPMS/nginx-garena-1.14.2-0.src.rpm
Wrote: /root/rpmbuild/RPMS/noarch/nginx-garena-1.14.2-0.noarch.rpm
Executing(%clean): /bin/sh -e /var/tmp/rpm-tmp.iR5dLd
+ umask 022
+ cd /root/rpmbuild/BUILD
+ cd nginx-garena-1.14.2
+ '[' /root/rpmbuild/BUILDROOT/nginx-garena-1.14.2-0.x86_64 '!=' / ']'
+ rm -rf /root/rpmbuild/BUILDROOT/nginx-garena-1.14.2-0.x86_64
+ exit 0

基于openresty制作nginx rpm安裝包

推薦大家向openresty轉(zhuǎn)型,我在編譯過程中主要遇到以下4個小問題

  1. 問題1沿用官方的luajit v2.0.5編譯新版本lua-nginx-module應(yīng)該會提示建議切換至openresty的luajit v2.1分支
  2. 問題2的解決方案是使用低版本lua-nginx-module v0.10.14,使用最新版發(fā)現(xiàn)會觸發(fā)該問題,等待官方修復(fù)
  3. 問題3的原因是因為 nginx 啟動需要一點點時間,而 systemd 在 nginx 完成啟動前就去讀取 pid file造成讀取 pid 失敗
  4. 問題4的libluajit-5.1.so.2問題跟著我的步驟執(zhí)行應(yīng)該不會出現(xiàn),不需要執(zhí)行l(wèi)n軟鏈接等操作
[root@gop-sg-192-168-56-103 wangao]# tailf /var/log/nginx/error.log
# 問題1
2019/11/04 11:59:56 [alert] 2749#2749: detected a LuaJIT version which is not OpenResty's; many optimizations will be disabled and performance will be compromised (see https://github.com/openresty/luajit2 for OpenResty's LuaJIT or, even better, consider using the OpenResty releases from https://openresty.org/en/download.html)

# 問題2
2019/11/04 11:59:56 [alert] 2749#2749: failed to load the 'resty.core' module (https://github.com/openresty/lua-resty-core); ensure you are using an OpenResty release from https://openresty.org/en/download.html (reason: module 'resty.core' not found:
    no field package.preload['resty.core']
    no file './resty/core.lua'
    no file '/usr/local/share/luajit-2.0.5/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') in /etc/nginx/nginx.conf:117

# 問題3
[root@gop-sg-192-168-56-103 wangao]# systemctl status nginx
● nginx.service - The NGINX HTTP and reverse proxy server
   Loaded: loaded (/usr/lib/systemd/system/nginx.service; enabled; vendor preset: disabled)
   Active: active (running) since Mon 2019-08-19 01:36:46 +08; 2 months 17 days ago
  Process: 1105 ExecStart=/usr/sbin/nginx (code=exited, status=0/SUCCESS)
  Process: 1071 ExecStartPre=/usr/sbin/nginx -t (code=exited, status=0/SUCCESS)
 Main PID: 1111 (nginx)
    Tasks: 2
   CGroup: /system.slice/nginx.service
           ├─1111 nginx: master process /usr/sbin/nginx
           └─1112 nginx: worker process

Aug 19 01:36:46 gop-sg-192-168-56-103 systemd[1]: Starting The NGINX HTTP and reverse proxy server...
Aug 19 01:36:46 gop-sg-192-168-56-103 nginx[1071]: nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
Aug 19 01:36:46 gop-sg-192-168-56-103 nginx[1071]: nginx: configuration file /etc/nginx/nginx.conf test is successful
Aug 19 01:36:46 gop-sg-192-168-56-103 systemd[1]: Failed to read PID from file /run/nginx.pid: Invalid argument
Aug 19 01:36:46 gop-sg-192-168-56-103 systemd[1]: Started The NGINX HTTP and reverse proxy server.

# 問題4
nginx: error while loading shared libraries: libluajit-5.1.so.2: cannot open shared object file: No such file or directory

環(huán)境初始化

# check current os version and kernel
cat /etc/redhat-release
CentOS Linux release 7.5.1804 (Core)
uname -r
3.10.0-862.el7.x86_64

# yum
yum install -y gcc pam-devel git rpm-build pcre-devel openssl openssl-devel geoip-devel

# mkdir
mkdir -p /root/rpmbuild/SOURCES/
mkdir -p /root/rpmbuild/SPECS/
mkdir -p /root/rpmbuild/RPMS/noarch

# download openssl
cd /usr/local/src
wget https://github.com/openssl/openssl/archive/OpenSSL_1_0_2t.tar.gz
tar xf OpenSSL_1_0_2t.tar.gz
mv openssl-OpenSSL_1_0_2t/ openssl-1_0_2t

# install lua
sh luajit2.sh

# confirm these files are correct
[root@gop-sg-192-168-56-103 ~]# tree nginx-rpmbuild-centos7/
nginx-rpmbuild-centos7/
├── build.sh
├── conf_build
│   ├── conf
│   │   ├── django_fastcgi_params
│   │   ├── fastcgi.conf
│   │   ├── fastcgi_params
│   │   ├── koi-utf
│   │   ├── koi-win
│   │   ├── mime.types
│   │   ├── naxsi_core.rules
│   │   ├── nginx.conf
│   │   ├── scgi_params
│   │   ├── sites-available
│   │   │   └── 000_stub_status
│   │   ├── uwsgi_params
│   │   └── win-utf
│   ├── logrotate.d
│   │   └── nginx
│   ├── nginx.conf
│   └── nginx.service
├── luajit2.sh
├── luajit.sh
├── nginx-spec
└── nginx-template
    ├── conf
    │   ├── django_fastcgi_params
    │   ├── naxsi_core.rules
    │   ├── nginx.conf
    │   └── sites-available
    │       └── 000_stub_status
    ├── logrotate.d
    │   └── nginx
    ├── nginx.conf
    └── nginx.service

8 directories, 26 files

luajit2.sh

# https://github.com/openresty/luajit2/releases
LUAVER="v2.1-20190912"
WKDIR="/root/rpmbuild/SOURCES"
cd $WKDIR
wget https://github.com/openresty/luajit2/archive/$LUAVER.tar.gz
tar zxf $LUAVER.tar.gz
rm -f $LUAVER.tar.gz
cd luajit2*
make BUILDMODE=static
make install
export LUAJIT_LIB=/usr/local/lib
export LUAJIT_INC=/usr/local/include/luajit-2.1
# ln -s /usr/local/lib/libluajit-5.1.so.2 /lib64/libluajit-5.1.so.2
# https://github.com/openresty/lua-nginx-module/issues/8

build.sh


NGX_VER=1.16.1
BDDIR="/root/rpmbuild/BUILD"
WKDIR="/root/rpmbuild/SOURCES"
CURRENTDIR=`dirname $(readlink -f "$0")`
echo $CURRENTDIR
export LUAJIT_LIB=/usr/local/lib
# export LUAJIT_INC=/usr/local/include/luajit-2.0
export LUAJIT_INC=/usr/local/include/luajit-2.1
cd $BDDIR
rm -rf *
cd $WKDIR
rm -rf *
wget http://nginx.org/download/nginx-$NGX_VER.tar.gz
tar xzf nginx-$NGX_VER.tar.gz
rm -f nginx-$NGX_VER.tar.gz
mv nginx-$NGX_VER nginx-garena-$NGX_VER
cd nginx-garena-$NGX_VER/

mkdir -p contrib
cd contrib/
git clone git://github.com/openresty/headers-more-nginx-module.git
git clone git://github.com/openresty/echo-nginx-module.git
git clone git://github.com/simplresty/ngx_devel_kit.git
# git clone git://github.com/openresty/lua-nginx-module
wget https://github.com/openresty/lua-nginx-module/archive/v0.10.14.tar.gz
tar xf v0.10.14.tar.gz
mv lua-nginx-module-0.10.14 lua-nginx-module
git clone git://github.com/nbs-system/naxsi.git
rm -rf */.git
rm -rf *.tar*
cd ..

cp -r $CURRENTDIR/nginx-template/* $WKDIR/nginx-garena-$NGX_VER/
cp $CURRENTDIR/nginx-spec /root/rpmbuild/SPECS/
# cp /root/rules $WKDIR/nginx-garena-$NGX_VER/debian/
cd $WKDIR
tar zcf nginx-garena-$NGX_VER.tar.gz nginx-garena-$NGX_VER/
cd /root/rpmbuild/SPECS/
rpmbuild -ba nginx-spec
cd /root/rpmbuild/RPMS/noarch

nginx-spec


Name: nginx-garena
Version: 1.16.1
Release: 0
Summary: nginx garena rpm
Source0: nginx-garena-%{version}.tar.gz
License: GPL
Group: Rahul
BuildArch: noarch
BuildRoot: %{_tmppath}/%{name}-buildroot
%description
Garena self-build Nginx.
%define _binaries_in_noarch_packages_terminate_build   0
%prep
%setup -q %{name}-%{version}
%build
CFLAGS="$RPM_OPT_FLAGS" ./configure --prefix=/usr/share/nginx/ \
                    --with-ld-opt="-Wl,-rpath,/usr/local/lib" \
                    --sbin-path=/usr/sbin/nginx \
                    --conf-path=/etc/nginx/nginx.conf \
                    --error-log-path=/var/log/nginx/error.log \
                    --http-log-path=/var/log/nginx/access.log \
                    --pid-path=/var/run/nginx.pid \
                    --lock-path=/var/lock/nginx.lock \
                    --http-client-body-temp-path=/var/lib/nginx/body \
                    --http-fastcgi-temp-path=/var/lib/nginx/fastcgi \
                    --http-proxy-temp-path=/var/lib/nginx/proxy \
                    --http-scgi-temp-path=/var/lib/nginx/scgi \
                    --http-uwsgi-temp-path=/var/lib/nginx/uwsgi \
                    --with-pcre-jit \
                    --with-http_flv_module \
                    --with-http_mp4_module \
                    --with-file-aio \
                    --with-http_v2_module \
                    --with-stream \
                    --with-stream_ssl_module \
                    --with-http_auth_request_module \
                    --with-http_slice_module \
                    --with-threads \
                    --with-http_gunzip_module \
                    --with-http_random_index_module \
                    --with-http_secure_link_module \
                    --with-http_geoip_module \
                    --with-http_ssl_module \
                    --with-openssl=/usr/local/src/openssl-1_0_2t \
                    --with-http_addition_module \
                    --with-http_geoip_module \
                    --with-http_gzip_static_module \
                    --with-http_realip_module \
                    --with-ipv6 \
                    --without-mail_pop3_module \
                    --without-mail_imap_module \
                    --without-mail_smtp_module \
                    --add-module=contrib/headers-more-nginx-module \
                    --add-module=contrib/echo-nginx-module \
                    --add-module=contrib/ngx_devel_kit \
                    --add-module=contrib/lua-nginx-module \
                    --add-module=contrib/naxsi/naxsi_src
make -j8

%install
[ "$RPM_BUILD_ROOT" != "/" ] && rm -rf $RPM_BUILD_ROOT
make DESTDIR=$RPM_BUILD_ROOT install
install -m 0755 -d $RPM_BUILD_ROOT/etc/nginx/sites-enabled
install -m 0755 -d $RPM_BUILD_ROOT/etc/nginx/sites-available
install -m 0755 -d $RPM_BUILD_ROOT/var/log/nginx
install -m 0755 -d $RPM_BUILD_ROOT/var/lib/nginx
install -D -m 644 conf/sites-available/000_stub_status $RPM_BUILD_ROOT/etc/nginx/sites-available/000_stub_status
install -D -m 644 conf/django_fastcgi_params $RPM_BUILD_ROOT/etc/nginx/django_fastcgi_params
install -D -m 644 conf/naxsi_core.rules $RPM_BUILD_ROOT/etc/nginx/naxsi_core.rules
install -D -m 644 conf/sites-available/000_stub_status $RPM_BUILD_ROOT/etc/nginx/sites-enabled/000_stub_status
install -D -m 644 logrotate.d/nginx $RPM_BUILD_ROOT/etc/logrotate.d/nginx
install -D -m 644 nginx.service $RPM_BUILD_ROOT/usr/lib/systemd/system/nginx.service
%clean
[ "$RPM_BUILD_ROOT" != "/" ] && rm -rf $RPM_BUILD_ROOT
%post
useradd -s /sbin/nologin -d /var/www www-data
chown -R www-data.www-data /var/log/nginx /var/lib/nginx
systemctl enable nginx
echo %{name}-%{version} is successfully installed.
systemctl start nginx
%files
%defattr(-,root,root)
%dir /etc/nginx
/etc/nginx/*
%dir /usr/src/debug/nginx-garena-%{version}
/usr/src/debug/nginx-garena-%{version}/*
/usr/sbin/nginx
%dir /usr/share/nginx
/usr/share/nginx/*
/etc/logrotate.d/nginx
/usr/lib/systemd/system/nginx.service
/usr/lib/debug/*
/usr/lib/debug/.build-id/*
%dir /var/log/nginx
%dir /var/lib/nginx
%config(noreplace) /etc/nginx/nginx.conf

logrotate.d/nginx


/var/log/nginx/*.log /var/log/nginx/*/*.log{
    daily
    missingok
    rotate 14
    compress
    delaycompress
    notifempty
    create 640 root adm
    sharedscripts
    postrotate
        [ ! -f /var/run/nginx.pid ] || kill -USR1 `cat /var/run/nginx.pid`
    endscript
}

nginx.conf


user www-data;
worker_processes auto;

#worker_cpu_affinity 00000001 00000010 00000100 00001000 00010000 00100000 01000000 10000000;
worker_rlimit_nofile 655650;

error_log  /var/log/nginx/error.log;
pid        /var/run/nginx.pid;

events {
        worker_connections  10240;
}


http {
#       include       /etc/nginx/naxsi_core.rules;
        include       mime.types;
        default_type  application/octet-stream;
    log_format garena '$remote_addr - $remote_user [$time_iso8601] "$request" $status $body_bytes_sent '
                '"$http_referer" "$http_user_agent" $request_time $upstream_response_time "$http_x_forwarded_for" "$geoip_country_code" "$host"';
        log_format garena_post '$remote_addr - $remote_user [$time_iso8601] "$request" $status $body_bytes_sent '
                '"$http_referer" "$http_user_agent" $request_time $upstream_response_time "$http_x_forwarded_for" "$geoip_country_code" "$host" "$request_body"';
    log_format compact '$time_iso8601|$remote_addr|$geoip_country_code|$http_x_forwarded_for|$status|$request_time|$upstream_response_time|$request_length|$body_bytes_sent|$host|$request|$http_referer|$http_user_agent';
    log_format compact_post '$time_iso8601|$remote_addr|$geoip_country_code|$http_x_forwarded_for|$status|$request_time|$upstream_response_time|$request_length|$body_bytes_sent|$host|$request|$http_referer|$http_user_agent|$request_body';


#       access_log  logs/access.log  main;

        sendfile        on;
#       tcp_nopush     on;

        keepalive_timeout  30;
        fastcgi_keep_conn on;
        tcp_nodelay        on;

        gzip  on;
        gzip_disable "MSIE [1-6]\.(?!.*SV1)";
        gzip_proxied any;
        gzip_buffers 16 8k;
        gzip_types    text/plain application/javascript application/x-javascript text/javascript text/xml text/css application/json;
        gzip_vary on;
        include /etc/nginx/sites-enabled/*;

    set_real_ip_from 10.0.0.0/8;
    real_ip_header    X-Forwarded-For;
#   real_ip_recursive on;
#   geoip_country /usr/share/GeoIP/GeoIP.dat;

        server_tokens off;         # returns "Server: nginx"
    more_clear_headers Server; # doesn't return "Server: " header at all
}

nginx.service

https://www.nginx.com/resources/wiki/start/topics/examples/initscripts/

[Unit]
Description=The nginx HTTP and reverse proxy server
After=network.target remote-fs.target nss-lookup.target

[Service]
Type=forking
PIDFile=/run/nginx.pid
ExecStartPre=/usr/sbin/nginx -t
ExecStart=/usr/sbin/nginx
ExecReload=/bin/kill -s HUP $MAINPID
KillMode=process
KillSignal=SIGQUIT
TimeoutStopSec=5
PrivateTmp=true

[Install]
WantedBy=multi-user.target

編譯生成nginx rpm

  1. 編輯build.sh和nginx-spec定義NGX_VER=1.16.1
  2. 如果需要改變contrib的module也是修改上述兩處位置
sh build.sh

extracting debug info from /root/rpmbuild/BUILDROOT/nginx-garena-1.16.1-0.x86_64/usr/sbin/nginx
dwz: Too few files for multifile optimization
/usr/lib/rpm/sepdebugcrcfix: Updated 1 CRC32s, 0 CRC32s did match.
12776 blocks
+ /usr/lib/rpm/check-buildroot
+ /usr/lib/rpm/redhat/brp-compress
+ /usr/lib/rpm/redhat/brp-strip-static-archive /usr/bin/strip
+ /usr/lib/rpm/brp-python-bytecompile /usr/bin/python 1
+ /usr/lib/rpm/redhat/brp-python-hardlink
+ /usr/lib/rpm/redhat/brp-java-repack-jars
Processing files: nginx-garena-1.16.1-0.noarch
warning: File listed twice: /etc/nginx/nginx.conf
Provides: config(nginx-garena) = 1.16.1-0 nginx-garena = 1.16.1-0
Requires(interp): /bin/sh
Requires(rpmlib): rpmlib(CompressedFileNames) <= 3.0.4-1 rpmlib(FileDigests) <= 4.6.0-1 rpmlib(PayloadFilesHavePrefix) <= 4.0-1
Requires(post): /bin/sh
Requires: libGeoIP.so.1()(64bit) libc.so.6()(64bit) libc.so.6(GLIBC_2.10)(64bit) libc.so.6(GLIBC_2.11)(64bit) libc.so.6(GLIBC_2.14)(64bit) libc.so.6(GLIBC_2.17)(64bit) libc.so.6(GLIBC_2.2.5)(64bit) libc.so.6(GLIBC_2.3)(64bit) libc.so.6(GLIBC_2.3.2)(64bit) libc.so.6(GLIBC_2.3.4)(64bit) libc.so.6(GLIBC_2.4)(64bit) libc.so.6(GLIBC_2.7)(64bit) libcrypt.so.1()(64bit) libcrypt.so.1(GLIBC_2.2.5)(64bit) libdl.so.2()(64bit) libdl.so.2(GLIBC_2.2.5)(64bit) libgcc_s.so.1()(64bit) libgcc_s.so.1(GCC_3.0)(64bit) libgcc_s.so.1(GCC_3.3)(64bit) libm.so.6()(64bit) libm.so.6(GLIBC_2.2.5)(64bit) libpcre.so.1()(64bit) libpthread.so.0()(64bit) libpthread.so.0(GLIBC_2.2.5)(64bit) libpthread.so.0(GLIBC_2.3.2)(64bit) libz.so.1()(64bit) rtld(GNU_HASH)
warning: Arch dependent binaries in noarch package
Checking for unpackaged file(s): /usr/lib/rpm/check-files /root/rpmbuild/BUILDROOT/nginx-garena-1.16.1-0.x86_64
Wrote: /root/rpmbuild/SRPMS/nginx-garena-1.16.1-0.src.rpm
Wrote: /root/rpmbuild/RPMS/noarch/nginx-garena-1.16.1-0.noarch.rpm
Executing(%clean): /bin/sh -e /var/tmp/rpm-tmp.Qc7JbE
+ umask 022
+ cd /root/rpmbuild/BUILD
+ cd nginx-garena-1.16.1
+ '[' /root/rpmbuild/BUILDROOT/nginx-garena-1.16.1-0.x86_64 '!=' / ']'
+ rm -rf /root/rpmbuild/BUILDROOT/nginx-garena-1.16.1-0.x86_64
+ exit 0

[root@sg-gop-10-71-49-5 wangao]# nginx -V
nginx version: nginx/1.16.1
built with OpenSSL 1.0.2t  10 Sep 2019
TLS SNI support enabled
configure arguments: --prefix=/usr/share/nginx/ --with-ld-opt=-Wl,-rpath,/usr/local/lib --sbin-path=/usr/sbin/nginx --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --pid-path=/var/run/nginx.pid --lock-path=/var/lock/nginx.lock --http-client-body-temp-path=/var/lib/nginx/body --http-fastcgi-temp-path=/var/lib/nginx/fastcgi --http-proxy-temp-path=/var/lib/nginx/proxy --http-scgi-temp-path=/var/lib/nginx/scgi --http-uwsgi-temp-path=/var/lib/nginx/uwsgi --with-pcre-jit --with-http_flv_module --with-http_mp4_module --with-file-aio --with-http_v2_module --with-stream --with-stream_ssl_module --with-http_auth_request_module --with-http_slice_module --with-threads --with-http_gunzip_module --with-http_random_index_module --with-http_secure_link_module --with-http_geoip_module --with-http_ssl_module --with-openssl=/usr/local/src/openssl-1_0_2t --with-http_addition_module --with-http_geoip_module --with-http_gzip_static_module --with-http_realip_module --with-ipv6 --without-mail_pop3_module --without-mail_imap_module --without-mail_smtp_module --add-module=contrib/headers-more-nginx-module --add-module=contrib/echo-nginx-module --add-module=contrib/ngx_devel_kit --add-module=contrib/lua-nginx-module --add-module=contrib/naxsi/naxsi_src

# Prettier
https://serverfault.com/questions/223509/how-can-i-see-which-flags-nginx-was-compiled-with

[root@sg-gop-10-71-49-5 wangao]# 2>&1 nginx -V | xargs -n1
nginx
version:
nginx/1.16.1
built
with
OpenSSL
1.0.2t
10
Sep
2019
TLS
SNI
support
enabled
configure
arguments:
--prefix=/usr/share/nginx/
--with-ld-opt=-Wl,-rpath,/usr/local/lib
--sbin-path=/usr/sbin/nginx
--conf-path=/etc/nginx/nginx.conf
--error-log-path=/var/log/nginx/error.log
--http-log-path=/var/log/nginx/access.log
--pid-path=/var/run/nginx.pid
--lock-path=/var/lock/nginx.lock
--http-client-body-temp-path=/var/lib/nginx/body
--http-fastcgi-temp-path=/var/lib/nginx/fastcgi
--http-proxy-temp-path=/var/lib/nginx/proxy
--http-scgi-temp-path=/var/lib/nginx/scgi
--http-uwsgi-temp-path=/var/lib/nginx/uwsgi
--with-pcre-jit
--with-http_flv_module
--with-http_mp4_module
--with-file-aio
--with-http_v2_module
--with-stream
--with-stream_ssl_module
--with-http_auth_request_module
--with-http_slice_module
--with-threads
--with-http_gunzip_module
--with-http_random_index_module
--with-http_secure_link_module
--with-http_geoip_module
--with-http_ssl_module
--with-openssl=/usr/local/src/openssl-1_0_2t
--with-http_addition_module
--with-http_geoip_module
--with-http_gzip_static_module
--with-http_realip_module
--with-ipv6
--without-mail_pop3_module
--without-mail_imap_module
--without-mail_smtp_module
--add-module=contrib/headers-more-nginx-module
--add-module=contrib/echo-nginx-module
--add-module=contrib/ngx_devel_kit
--add-module=contrib/lua-nginx-module
--add-module=contrib/naxsi/naxsi_src

[root@sg-gop-10-71-49-5 wangao]# 2>&1 nginx -V | xargs -n1 | grep ssl
--with-stream_ssl_module
--with-http_ssl_module
--with-openssl=/usr/local/src/openssl-1_0_2t

[root@sg-gop-10-71-49-5 wangao]# 2>&1 nginx -V | xargs -n1 | grep lua
--add-module=contrib/lua-nginx-module

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • rljs by sennchi Timeline of History Part One The Cognitiv...
    sennchi閱讀 7,817評論 0 10
  • mean to add the formatted="false" attribute?.[ 46% 47325/...
    ProZoom閱讀 3,129評論 0 3
  • “創(chuàng)業(yè)有七禁,它們是:情商低,膽子小,玻璃心,自律差,吃不得苦,買單不積極,還總幻想一夜暴富。很多人認為,如...
    爽子1987閱讀 589評論 0 0
  • 為什么銷售業(yè)績差,很大一部分原因就是是銷售不夠狠,做事不夠極致!想要客戶簽單其實很簡單,要么就是給他足夠的好處,超...
    李子鍋閱讀 1,014評論 0 0

友情鏈接更多精彩內(nèi)容