访问脚本' /path/to/script.php'已被拒绝(请参阅security.limit_extensions)

时间:2016-08-23 14:36:53

标签: php macos nginx homebrew

在让我列出我尝试过的内容之前:

  • This Answer on ServerFault
  • chmoded / Users / user / portal3 to 777以查看是否执行
  • 创建了两个使用root的池,另一个使用当前用户
  • googled
  • 在freenode
  • 中输入了## php
  • 以及很多其他想法。

我在我的主目录中的子目录上执行php代码时遇到问题。 在Nginx上我得到了这个

2016/08/23 09:13:40 [error] 39170#0: *13 FastCGI sent in stderr: "Access to the script 
'/Users/user/portal3' has been denied (see security.limit_extensions)" while reading
response header from upstream, client: 127.0.0.1, server: localhost, request:
"GET /portal/v3/index.php HTTP/1.1", upstream: "fastcgi://127.0.0.1:9001", host: "localhost"

在php-fpm上显示

[23-Aug-2016 09:13:40] WARNING: [pool dev] child 8305 said into stderr: "NOTICE: Access to the script '/Users/user/portal3' has been denied (see security.limit_extensions)"

我已经尝试了一切,但我没有在Mac上使用Nginx / PHP-FPM运行php取得任何成功

Ngnix和PHP-FPM以root身份运行

PHP-FPM配置了两个池:

  • [www]:以root身份运行并正常运行,执行php代码,但其www-root子目录位于/ var / www
  • [dev]在MacOS X上作为我当前用户运行的池,侦听端口9001,并配置为在/ Users / user / portal3中运行代码。

PHP-fpm.ini

[dev]
user=user
group=staff
listen=127.0.0.1:9001
listen.mode = 0666
pm = ondemand
pm.max_children = 10
pm.process_idle_timeout = 10s
pm.status_path = /status_user
catch_workers_output = yes
security.limit_extensions = .php

默认(在网站上可用)Nginx

server {
    listen       80;
    server_name  localhost;
    ###root /var/www/;
    access_log   /usr/local/etc/nginx/logs/default.access.log  main;
    access_log   /usr/local/etc/nginx/logs/default.scripts.log  scripts;

    location /portal/v3 {
        alias /Users/user/portal3;
        location ~  ^/portal/v3/(.+\.php)(/.*)$ {
            #alias /Users/user/portal3;
            index index.php;

            # Mitigate https://httpoxy.org/ vulnerabilities
            fastcgi_param HTTP_PROXY "";

            fastcgi_pass   127.0.0.1:9001;
            fastcgi_index  index.php;
            fastcgi_param  SCRIPT_FILENAME $document_root$2;#$fastcgi_script_name;
            include fastcgi_params;
        }

    }

    location = /info {
        allow   127.0.0.1;
        deny    all;
        rewrite (.*) /.info.php;
    }

    location / {
        root /var/www/;
        index        index.php index.html index.htm;
        include   /usr/local/etc/nginx/conf.d/php-fpm;
    }

    error_page  404     /404.html;
    error_page  403     /403.html;
}

我已经使用自制软件安装了一切。现在我的想法已经不多了,我来这里是为了得到一些帮助。

3 个答案:

答案 0 :(得分:0)

在您的PHP-FPM config中,您有一个名为security.limit_extensions

的指令
  

限制FPM允许解析的主脚本的扩展名。这可以防止Web服务器端的配置错误。您应该只限制FPM到.php扩展名,以防止恶意用户使用其他扩展来执行PHP代码。默认值:.php。

在您的情况下,因为您的location块不包含index指令,所以当路径指向{时,nginx不知道使用index.php作为默认索引文件{1}}。相反,它尝试将其作为PHP脚本执行,并且PHP-FPM引发了/Users/user/portal3没有.php扩展名的安全限制。

您的位置区块看起来应该更像......

/Users/user/portal3

答案 1 :(得分:0)

我今天早些时候也遇到了这个问题。我只是将文件扩展名从.phtml重命名为.php即可立即修复。

稍后,我在php配置文件(如/etc/php/fpm/php-fpm.conf之类的文件)中更改了“ security.limit_extensions”设置,以允许.phtml(请参见下面的行)

security.limit_extensions = .php .phtml

此行也可能带有#注释,如果这样的话,只需删除#即可取消注释该行

答案 2 :(得分:0)

只需要添加FastCGI参数PATH_INFO和PATH_TRANSLATED。

0

希望这也能帮助任何需要它的人。