在使用 nginx 和 spawn-fcgi 过程中
突然遇到问题
nginx 抛出了 forbidden 403
应该是权限问题。
我检查 nginx error.log
发现 其中显示这样的信息
2010/03/01 12:07:15 [error] 2700#0: *93 "/usr/share/nginx/html/index.html" is forbidden (13: Permission denied), client: 192.168.1.60, server: 192.168.18.2, request: "GET / HTTP/1.1", host: "192.168.18.2"
就是说 nginx 访问 index.html 没有权限罗
我看下。 html根目录目前的权限是
drwxrwx--- 4 root beihai365 4.0K Mar 1 06:44 /usr/share/nginx/html
看下 nginx 程序跑的是啥权限
ps aux | grep nginx
显示
root 2699 0.0 0.5 7828 1192 ? Ss 09:48 0:00 nginx: master process /usr/sbin/nginx -c /etc/nginx/nginx.conf
nginx 2700 0.0 0.9 8124 2028 ? S 09:48 0:00 nginx: worker process
显示的是主程序时 root 的 。 子程序时 nginx 用户
而 nginx 用户目前是属于 beihai365组的。 那为啥还有权限错误呢??
原来忽略了一个问题.
上面那个是 nginx 的 子进程 。 子进程 的 用户 和用户组,是在主进程中指定的。 估计其他有衍生进程的程序都是一样的道理
我们看下 nginx ,他可以设置多进程。他是在 nginx.conf 里面指定 子进程的用户和用户组的
语法: user user [group]
缺省值: nobody nobody
指定Nginx Worker进程运行用户,默认是nobody帐号。
例如:
user www users;
而 spawn-fcgi 程序呢。 是在 启动 php-cgi 的时候指定的
我们看
/usr/bin/spawn-fcgi -a 127.0.0.1 -p 9000 -C 5 -u nginx -g beihai365 -f /usr/bin/php-cgi
其实 -u nginx 这里可以去掉,经过测试, 单纯的 -u nginx 而不要 -g 参数的话,虽然 nginx 用户是属于 beihai365组的,但任然不能正常访问。
而去掉-u 只要 -g beihai365 的话,就会正常。
看nginx.conf
user nginx beihai365;
再看下, html根目录目前的权限是
drwxrwx--- 4 root beihai365 4.0K Mar 1 06:44 /usr/share/nginx/html