目录

背景

问题描述

原因分析

解决方案

解决步骤

背景

        某个客户现场需要安装、部署nginx,可是客户不给root用户,也不给root权限,只给了p05_dev普通用户。

        因此安装nginx的时候,需要将nginx安装到用户有权限的目录下,包括相关的配置文件、日志文件。

问题描述

        没有root权限,缺少gcc等依赖,因此无法直接使用源码编译、安装nginx。

        从公司内部的服务器上,压缩并复制了一个使用正常的nginx。该nginx是用root用户,使用源码编译安装的,路径是默认的nginx安装路径 /usr/local/nginx

       打包复制到客户服务器上的路径/home/ap/p05_dev/nginx之后,使用-c指定了使用的配置文件,可是还是启动报错:

[p05_dev@localhost sbin]$ ./nginx -c /home/ap/p05_dev/nginx/conf/nginx.conf
nginx: [alert] could not open error log file: open() "/usr/local/nginx/logs/error.log" failed (2: No such file or directory)
2022/08/07 12:16:31 [warn] 5255#0: the "user" directive makes sense only if the master process runs with super-user privileges, ignored in /home/ap/p05_dev/nginx/conf/nginx.conf:2
2022/08/07 12:16:31 [emerg] 5255#0: mkdir() "/usr/local/nginx/client_body_temp" failed (2: No such file or directory)

nginx.conf配置:

原因分析

        看错误描述,使用的配置文件已经是/home/ap/p05_dev/nginx/conf/nginx.conf了,不过有几个问题:

1.错误日志的路径是/usr/local/nginx/logs/error.log,而不是配置文件里配置的/home/ap/p05_dev/nginx/logs/error.log

2.配置文件里配置的用户不生效,因为不是用super-user(超级管理员)来启动

3.client_body_temp的路径还是/usr/local/nginx

        查看进程之后,发现nginx没有启动成功。error.log、client_body_temp这些都还是在/usr/local/nginx目录下,可以推断说使用的还是编译好的nginx里配置的,nginx.conf里的配置不全或没生效。

解决方案

        既然是在编译好的nginx里就指定了默认的日志文件、模块等的路径,那么即使解决了上面的三个问题,也有可能出现新的问题。解决方法就是不偷懒,按照新的路径、模块,重新编译安装nginx。

        但是编译安装nginx需要安装gcc、openssl-devel、pcre-devel等,需要有root权限,而客户不给root权限,只能找变通方式:

1.离线安装gcc、openssl-devel、pcre-devel等

        可以参考博文:Linux系统无网络安装nginx_霍三三!的博客-CSDN博客_linux无网络安装nginx

2.在有root权限的服务器上编译、安装好nginx,再压缩复制到客户现场。

解决步骤

        以下步骤,没做特殊说明的话,默认使用p05_dev用户来操作

1.下载nginx源码,比如nginx-1.16.1.tar.gz

nginx: download 或者  Tags · nginx/nginx (github.com)

2.使用root用户安装依赖

yum install gcc openssl-devel pcre-devel zlib-devel

3.上传、解压nginx源码

4.使用root用户或p05_dev创建目标文件夹,比如/home/ap/p05_dev,并将文件夹的用户和用户组更改成p05_dev

[root@localhost home]# chown p05_dev:p05_dev p05_dev

5.编译

        编译命令的选项,参考官方文档: Building nginx from Sources

也可以使用命令查看:./configure --help

这里主要指定了目标文件夹位置、配置文件位置、用户等

./configure --prefix=/home/ap/p05_dev/nginx --conf-path=/home/ap/p05_dev/nginx/conf/nginx.conf --pid-path=/home/ap/p05_dev/nginx/nginx.pid --user=p05_dev --sbin-path=/home/ap/p05_dev/nginx/sbin/nginx --with-http_ssl_module

 6.安装

make && make install

        安装完之后,会在目标路径/home/ap/p05_dev/生成nginx文件夹。

7.更改配置文件nginx.conf

        因为不是root权限来启动监听端口不能小于1024,修改conf下的nginx.conf配置文件,将server里的端口改成大于1024(默认是80)

8.测试、启动、停止、重启nginx

        nginx -t

9.将nginx文件夹打包之后,移动并解压到目标服务器的指定文件夹/home/ap/p05_dev/nginx

10.验证

 

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