此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