[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)