nginx本地Web服务器的所有权和权限

时间:2016-04-21 06:22:19

标签: php nginx permissions

我在设置本地nginx环境时遇到问题。我一直在网上阅读无数的教程,一切似乎都让我的大脑混乱了。

操作系统:OSX 10.11.4 El Capitan Nginx:1.8.1 PHP-FPM:5.5.31

我的网络根文件目录现在如下:

/webserver
/webverver/phpinfo.php
/webserver/example
/webserver/example/index.php

我可以访问默认"欢迎使用Nginx"页面使用curl或在访问localhost的Web浏览器中。如果我然后浏览我得到文件的索引,但PHP文件将尝试下载而不是执行。如果我尝试访问我在local.example.com创建的示例站点(我已将其添加到我的hosts文件中),那么我将使用curl获得403 Forbidden标题返回,以及一个简单的“拒绝访问”和#39 ;使用网络浏览器。

我不太了解文件权限和目录所有权,有人可以建议我应该如何配置所有内容吗?我被建议运行以下命令,但它至今没有改变:

sudo chmod -R 755 /Users/nickcorin/webserver

我的错误日志中除了'信号已启动之外,还没有任何日志。日志。

此处我的配置是:

nginx.conf

#user nobody;
worker_processes  1;

error_log  logs/error.log;
error_log  logs/error.log  notice;
error_log  logs/error.log  info;

#pid        logs/nginx.pid;


events {
    worker_connections  1024;
}


