欢迎访问我的博客,你的支持,是我最大的动力!

CentOS7编译安装nginx笔记

Linux 小马奔腾 10678℃ 评论
目录:
[显示]

系统环境

uname -a
Linux localhost.localdomain 3.10.0-514.el7.x86_64 #1 SMP Tue Nov 22 16:42:41 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux
cat /etc/redhat-release
CentOS Linux release 7.3.1611 (Core)
date
Thu Feb 1 19:10:27 CST 2018

所需文件

源码

nginx : https://nginx.org/download/nginx-1.12.2.tar.gz

nginx-dav-ext-module : https://github.com/arut/nginx-dav-ext-module

pcre : https://ftp.pcre.org/pub/pcre/pcre-8.32.tar.gz

openssl-fips : https://www.openssl.org/source/old/1.0.2/openssl-1.0.2k.tar.gz

perl : http://www.cpan.org/src/5.0/perl-5.16.3.tar.gz

zlib : http://www.zlib.net/fossils/zlib-1.2.7.3.tar.gz

编译环境
gcc
依赖:cpp、glibc-devel、glibc-headers、kernel-headers、libmpc、mpfr
伴随升级:glibc、glibc-common、libgcc、libgomp
gcc-c++
依赖:libstdc++-devel
伴随升级:libstdc++

yum install gcc gcc-c++

依赖软件

编译安装仅需要使用pcre库、openssl库和zlib库的源码,所以实际上并不需要再编译安装pcre、openssl、zlib,这三个软件直接使用yum安装即可。如果编译安装这三款软件,不建议使用自定义的路径,因为系统会找不到,所以编译时使用默认路径。在版本上,因为我们希望最终调用的是系统自带的,所以下载源码时也选择的与yum仓库相同的版本。

此外,nginx-dav-ext-module模块是对http_dav_module的增强,但编译它需要expat的支持;openssl需要perl 5。

#nginx-dav-ext-module
yum install expat expat-devel
#功能安装,也可以编译
yum install pcre openssl zlib perl
#开发包,安装这些则不需要相应的源码包了
yum install pcre-devel openssl-devel

开始安装

建立安装目录:mkdir -p /opt/web_engine

安装编译软件:yum install gcc gcc-c++

其它需要的软件:yum install wget

安装nginx依赖

PCRE:

wget https://ftp.pcre.org/pub/pcre/pcre-8.32.tar.gz
tar zxvf pcre-8.32.tar.gz
cd pcre-8.32
./configure --prefix=/opt/web_engine/pcre
make && make install
cd

ZLIB:

wget http://www.zlib.net/fossils/zlib-1.2.7.3.tar.gz
tar zxvf zlib-1.2.7.3.tar.gz
cd zlib-1.2.7.3
./configure --prefix=/opt/web_engine/zlib
make && make install
cd

PERL5:  OpenSSL需要该包

wget http://www.cpan.org/src/5.0/perl-5.16.3.tar.gz
tar zxvf perl-5.16.3.tar.gz
cd perl-5.16.3
./Configure -Dprefix=/opt/web_engine/perl
要回答很多问题,全部回车,确认目录的时候,输入yese
make && make install
cd

OpenSSL:

wget https://www.openssl.org/source/old/1.0.2/openssl-1.0.2k.tar.gz
tar zxvf openssl-1.0.2k.tar.gz
cd openssl-1.0.2k
./config --prefix=/opt/web_engine/openssl
make && make install
cd

注:以上编译安装可以使用下面这一条命令替代:

yum install pcre zlib perl openssl

nginx-dav-ext-module:

yum install expat unzip
手动下载nginx-dav-ext-module-master.zip
unzip unzip nginx-dav-ext-module-master.zip
安装nginx

nginx:

