前言
上篇文章写了在新买的vps上,使用nginx搭建了一个http代理服务器。在nginx的编译、安装过程中,遇到了几个问题,所以本篇文章就是总结一下nginx安装问题和解决方法。
nginx安装
通常情况下,nginx的安装非常简单,执行下面几行命令就能完成安装。
wget http://nginx.org/download/nginx-1.18.0.tar.gz
tar zxvf nginx-1.18.0.tar.gz
cd nginx-1.18.0
./configure --prefix=/usr/local/nginx
make && make install
在nginx官网下载源码包、解压,在检测本地的环境后进行编译安装,整个过程也就是一分钟搞定。但在实际操作过程中,尤其是新服务器的环境中,还是会遇到形形色色的问题。
configure问题
在执行configure检测服务器环境时,会对服务器安装的依赖进行扫描,如果没有nginx的依赖,就会报错。
1. C++编译器版本
遇到的第一个问题就是configure: error: Invalid C++ compiler or C++ compiler flags,无效的c++编译器。
这个问题其实就是c++编译器版本过低导致的,通过执行命令安装高版本的c++编译器即可解决问题。
yum -y install centos-release-scl
yum -y install devtoolset-9-gcc devtoolset-9-gcc-c++ devtoolset-9-binutils
scl enable devtoolset-9 bash
echo "source /opt/rh/devtoolset-9/enable" >> /etc/profile
通过gcc -v查看编译器信息。
可以看到,安装了9.3版本的gcc。
2. pcre缺失
PCRE(Perl Compatible Regular Expressions)模块是一个正则表达式库,用于在nginx服务器中进行正则表达式匹配和替换操作。PCRE库提供了类似Perl语言的正则表达式语法,并支持复杂的模式匹配和替换功能。
我在执行configure时提示”pcre not found“。
这里的解决方案就是安装pcre模块。
# 下载pcre
wget https://mirrors.aliyun.com/exim/pcre/pcre-8.44.tar.gz
tar xvf pcre-8.44.tar.gz
# 生成Makefile时指定pcre
./configure --prefix=/usr/local/nginx --with-pcre=/root/pcre-8.44
在检测环境时,使用 --with-pcre指定pcre的目录,这样就不会报错了。
3. gzip依赖缺失
nginx的http_gzip模块是用于对HTTP响应数据进行压缩的模块。通过启用http_gzip模块,nginx可以将服务器返回的内容进行压缩,以减少传输数据量,加快页面加载速度,节省带宽并提高网络性能。
如果启动http_gzip模块,就要安装zlib依赖的支持。
我的vps没有安装zlib-devel,所以在检测环境时就会提示:要么使用 --without-http_gzip_module不启用http_gzip模块,要么安装zlib库。
执行yum install zlib-devel安装zlib库就能解决这个问题。
make编译问题
使用make将nginx的源码编译成linux可执行文件的过程中,也遇到了几个问题。
Werrors
在编译时,源码中有类似于switch case的语句,有的case语句没有添加break,正常情况下开发者想加就加,最多给你来个警告。但是在编译时这种warnning就会被当成error处理。
报错:src/core/ngx_murmurhash.c:37:11: warning: this statement may fall through [-Wimplicit-fallthrough=]
解决方法就是在编译的当前目录下,找到objs文件夹,进入objs并编辑Makefile,找到有下面内容的这行。
Werror: gcc将所有的警告当成错误进行处理,将CFLAGS 这行内容中的 -Werror去掉,wq保存退出,再编译安装。
最后在/usr/local目录中,成功安装了nginx。
结语
这就是我在vps安装nginx遇到的4个问题,涉及编译器、依赖和语法问题,在安装nginx时可以有一个参考。