http {
    include       mime.types;
    default_type  application/octet-stream;

    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    access_log  logs/access.log  main;

    sendfile        on;
    tcp_nopush     on;

    keepalive_timeout  65;

    #gzip  on;

    server {
        listen       80;
        server_name  localhost;

        location / {
            root   /Users/nickcorin/webserver;
        autoindex on;
        }

        # redirect server error pages to the static page /50x.html
        #
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }

    include servers/*;
}

servers/example

upstream php {
    server 127.0.0.1:9000;
}

server {
    listen 80;

    root /Users/nickcorin/webserver/example;
    server_name local.example.com;

    index index.php index.html index.htm;
    autoindex on;

     location ~ \.php$ {
            try_files  $uri  $uri/  /index.php?$args ;
            index  index.html index.htm index.php;
            fastcgi_param PATH_INFO $fastcgi_path_info;
            fastcgi_param PATH_TRANSLATED $document_root$fastcgi_path_info;
            fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;

            fastcgi_pass 127.0.0.1:9000;
            fastcgi_index index.php;
            fastcgi_split_path_info ^(.+\.php)(/.+)$;
            fastcgi_intercept_errors on;
            include fastcgi_params;
        }
}

**编辑 - NGINX文件夹权限&流程所有者**

我在我的日志文件夹ls -la上运行了/usr/local/var/nginx,结果就是这样:

drwxr-xr-x  4 nickcorin  admin   136 Apr 20 23:53 .
drwxr-xr-x  5 nickcorin  admin   170 Apr 20 21:47 ..
-rw-r--r--  1 root       admin  4718 Apr 21 08:06 access.log
-rw-r--r--  1 nickcorin  admin   480 Apr 21 10:28 error.log

这是我的网络服务器根目录的结果:

drwxr-xr-x   4 nickcorin  staff   136 Apr 22 12:23 .
drwx-----x+ 54 nickcorin  staff  1836 Apr 22 10:01 ..
drwxr-xr-x   3 nickcorin  staff   102 Apr 20 22:14 example
-rw-r--r--@  1 nickcorin  staff    23 Apr 19 11:58 info.php

这是ps aux | grep nginx

的结果
root              756   0.0  0.0  2466616    480   ??  Ss   12:24PM   0:00.00 nginx: master process nginx
nickcorin         759   0.0  0.0  2445080    820 s000  S+   12:24PM   0:00.00 grep nginx
nobody            757   0.0  0.0  2475832   1044   ??  S    12:24PM   0:00.00 nginx: worker process

**编辑#2 - 虚拟主机配置文件**

我设法解决了我的问题,现在似乎工作顺利。我必须编辑我的虚拟主机配置文件:

server {
    listen 80;
    listen [::]:80 ipv6only=on;

    server_name local.example.com;

    root /Users/nickcorin/webserver/example;
    index index.php index.html index.htm;

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

我还用以下两行修正了我的权限:

sudo chown -R nickcorin /Users/nickcorin/webserver (Web Server Root)
sudo chmod 755 /Users/nickcorin/webserver/example (Virtual Host Root)

感谢所有帮助我解决这个问题的人:)

2 个答案:

答案 0 :(得分:3)

案例清单:

  1. 确保由Web服务器而非应用程序脚本导致403 Forbidden。例如,make index.php看起来像
  2. echo 'hi there';
    

    如果错误仍然存​​在,那么我们可能是配置错误的Web服务器。

    1. 找出由Web服务器生成的权限被拒绝错误的原因。您可以暂时将此指令添加到您的服务器/示例配置(可能就在server_name之后):
    2. error_log /var/log/nginx/example.error.log warn
      

      甚至是

      error_log /var/log/nginx/example.error.log notice
      

      但是根据你的nginx.conf你已经完成了,所以检查日志文件以找到有关权限相关问题的信息。

      通常你应该找到问题的具体描述 - 文件无效权限,套接字无效权限或上游问题。

      1. 修正错误。这通常取决于我们在上一步中发现的内容。
      2. 一个。 Web服务器上托管的文件的权限错误。

        1)谁是谁 - 确定网站服务器用户(默认为nginx)以及网站目录的所有者和组(/ Users / nickcorin / webserver / example)。对于nginx用户(Users,nickcorin和webserver),每个父目录(本身)应该(至少)是可执行的(--x)。

        2)虽然example目录及其所有内容也应该是可读的(r-x)。为此,您可以使用以下命令:

        # cd example
        # find . -type d | xargs chmod 755
        # find . -type f | xargs chmod 644
        

        (这样做不会使文件可执行为sudo chmod -R 755 / Users / nickcorin / webserver)

        湾上游故障排除。检查上游php {server 127.0.0.1:9000;防火墙(如果有)是否正常。 }

        <强>注1 即可。 &#34;欢迎来到Nginx&#34; html文档通常存储在/ usr / share /中,需要授权。

        <强>注2 即可。最好在您的系统中使用某个位置,您可以为您的环境手动创建和设置所有必需的访问权限,而不是使用具有700权限的用户目录(并导致一些额外的步骤来设置相关权限)内容)。

        <强>注3 即可。请记住,当目录中没有索引文件时,403 Forbidden也会被响应。

答案 1 :(得分:1)

我遇到的问题是我的虚拟主机的配置文件和我的webserver root的权限。对于遇到类似问题的其他人来说,这些是我当前的工作配置设置:

nginx.conf

user yourusername staff;
worker_processes  1;

error_log  logs/error.log;
error_log   logs/error.log warn;
error_log  logs/error.log  notice;
error_log  logs/error.log  info;

#pid        logs/nginx.pid;


events {
    worker_connections  1024;
}


http {
    include       mime.types;
    default_type  application/octet-stream;

    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    access_log  logs/access.log  main;

    sendfile        on;
    tcp_nopush     on;

    keepalive_timeout  65;

    #gzip  on;

    server {
        listen       80;
        server_name  localhost;

        location / {
            root   /Users/yourusername/webserver;
            autoindex on;
        }

        # redirect server error pages to the static page /50x.html
        #
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }

    include servers/*;
}

servers/example

server {
    listen 80;
    listen [::]:80 ipv6only=on;

    server_name local.example.com;

    root /Users/yourusername/webserver/example;
    index index.php index.html index.htm;

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

一旦设置正确,我就会运行这些命令来修复网络服务器中的权限错误:

sudo chown -R yourusername /Users/yourusername/webserver
sudo chmod 755 /Users/yourusername/webserver/example

不要忘记将127.0.0.1 local.example.com添加到您的主机文件中。