此nginx编译安装的步骤经测试正常可用

[root@m01 scripts]# cat install-nginx.sh 
#/bin/sh

#创建统一的安装目录,下载解压nginx安装包

mkdir /server/tools -p
cd /server/tools
wget http://nginx.org/download/nginx-1.12.2.tar.gz
tar xf nginx-1.12.2.tar.gz

#安装依赖
yum install -y pcre-devel openssl-devel
useradd -M -s /sbin/nologin www

#进入安装包下,进行安装的基础配置,指定用户、安装路径等
cd nginx-1.12.2
./configure --prefix=/application/nginx-1.12.2 --user=www --group=www --with-http_ssl_module --with-http_stub_status_module
make && make install

#创建软连接,方便后期管理
ln -s /application/nginx-1.12.2 /application/nginx

#启动nginx
/application/nginx/sbin/nginx

当拿到一个新环境时候,通过命令检查之前编译参数:

[root@web01 sbin]# ./nginx -V

nginx version: nginx/1.12.2
built by gcc 4.4.7 20120313 (Red Hat 4.4.7-18) (GCC) 
built with OpenSSL 1.0.1e-fips 11 Feb 2013
TLS SNI support enabled
configure arguments: --prefix=/application/nginx-12.2 --user=www --group=www --with-http_ssl_module --with-http_stub_status_module

遇到问题如下:

[root@web01 sbin]# ./nginx -t

nginx: [emerg] unknown directive "stream" in /application/nginx/tcp.d/emqx_tcp_nginx.conf:2
nginx: configuration file /application/nginx-12.2/conf/nginx.conf test failed

原因是: 需要指定安装stream模块否则不支持 –with-stream参数指定安装stream模块

解决办法: 重新编译支持该模块

一直以来,Nginx 并不支持tcp协议,所以后台的一些基于TCP的业务就只能通过其他高可用负载软件来完成了,比如Haproxy。

这算是一个nginx比较明显的缺憾。不过,在1.90发布后这个认知将得到改写:

ngx_stream_core_module 这个模块在1.90版本后将被启用。但是并不会默认安装,需要在编译时通过指定 --with-stream 参数来激活这个模块。

找到安装nginx的源码根目录,如果没有的话下载新的源码,nginx下载地址为:http://nginx.org/download/

这里只是举例,版本对不上:

tar xvzf nginx-1.3.2.tar.gz cd nginx-1.3.2

以下是重新编译的代码和模块

./configure --prefix=/application/nginx-12.2 --user=www --group=www --with-http_ssl_module --with-http_stub_status_module --with-stream

make 千万别make install,否则就覆盖安装了

make完之后在objs目录下就多了个nginx,这个就是新版本的程序了

备份旧的nginx程序

cp /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginx.bak

把新的nginx程序覆盖旧的

cp objs/nginx /usr/local/nginx/sbin/nginx

测试新的nginx程序是否正确

/usr/local/nginx/sbin/nginx -t

平滑重启nginx

/usr/local/nginx/sbin/nginx -s reload

查看ngixn版本极其编译参数

/usr/local/nginx/sbin/nginx -V