当前位置: 首页 > 知识库问答 >
问题:

nginx:403当php文件位于单独目录中时禁止

薛扬
2023-03-14

我已经成功安装了使用PHP-FPM的nginx,但不幸的是,从不同目录加载PHP文件时遇到了一些问题。我的所有文件都位于/var/www/html的子目录中(例如,所有css文件位于/var/www/html/css,所有javascript文件位于/var/www/html/js,所有php文件位于/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”

我已经尝试启用自动索引并在“location~.php${”部分添加索引说明符,但没有成功。结果相同:(

有人知道我做错了什么/错过了什么吗?Nginx 403中的所有建议错误:【文件夹】的目录索引被禁止并没有解决我的问题。

共有1个答案

童化
2023-03-14

问题很简单:

  # 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

您需要一个新位置,以便根据请求更改根路径。尝试使用以下方法:

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

            include snippets/fastcgi-php.conf;

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

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

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

 类似资料:
  • 我有3个域名,正在尝试使用Nginx将所有3个站点托管在一台服务器(数字海洋水滴)上。 谜题1。命名为mysite2。命名为mysite3。名称 其中只有一个有效。另外两个导致403个错误(以相同的方式)。 在我的nginx错误日志中,我看到:。 我的站点已启用配置为: 所有3个站点都有几乎相同的配置文件。 每个网站的文件都在 /usr/share/nginx/mysite1.name/someF

  • 问题内容: 我在CentOS 5盒子上安装了Nginx和PHP-FPM,但是我很难使它服务于我的任何文件-无论是否为PHP。 Nginx以www-data:www-data的身份运行,默认的“欢迎使用EPEL上的nginx”站点(由root:root拥有644权限)可以很好地加载。 nginx配置文件具有 /etc/nginx/sites-enabled/*.conf 的include指令 , 而

  • 在我的覆盆子,我已经建立了一个新的网站,与一些php页面。 HTML所有的工作都很好,但是php页面,它只是抛出一个“403禁止”错误。 文件和目录的权限似乎是开放的,他们可以...有什么想法,我还需要检查什么?

  • 我花了几个小时在这个问题上,尽管相关帖子很多,但我无法解决它。我有一个Fedora 20盒与Nginx PHP-FPM,直到今天工作得很好(在我重新加载php-fpm.service我猜)。Nginx提供的静态文件没有问题,但是任何PHP文件都会触发错误403。 权限正常,nginx和php fpm在用户“nginx”下运行: 服务的文件也被设置为nginx用户,我甚至结束了chmoding 77

  • 问题内容: 关于此问题还有其他一些问题: boto.exception.S3ResponseError:S3ResponseError:403禁止 S3ResponseError:S3ResponseError:403禁止 S3ResponseError:403禁止使用Boto Python:Amazon S3无法达到目标:说“ 403 Forbidden” 但是,似乎我可能遇到了其他问题(例如,

  • 我将docker compose与以下: nginx conf是: 它工作得很好,如果我创建。但是,如果我想访问,我有一个403错误,并在docker-comple中使用以下日志: 我试过其他Q中的建议