重启时使用非 root 用户自动启动 Nginx

重启时使用非 root 用户自动启动 Nginx

你好,我正在尝试使用 nginx 命令行在重启时自动启动 nginx,但我无法使用该服务,因为我需要以非 root 用户身份运行它。我在 crontab 中添加了一个条目,以便在重启时调用该脚本,但仍然无法启动该服务。但是,当我正常运行脚本时,它可以工作,但在重启时却无法工作。

crontab -e

@reboot bash start_nginx.sh

启动nginx

#!/bin/bash
/usr/sbin/nginx -c /opt/nginx/nginx.conf

答案1

我能够使用 systemd 在 Ubuntu 18.04 和 nginx 1.14 中以非 root 用户身份自动启动 nginx。下面分 4 个步骤进行说明

  1. 创建用户并配置必需文件的权限
  2. 配置新的默认端口
  3. 设置守护进程将在以下用户下启动
  4. 启用自动启动,启动服务并验证

创建用户并配置必需文件的权限

我找到了指南这里对我定位自己和为非 root 用户配置一些较难找到的 nginx 文件权限非常有帮助。

关于日志权限,/var/log/nginx 我通过向用户添加 adm 组并chmod赋予权限来处理这个问题。

$ sudo usermod -G <your group>,adm <your user> `$ sudo chmod 664 /var/log/nginx/*.log

请注意,adm 组有权访问整个系统的日志文件,并可以运行 xconsole 查看 adm 组拥有的文件

$ sudo find / -group adm

参见 ubuntu 论坛

请注意,其他脚本可能会尝试更改 /var/log 中的权限,请参阅这里。我添加了覆盖

$ sudo dpkg-statoverride --add www-data adm 664 /var/log/nginx/error.log

$ sudo dpkg-statoverride --add www-data adm 664 /var/log/nginx/access.log

配置新的默认端口

我们需要这样做,因为非 root 用户无法绑定到端口 < 1024 修改指定的侦听器,/etc/nginx/nginx.conf因此未设置 < 1024

$ sudo nano /etc/nginx/nginx.conf

server {
    listen 8443;

}

并修改 /etc/nginx/sites-available/default 以更改默认监听端口 80

server {
    listen 8000 default_server;
    listen[::]:8000 default_server;
...
}

设置用户守护进程将在(编辑)下启动

感谢 Michael Hampton 的评论。请注意,我/lib/systemd/system通过阅读这篇文章找到了 nginx 服务文件nginx 文档,但不要修改 中的任何内容,而是/lib/systemd/system将文件复制到/etc/systemd/system并在那里进行修改,包括 下面的两行新行,[Service]用于要在其下运行 nginx 的用户和组

$ sudo cp /lib/systemd/system/nginx.service /etc/systemd/system
$ sudo nano /lib/systemd/system/nginx.service

...
[Service]
User=<your user>
Group=<your user's group>
...

(注意,此 nginx 服务文件位置可能因 nginx 的不同编译而不同)

启用自动启动,启动服务并验证

$ sudo systemctl enable nginx
$ sudo systemctl start nginx
$ sudo systemctl status nginx

你最终会得到类似这样的结果

$ ps aux | grep nginx
nginx     1523  0.0  0.0 132216  1552 ?        Ss   06:12   0:00 nginx: master process /usr/sbin/nginx -g daemon on; master_process on;
nginx     1524  0.0  0.0 132628  5720 ?        S    06:12   0:00 nginx: worker process
nginx     1525  0.0  0.0 132628  2428 ?        S    06:12   0:00 nginx: worker process
nginx     1526  0.0  0.0 132628  2428 ?        S    06:12   0:00 nginx: worker process
nginx     1527  0.0  0.0 132628  2428 ?        S    06:12   0:00 nginx: worker process
nginx     1528  0.0  0.0 132628  2428 ?        S    06:12   0:00 nginx: worker process
nginx     1529  0.0  0.0 132628  2428 ?        S    06:12   0:00 nginx: worker process
nginx     1530  0.0  0.0 132628  2428 ?        S    06:12   0:00 nginx: worker process
nginx     1531  0.0  0.0 132628  2428 ?        S    06:12   0:00 nginx: worker process

甚至主进程也没有以 root 身份运行(我认为这很酷!)

相关内容