一、下载相关依赖包:

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)

可自行根据个人需要下载适合的依赖包。

Pcre:是一个正则表达式库。(必须)
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++环境:
https://www.alipan.com/s/twbTKXq65dv

下载后,把安装包解压到服务器上,先安装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服务,重新请求地址,即可正常返回对应页面的内容。

最后修改:2024 年 01 月 25 日
给我一点小钱钱也很高兴啦!o(* ̄▽ ̄*)ブ