• 非root用户,没有root权限,安装nginx


    目录

    背景

    问题描述

    原因分析

    解决方案

    解决步骤

    背景

            某个客户现场需要安装、部署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.验证

     

  • 相关阅读:
    WRF后处理:python cartopy绘制土地利用/土地分类图//python绘制WRF下垫面类型(以北极为例)
    7-51 愿天下有情人都是失散多年的兄妹——dfs
    hbase和aerospike基础概念
    Shell脚本-常用命令
    TS类中初始化属性语法糖
    在 FPGA 上快速构建 PID 算法
    想要精通算法和SQL的成长之路 - N皇后问题
    MMPose 1.0:迈向更优雅、更强大的姿态估计研发和应用框架
    【Serverless】快速集成云函数HarmonyOS
    LeetCode-102-二叉树的层序遍历
  • 原文地址:https://blog.csdn.net/lzhfdxhxm/article/details/126208969