非root用戶啟動nginx
背景:
公司服務器申請root權限一般會比較麻煩。所以希望能以公共賬號(普通用戶)來啟動nginx,方便后續運維。
nginx啟動進程可以在/etc/nginx/nginx.conf中,指定user (user www-data), 但是這個只有在root用戶啟動的情況才有意義,啟動之后,master process還是root用戶的,並不能滿足我們的需求 。
我們需要能用非root用戶啟動nginx master process
做法如下:
- 注釋掉
/etc/nginx/nginx.conf
的:user www-data
這行 - 此時用普通用戶執行
/usr/sbin/nginx -t
測試配置,報如下錯誤nginx: [emerg] open() "/var/run/nginx.pid" failed (13: Permission denied)
- 直接在
/etc/nginx/
目錄下, 執行mkdir pid
新建目錄,修改/etc/nginx/nginx.conf
的:pid /run/nginx/nginx.pid
為pid /etc/nginx/pid/nginx.pid
- 修改相關文件夾
/etc/nginx
和/var/log/nginx
的權限。 如執行:chown -R user:usergroup /etc/nginx
此時,執行nginx -t
測試配置沒問題,即可正常以普通用戶啟動nginx了
后續
運行一天后,發現部分有些頁面的數據不能正常加載,排查發現response中返回的json被截斷了
進一步排查,發現nginx錯誤日志中顯示: open() "/var/lib/nginx/proxy/8/04/0000000048" failed (13: Permission denied)
解決:執行chown -R user:usergroup /var/lib/nginx
修改/var/lib/nginx/文件夾的權限。同時為穩妥起見,將whereis nginx
顯示的文件夾全改成普通用戶了