nginx:当php文件在单独的目录中时禁止403

时间:2017-05-28 08:00:29

标签: php nginx file-permissions

我已经成功安装了使用PHP-FPM的nginx但不幸的是我在从不同目录加载我的php文件时遇到了一些麻烦。我的所有文件都位于/ var / www / html的子目录中(例如,所有css文件都位于/ var / www / html / css中,所有javascript文件都位于/ var / www / html / js,所有php -files位于/ var / www / html / php)。 据此,我将我的php文件的根目录路径更改为/ var / www / html / php:

server {
    listen 80 default_server;
    listen [::]:80 default_server;

    # SSL configuration
    #
    # listen 443 ssl default_server;
    # listen [::]:443 ssl default_server;
    #
    # Note: You should disable gzip for SSL traffic.
    # See: https://bugs.debian.org/773332
    #
    # Read up on ssl_ciphers to ensure a secure configuration.
    # See: https://bugs.debian.org/765782
    #
    # Self signed certs generated by the ssl-cert package
    # Don't use them in a production server!
    #
    # include snippets/snakeoil.conf;

    root /var/www/html;

    # Add index.php to the list if you are using PHP
    index index.html index.htm index.php home.php;

    server_name _;

    location / {
            # First attempt to serve request as file, then
            # as directory, then fall back to displaying a 404.
            try_files $uri $uri/ =404;
    }

    # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
    #
    location ~ \.php$ {
            root /var/www/html/php;

            include snippets/fastcgi-php.conf;

    #       # With php7.0-cgi alone:
    #       fastcgi_pass 127.0.0.1:9000;
            # With php7.0-fpm:
            fastcgi_pass unix:/run/php/php7.0-fpm.sock;
    }
}

不幸的是,当使用我的网络浏览器访问我的nginx服务器时,我收到错误403(禁止)。直接访问我的index.php(http://192.168.2.109/index.php)时,一切正常。所以,我认为这意味着文件权限是正确的,但nginx无法索引/ var / www / html / php目录。此外,/ var / log / nginx / error.log包括:

2017/05/28 07:49:56 [错误] 13678#13678:* 1目录索引“/ var / www / html /”被禁止,客户端:192.168.2.101,服务器:_,请求:“ GET / HTTP / 1.1“,主持人:”192.168.2.109“

我已尝试启用 autoindex 并在“location~.php $ {”部分添加 index 说明符,但未成功。结果是一样的:(

有谁知道我在做错了什么/在这里失踪了? Nginx 403 error: directory index of [folder] is forbidden中的所有建议都无法解决我的问题。

1 个答案:

答案 0 :(得分:0)

问题很简单:

  # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
    #
    location ~ \.php$ {
            root /var/www/html/php;

            include snippets/fastcgi-php.conf;

    #       # With php7.0-cgi alone:
    #       fastcgi_pass 127.0.0.1:9000;
            # With php7.0-fpm:
            fastcgi_pass unix:/run/php/php7.0-fpm.sock;
    }

我可以阅读,当您请求* .php文件时,您更改了根地址。但是,当您请求“默认索引”时,您正在请求/,而不是.php

您需要一个新位置,以便在/ request上更改根路径。试着用这个:

    location = / {
            root /var/www/html/php;

            include snippets/fastcgi-php.conf;

            fastcgi_pass unix:/run/php/php7.0-fpm.sock;
    }

也许,在这个配置中,你需要放一个“rewrite index.php;”,但我不知道,因为我从来没有测试过这个配置。

不要认为我的新位置订单(位置= /)与您的位置(位置/)相同,因为我的订单带有等号,仅在您没有任何参数请求“主”位置时才适用。