码迷,mamicode.com
首页 > 其他好文 > 详细

Nginx-403-error

时间:2016-01-19 19:00:27      阅读:161      评论:0      收藏:0      [点我收藏+]

标签:

  1. 主要参考文章
  2. 开发环境Linux+Nginx+PHP-FPM。
  3. 假设你有一些Linux经验,可是对Linux命令可能有一些模糊不清。

致敬那些愿意去帮助别人的人

Nginx 403

从字面意义上来看Forbidden不就是禁止访问,很自然的就应该想会权限问题嘛。不错,确实如此。Nginx的权限主要是Nginx要去访问其他资源才会出现。

  1. 确实如参考文档所说,需要配置index.html或者index.php
  2. 就是用户名和资源的访问权限限制,本文主要讲述一下处理路径。

Nginx用户

先看Nginx配置片段

#user liujb
worker_processes  1;
error_log   /Users/liujb/logs/nginx/error.log notice;
events {
    worker_connections  256;
}
http {
    server {
        listen       80;
        server_name  localhost;
        root /Users/liujb/Dropbox/Code/mis-dev/;
        index index.html index.php;
        error_page   500 502 503 504  /50x.html;

        location /static {
            add_header Access-Control-Allow-Origin  *;
        }

        location / {
            if (!-e $request_filename) {
                rewrite ^/(auth|crm|kefu|cms|fist|orange|citest)(.*)$ /$1/index.php last;
            }
        }

        location ~ \.php$ {
            try_files $uri =404;
            fastcgi_pass 127.0.0.1:9000;
            fastcgi_index index.php;
            fastcgi_param  SCRIPT_FILENAME    $document_root$fastcgi_script_name;
            include fastcgi_params;
        }
        ...
    }
    ...
}

可以看出并未指定Nginx运行用户,注意下user配置,root要访问的目录是 /Users/liujb/Dropbox/Code/mis-dev

Nginx服务情况
?  nginx git:(master) ps aux | grep nginx | grep -v grep
nobody           7062   0.0  0.0  2465944    680   ??  S    10:02PM   0:00.00 nginx: worker process
root             7061   0.0  0.0  2465944    472   ??  Ss   10:02PM   0:00.00 nginx: master process nginx

可以看出Nginx的master进程是root用户在运行,而work进程是nobody用户在运行。

看其中的web的root目录的权限
?  Code  ll mis-dev
total 0
drwxr-xr-x@  8 liujb   staff   272B Oct 14 10:21 auth
drwxr-xr-x@  9 liujb   staff   306B Feb 13  2015 citest
drwxr-xr-x@  7 liujb   staff   238B Sep 18 20:18 crm
drwxr-xr-x@  8 liujb   staff   272B Oct 26 11:53 fist
drwxr-xr-x@  7 liujb   staff   238B Jun 16 15:36 orange
drwxr-xr-x@ 10 liujb   staff   340B Sep 15 13:04 scripts
drwxr-xr-x@ 18 liujb   staff   612B Oct 29 17:44 static
drwxr-xr-x@  3 nobody  staff   102B Oct 27 10:49 upload

看得出非组内用户也是能读能执行的。所以权限是ok的。

再看一下PHP-FPM的配置
; Unix user/group of processes
; Note: The user is mandatory. If the group is not set, the default user's
group
; will be used.
user = nobody
group = nobody
php-fpm运行用户
?  nginx git:(master) ps aux | grep php-fpm | grep -v grep
liujb            7367   0.0  0.0  2457984   3144 s001  S+   10:13PM   0:00.05 vim /etc/php-fpm.conf
nobody           7160   0.0  0.0  2471668    692   ??  S    10:02PM   0:00.00 php-fpm
nobody           7159   0.0  0.0  2470644    692   ??  S    10:02PM   0:00.00 php-fpm
root             7158   0.0  0.0  2470644    892   ??  Ss   10:02PM   0:00.03 php-fpm

master是root用户,work是nobody用户

写在最后

总之需要保障

  1. Nginx用户有权限访问和执行webroot的目录。
  2. PHP-fpm用户或者组内用户有权限访问和执行webroot的目录。
  3. 解决路径就是先查找用户,然后更改权限即可。

另外用到的命令有

  1. chown
  2. chgrp
  3. chmod

这三个命令是Unix上边分别更改文件所属用户权限,所属组的权限以及文件权限。可以参考

Nginx-403-error

标签:

原文地址:http://www.cnblogs.com/liujb/p/5142796.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!