[TOC] #### 1. 前言 --- user 指令用于配置运行 nginx 服务器的 worker 进程的用户和用户组,这样对于系统权限的访问控制更加精细和安全 如果你修改过 nginx.conf,那么就会看到文件第一行的 user 指令配置,默认是被注释掉的(默认使用 nobody 用户) ```bash # 查看 nginx.conf 前三行 cat /usr/local/nginx/conf/nginx.conf | head -n 3 ``` ![](https://img.itqaq.com/art/content/dd7b4dae62512e8309814bdcbd69bcbe.png) #### 2. 配置文件 --- 语法: ``` # user_name 用户名 # group_name 用户组(可省略,省略时使用和用户名名称相同的组,一般都会省略) user user_name [group_name]; ``` 接下来,我们通过 nginx.conf 配置文件指定 worker 进程的启动用户 第一步:创建 www 用户 ```bash useradd www; ``` 第二步:打开 nginx.conf,修改 user 指令配置 ```bash # 去除 user 指令的注释,将 nobody 修改为 www vim /usr/local/nginx/conf/nginx.conf # 查看 nginx.conf 前三行,确认修改成功 cat /usr/local/nginx/conf/nginx.conf | head -n 3 # 重载配置 /usr/local/nginx/sbin/nginx -s reload ``` ![](https://img.itqaq.com/art/content/b18f9d1cb80b5a72f354c66a7a1e68e0.png) 第三步:创建 `/root/html/index.html` 页面,添加以下内容 ```bash mkdir /root/html vim /root/html/index.html ``` ```html <!DOCTYPE html> <html> <head> <title>欢迎使用 Nginx !</title> <meta charset="UTF-8"> <style> body { width: 35em; margin: 0 auto; font-family: Tahoma, Verdana, Arial, sans-serif; } </style> </head> <body> <h1>欢迎使用 Nginx !</h1> <p>如果您看到此页面,则表明 nginx web 服务器已成功安装并运行。</p> <p><em>感谢您使用 nginx。</em></p> </body> </html> ``` 第四步:修改 nginx.conf,将默认的站点目录 `html`,修改为 `/root/html` ``` location / { root /root/html; index index.html index.htm; } ``` ```bash # 重载配置 /usr/local/nginx/sbin/nginx -s reload ``` 第五步:测试访问,发现 403 Forbidden 错误 这是因为 worker 进程的启动用户是 www,但是 www 用户没有访问 /root/html 目录的权限 ![](https://img.itqaq.com/art/content/5c3f46d880792da42498fe302a8c6eda.png) 第六步:将站点目录复制到 `/home/www` 下,这是 www 用户的家目录,当然是有权限的 ```bash cp -r /root/html /home/www ``` 修改 nginx.conf,将站点目录 `/root/html`,修改为 `/home/www/html` ``` location / { root /home/www/html; index index.html index.htm; } ``` ```bash # 重载配置 /usr/local/nginx/sbin/nginx -s reload ``` 再访问就发现可以正常显示了 ![](https://img.itqaq.com/art/content/ef16b6c27355b4a016d29c2189663c4d.png) #### 3. 编译参数 --- user 指令也可以在编译的时候设置,如果配置文件和编译安装时都指定了该参数,生效的是配置文件中的配置 ```bash ./configure --user=USER --group=GROUP ``` 编译时即使指定了该参数,配置文件中的内容还是被注释掉的 nobody 用户,这是正常的 ```bash # 参数配置 ./configure --prefix=/usr/local/nginx --user=www # 查看配置文件内容和进程启动用户 /usr/local/nginx/sbin/nginx -V cat /usr/local/nginx/conf/nginx.conf | head -n 3 ps -ef | grep nginx ``` ![](https://img.itqaq.com/art/content/2020fb6f64409235d32b9b6b26fad2ed.png)