Trường hợp, bạn tiến hành cài đặt compile Nginx xong rồi khởi động dịch vụ thì gặp ngay thông báo lỗi ‘getpwnam(“www”) failed‘ như sau :
# /etc/init.d/nginx start getpwnam(“www”) failed in /etc/nginx/nginx.conf
Một số thông báo lỗi tương đương :
getpwnam(“root”) failed getpwnam(“nginx”) failed getpwnam(“www-data”) failed
Vậy thông báo đó là gì và fix như thế nào ?
1. Nguyên nhân
Khi mà bạn compile Nginx từ source code, thường bạn sẽ chỉ định thông tin ‘user‘ và ‘group‘ sẽ được sử dụng để chạy dịch vụ dưới quyền user đó.
Ví dụ lúc compile Nginx có 2 option chỉ định thông tin như sau :
# ./configure --user=www --group=www
Thì bạn cần phải tuyệt đối đảm bảo rằng user đó đã được tạo và tồn tại trên hệ thống thì mới có thể khởi chạy dịch vụ dưới quyền user đó. Trong trường hợp bạn quên khởi tạo user tương ứng thì bạn sẽ gặp ngay thông báo lỗi này, vì Nginx không tìm thấy thông tin user sử dụng cho hoạt động dịch vụ web server.
Ok, vậy tóm lại nguyên nhân là ‘không tồn tại user trên hệ thống dùng để hoạt động dịch vụ Nginx Web Server dưới quyền user đó‘. Lỗi này thường gặp khi compile source Nginx .
2. Khắc phục
Đơn giản vô cùng, chỉ cần khởi tạo ra user đó trên hệ thống là được rồi. Mình sẽ tạo user đó với 2 lệnh đơn giản như sau :
# groupadd -r www # useradd -r -s /sbin/nologin -d /dev/null -g www www
Rồi sau đó bạn khởi động lại dịch vụ Nginx là xong. Nếu có bất kì thắc mắc nào thì các bạn bình luận ở dưới nhé !