本文仅作为一次上线遇到的问题进行总结。
事情是这样的,一次上生产,甲方的安全组对线上环境的中间件进行漏洞扫描,然后发现了一些漏洞,需要升级中间件,其中有一个nginx的升级,由于nginx是服务器分配时自带的,我们理所应当的认为,它是具备nginx的编译环境的,所以我们只上传了nginx的源码包,然后就出现了下面一幕。
执行下面命令正常进行了配置
./configure --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module
执行编译并安装,然后就是这一步,就报了下面的错误
make && make install
经过一番百度,发现是没有编译环境,然后执行了编译环境的验证命令
验证是否安装执行命令 gcc -v
验证g++,执行命令 g++ -v
验证pcre
pcre-config --version
验证openssl
openssl version -a
经过一番验证,发现少了好多编译依赖环境,然后我们怀疑这个nginx是编译之后上传到服务器的,经过一番询问,果真是这样的,结果导致上线失败。
第二天找了硬件组要了一份编译后的nginx升级包,为了防止再次上线失败,就在开发环境进行了测试。正常,我们启动是用下面的命令进行启动,但是发现不可以。
./nginx -s reload
报了一个错误
nginx: [error] open() “/usr/local/nginx/logs/nginx.pid” failed (2: No such file or directory)
然后经过一番查询,发现原因是我们使用的是非root用户进行启动的,所以不能使用这种方法,
使用非root用户启动nginx时,需要知道配置文件。执行下面命令进行启动
./nginx -c /usr/local/nginx/conf/nginx.conf
自此启动成功
总结:
1.在不清楚部署环境时不要盲目的去升级中间件。
2.nginx可以使用编译后的包进行部署,前提是编译环境跟运行环境的操作系统一致。
3.nginx使用非root用户启动时,需要使用下面命令。
启动
./nginx -c /usr/local/nginx/conf/nginx.conf
停止
./nginx -c /usr/local/nginx/conf/nginx.conf -s stop
重启
./nginx -c /usr/local/nginx/conf/nginx.conf -s reload