一、下载相关依赖包:
nginx:http://nginx.org/en/download.html
(版本:nginx-1.20.2 tar.gz)
pcre:https://sourceforge.net/projects/pcre/files/pcre/8.45/
(版本:pcre-8.45.tar.gz)
zlib:http://www.zlib.net/
(版本:zlib-1.2.13.tar.gz)
oppenssl:https://www.openssl.org/source/
(版本:openssl-1.1.1w.tar.gz)
可自行根据个人需要下载适合的依赖包。
Zlib:是一个开源的数据压缩库,提供了对数据的无损压缩和解压功能。(必须)
Openssl:是一个开源的加密库,提供了各种加密算法和安全协议的实现。(必须)
下载好文件后,nginx包上传到服务器的root/data目录下(没有该目录则新建),上传的目录都不影响随意,但是要记得openssl、pcre、zlib的解压路径方便后续编译nginx的时候指定目录。
在安装nginx的时候,一定要根据你要安装nginx的版本,查阅一下对应的openssl、pcre、zlib版本不然,你在执行make的时候就会报错。以下是我在升级nginx为最新的时候,还是用的之前它相关依赖包的版本时报错的信息。
正式开始前需要确认gcc、g++开发库已经预先安装好。为什么呢?是因为亲身经历,如果没有提前安装好gcc、g++的话在进行后续编译nginx的时候就行出现这个问题:
./configure: error: the HTTP rewrite module requires the PCRE library.
You can either disable the module by using --without-http_rewrite_module
option, or install the PCRE library into the system, or build the PCRE library
statically from the source with nginx by using --with-pcre=<path> option.
然后这个大概意思就是你没有PCRE的库需要安装,去网上查找安装PCRE的教程,但是在安装PCRE的时候又会出现大概这个问题configure: error: C++ compiler missing or inoperational 就是你没有c++的环境,即需要安装gcc相关包,然后又一步一步的找,发现安装gcc的时候又需要3个依赖包(gmp、mpc、mprf)然后又去找包解压编译安装,但到时候就真的安装成功吗?不一定,因此我这里换了一种思路,就是先把c++的相关环境配置好,再进行相关nginx的操作。具体步骤如下:
二、检查GCC、G++是否安装:
检查gcc是否安装
gcc --version
检查g++是否安装
g++ --version
下载后,把安装包解压到服务器上,先安装gcc,再安装g++。分别执行两个文件夹下的install.sh。
执行命令 sh install.sh 它其实就是去执行rpm -ivh 等全部需要安装命令,这样就可以不用手动去执行了如果执行上述命令出现了问题(一般都是版本问题) 有问题可以手动执行下列图片中所有的rpm。
例:rpm -ivh gcc-4.8.5-4.el7.x86_64.rpm
同一个目录下批量安装rpm文件:rpm -ivh *rpm
在执行上述命令的时候,如遇版本冲突问题,请在命令上追加 --replacefiles 参数。
例:rpm -ivh gcc-4.8.5-4.el7.x86_64.rpm --replacefiles
如果在执行上述加了参数的命令执行的时候仍然报错:类似于下面这种错误:
error: Failed dependencies:
cpp = 4.8.5-4.el7 is needed by gcc-4.8.5-4.el7.x86_64 libgomp = 4.8.5-4.el7 is needed by gcc-4.8.5-4.el7.x86_64 gcc < 8 conflicts with (installed) UnionTech-rpm-config-129-1.uelc20.03.x86_64
这个意思大概就是依赖错误;出现这种的原因是依赖关系非常复杂,当你试图先安装任何一个包时都会出现这样的依赖关系错误,这时候你就应该强制安装了,我认为只要你把服务或软件需要的包都装上,强制安装也不会出问题的,不会有什么影响。
解决方法:强制安装需要安装的rpm文件 参数 --force
(强制) --nodeps
(不查找依赖关系)
例:rpm -ivh gcc-4.8.5-4.el7.x86_64.rpm --force --nodeps
三、安装pcre:
tar -zxvf pcre-8.45.tar.gz
cd pcre-8.45/
./configure
make
make install
四、安装zlib:
tar -zxvf zlib-1.2.13.tar.gz
cd zlib-1.2.13/
./configure
make
make install
五、安装openssl:
tar -zxvf openssl-1.1.1w.tar.gz
cd openssl-1.1.1w/
./config
make
make install
六、安装nginx:
tar -zxvf nginx-1.20.2.tar.gz
cd nginx-1.20.2/
./configure --prefix=/data/nginx --with-http_stub_status_module --with-http_ssl_module
make
make install
--prefix=/data/nginx
:指定安装目录为/data/nginx。在编译和安装完成后,软件将被安装到该目录下.--with-http_stub_status_module
:启用 HTTP Stub Status 模块。该模块是 nginx 的一个内置模块,用于获取 nginx 服务器的状态信息。--with-http_ssl_module
:启用 HTTP SSL 模块。该模块使得 nginx 支持通过 HTTPS 提供安全的加密传输。
测试nginx是否安装成功:
#sbin目录下:
./nginx
关闭nginx:
#列出Nginx的相关进程
ps –ef | grep nginx
#杀死Nginx相关进程,也相当于停止Nginx
kill pid
#sbin目录下:
#停止Nginx
./nginx -s stop
下面是我自己遇到的问题:
首先我要占据8085端口,于是在/home/web
目录下新建了个index.html
文件。
编辑nginx.conf
文件,新增配置:
server {
listen 8085;
server_name localhost;
location / {
root /home/web;
index index.html;
}
}
然后返回nginx的sbin目录下:
#检查nginx配置是否正常:
./nginx -t
#刷新nginx配置:
./nginx -s reload
测试服务:
curl http://127.0.0.1:8085
结果返回了403,经过检查防火墙没有开启,SELinux 状态也是关闭的。并且web
文件夹和index.html
文件都具有最高权限。
查看了nginx的error.logs
报错:
"/home/web/index.html"is forbidden (13: Permission denied),client:127.0.0.1,server:localhost,request:"GET HTTP/1.1",host:"127.0.0.1:8085"
重启了N次服务,最后发现是nginx启动用户和使用用户不一致导致的。
解决方法:
找到nginx.conf
文件,把第二行注释掉的#user nobody;
放开,改成:
user root;
然后重启nginx服务,重新请求地址,即可正常返回对应页面的内容。