wget https://nginx.org/download/nginx-1.12.2.tar.gz
tar zxvf nginx-1.12.2.tar.gz
cd nginx-1.12.2
#export CFLAGS=-fPIC   输入过该选项,未测试是不是必须
yum install expat-devel    #报错,需要头文件
./configure \
--prefix=/opt/web_engine/nginx \
--sbin-path=/opt/web_engine/nginx/sbin/nginx \
--modules-path=/opt/web_engine/nginx/modules \
--conf-path=/opt/web_engine/nginx/conf/nginx.conf \
--error-log-path=/var/log/nginx/error.log \
--http-log-path=/var/log/nginx/access.log \
--pid-path=/opt/web_engine/nginx/run/nginx.pid \
--lock-path=/opt/web_engine/nginx/run/nginx.lock \
--http-client-body-temp-path=/opt/web_engine/nginx/cache/client_temp \
--http-proxy-temp-path=/opt/web_engine/nginx/cache/proxy_temp \
--http-fastcgi-temp-path=/opt/web_engine/nginx/cache/fastcgi_temp \
--http-uwsgi-temp-path=/opt/web_engine/nginx/cache/uwsgi_temp \
--http-scgi-temp-path=/opt/web_engine/nginx/cache/scgi_temp \
--user=nginx \
--group=nginx \
--with-compat \
--with-file-aio \
--with-threads \
--with-http_addition_module \
--with-http_auth_request_module \
--with-http_dav_module \
--with-http_flv_module \
--with-http_gunzip_module \
--with-http_gzip_static_module \
--with-http_mp4_module \
--with-http_random_index_module \
--with-http_realip_module \
--with-http_secure_link_module \
--with-http_slice_module \
--with-http_ssl_module \
--with-http_stub_status_module \
--with-http_sub_module \
--with-http_v2_module \
--with-mail \
--with-mail_ssl_module \
--with-stream \
--with-stream_realip_module \
--with-stream_ssl_module \
--with-stream_ssl_preread_module \
--with-cc-opt='-O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches -m64 -mtune=generic -fPIC' \
--with-openssl=/root/openssl-1.0.2k \
--with-pcre=/root/pcre-8.32 \
--with-zlib=/root/zlib-1.2.7.3 \
--add-module=/root/nginx-dav-ext-module-master
后续工作

创建nginx用户:

adduser --system --no-create-home --shell /bin/false nginx

创建定义的目录:

mkdir -p /opt/web_engine/nginx/modules
mkdir -p /opt/web_engine/nginx/cache/client_temp
mkdir -p /opt/web_engine/nginx/cache/proxy_temp
mkdir -p /opt/web_engine/nginx/cache/fastcgi_temp
mkdir -p /opt/web_engine/nginx/cache/uwsgi_temp
mkdir -p /opt/web_engine/nginx/cache/scgi_temp
mkdir -p /opt/web_engine/nginx/conf/conf.d
mkdir -p /var/log/nginx

nginx日志轮换:

添加到systemd:

操作使用

检查编译完成的nginx版本

[root@localhost]# /opt/web_engine/nginx/sbin/nginx -v
nginx version: nginx/1.12.2
[root@localhost]# /opt/web_engine/nginx/sbin/nginx -V
nginx version: nginx/1.12.2
built with OpenSSL 1.0.2k 26 Jan 2017
TLS SNI support enabled
configure arguments: --prefix=/opt/web_engine/nginx --sbin-path=/opt/web_engine/nginx/sbin/nginx --modules-path=/opt/web_engine/nginx/modules --conf-path=/opt/web_engine/nginx/conf/nginx.conf --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --pid-path=/opt/web_engine/nginx/run/nginx.pid --lock-path=/opt/web_engine/nginx/run/nginx.lock --http-client-body-temp-path=/opt/web_engine/nginx/cache/client_temp --http-proxy-temp-path=/opt/web_engine/nginx/cache/proxy_temp --http-fastcgi-temp-path=/opt/web_engine/nginx/cache/fastcgi_temp --http-uwsgi-temp-path=/opt/web_engine/nginx/cache/uwsgi_temp --http-scgi-temp-path=/opt/web_engine/nginx/cache/scgi_temp --user=nginx --group=nginx --with-compat --with-file-aio --with-threads --with-http_addition_module --with-http_auth_request_module --with-http_dav_module --with-http_flv_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_mp4_module --with-http_random_index_module --with-http_realip_module --with-http_secure_link_module --with-http_slice_module --with-http_ssl_module --with-http_stub_status_module --with-http_sub_module --with-http_v2_module --with-mail --with-mail_ssl_module --with-stream --with-stream_realip_module --with-stream_ssl_module --with-stream_ssl_preread_module --with-cc-opt='-O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches -m64 -mtune=generic -fPIC' --with-openssl=/root/openssl-1.0.2k --with-pcre=/root/pcre-8.32 --with-zlib=/root/zlib-1.2.7.3 --add-module=/root/nginx-dav-ext-module-master

