项目有需求,需要自己重新编译nginx,添加一些模块,需要生成rpm包,这网上二进制的nginx rpm包,可以根据该rpm包,修改一下spec文件,再重新打包即可。具体步骤如下所示:
1.安装相关工具,主要是rpmbuild等相关工具
从下载https://sourceforge.net/projects/rpmrebuild/files/rpmrebuild/2.12-1/下载:
wget https://jaist.dl.sourceforge.net/project/rpmrebuild/rpmrebuild/2.14/rpmrebuild-2.14.tar.gz
tar -zxvf rpmrebuild-2.14.tar.gz
make && make install
yum install -y rpm-build rpmdevtools
1.下载nginx rpm包
wget http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm
3.提取rpm包的spec文件,具体命令为:
rpm -ivh nginx-release-centos-7-0.el7.ngx.noarch.rpm
./rpmrebuild.sh -s /root/rpmbuild/SPECS/nginx.spec nginx-release-centos-7-0.el7.ngx.noarch
4.解压原版RPM包,具体命令如下所示:
cd /root/rpmbuild/BUILDROOT/
mkdir -p nginx-1.16.2-1.el7_4.ngx.x86_64 -- 后面要生成的rpm包
cd nginx-1.16.2-1.el7_4.ngx.x86_64
cp -rf xx/nginx-1.14.2-1.el7_4.ngx.x86_64.rpm .
rpm2cpio *.rpm | cpio -idv -- 解压原版RPM包,执行完后会在当前目录生成原版RPM包包含的文件
5.根据需求替换修改rpm解压出来的文件及修改对应的spec文件,修改完成后,到 /root/rpmbuild/SPECS/执行命令:
rpmbuild -ba nginx.spec
6.到对应的RPM目录下就可以看到重新生成的RPM包,如/root/rpmbuild/RPMS/x86_64/
7.把对应的rpm包安装到centos 7设备上,然后执行service nginx start就可启动,我这边启动过程中有遇到一个问题,导致nginx无法启动,具体日志如下所示:
[root@localhost ~]# systemctl status nginx.service
● nginx.service - nginx - high performance est proxy server
Loaded: loaded (/usr/lib/systemd/system/nginx.service; disabled; vendor preset: disabled)
Active: failed (Result: exit-code) since 五 2019-12-13 17:42:03 CST; 7s ago
Docs: http://nginx.org/en/docs/
Process: 5838 ExecStart=/usr/sbin/nginx -c /etc/nginx/nginx.conf (code=exited, status=1/FAILURE)
12月 13 17:42:03 localhost.localdomain systemd[1]: Starting nginx - high performance est proxy server...
12月 13 17:42:03 localhost.localdomain nginx[5838]: nginx: [emerg] bind() to 0.0.0.0:5900 failed (13: Permission denied)
12月 13 17:42:03 localhost.localdomain systemd[1]: nginx.service: control process exited, code=exited status=1
12月 13 17:42:03 localhost.localdomain systemd[1]: Failed to start nginx - high performance est proxy server.
12月 13 17:42:03 localhost.localdomain systemd[1]: Unit nginx.service entered failed state.
12月 13 17:42:03 localhost.localdomain systemd[1]: nginx.service failed.
该问题主要是我这有侦听UDP 5900,而systemctl 会走selinux,而selinux会限制UDP 5900,导致nginx无权限,关闭selinux即可,具体命令为:
临时关闭selinux
setenforce 0
永久关闭selinux
[root@localhost ~]# vim /etc/sysconfig/selinux
SELINUX=enforcing 改为 SELINUX=disabled
重启服务reboot
至此nginx可正常启动了,另外也通过systemctl list-unit-files查看所有的启动项,是否开机启动