nginx的运行

systemctl start nginx
systemctl stop nginx
systemctl status nginx
systemctl reload nginx测试配置文件语法
nginx -t -c /root/test.conf

Nginx控制信号

进 程 信 号 说 明
主进程 TERM,INT 快速关闭
主进程 QUIT 从容关闭
主进程 HUP 重载配置;以新的配置开始新工作进程;从容关闭旧工作进程
主进程 USR1 重新打开日志文件
主进程 USR2 平滑升级可执行程序
主进程 WINCH 从容关闭工作进程
工作进程 TERM,INT 快速关闭
工作进程 QUIT 从容关闭
工作进程 USR1 重新打开日志文件
从容停止命令,等所有请求结束后关闭服务:
kill -QUIT nginx主进程号快速停止命令,立刻关闭nginx进程
kill -TERM nginx主进程号如果以上命令不管用,可以强制停止

-s方式

平滑改变 nginx 配置

当 nginx 接收到 HUP 信号后,会先尝试解析配置文件(如果指定配置文件,就使用指定的,否则使用默认的),成功的话,就应用新的配置文件。之后,nginx 运行新的工作进程并从容关闭旧的工作进程。通知工作进程关闭监听套接字但是继续为当前连接的客户提供服务。所有客户端的服务完成后,旧的工作进程被关闭。 如果新的配置文件应用失败,nginx 将继续使用旧的配置进行工作。

平滑升级到新的二进制代码
不中断服务的情况下,进行二进制文件替换。首先,使用新的可执行程序替换旧的(最好做好备份),然后,发送 USR2 (kill -USR2 pid)信号给主进程。主进程将重命名它的 .pid 文件为 .oldbin,然后执行新的可执行程序,依次启动新的主进程和新的工作进程。在这时,两个 nginx 实例会同时运行,一起处理输入的请求。要逐步停止旧的实例,必须再手动发送 WINCH 信号给旧的主进程,然后,它的工作进程就将开始从容关闭,一段时间后,旧的工作进程处理了所有已连接的请求后退出。因为旧的服务还尚未关闭它监听的套接字,所以,还需要通过下面的几步,此时仍可以恢复旧的服务:
发送 HUP 信号给旧的主进程 - 它将在不重载配置文件的情况下启动它的工作进程
发送 QUIT 信号给新的主进程,要求其从容关闭其工作进程
发送 TERM 信号给新的主进程,迫使其退出
如果因为某些原因新的工作进程不能退出,向其发送 KILL 信号
新的主进程退出后,旧的主进程会由移除 .oldbin 前缀,恢复为它的 .pid 文件,这样,一切就都恢复到升级之前了。
如果尝试升级成功,而你也希望保留新的服务器时,发送 QUIT 信号给旧的主进程使其退出而只留下新的服务器运行。

资料

Nginx中文官方文档:https://wizardforcel.gitbooks.io/nginx-doc/content/

转载请注明:轻风博客 » CentOS7编译安装nginx笔记

喜欢 (0)or分享 (0)