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

Apache FastCgi、PHP-FPM、Suexec权限被拒绝错误

锺离穆冉
2023-03-14

我已经对Apache2进行了设置。4 FastCgi、PHP-FPM、SuExec,无需SuExec即可正常工作。但当我启用Suexec时,它的给我文件不存在错误(当我访问php脚本时,浏览器中出现404未找到错误)。

注意:当我关闭“FastCgiWrapper”时,PHP脚本可以通过PHP-FPM工作,但当我打开它时,会出现404错误。

Apache错误日志(最后一行):

[authz_core:debug] [pid 3906:tid 140546979436288] mod_authz_core.c(802): [client 192.168.91.132:58225] AH01626: authorization result of Require all granted: granted
[authz_core:debug] [pid 3906:tid 140546979436288] mod_authz_core.c(802): [client 192.168.91.132:58225] AH01626: authorization result of <RequireAny>: granted
[authz_core:debug] [pid 3906:tid 140546979436288] mod_authz_core.c(802): [client 192.168.91.132:58225] AH01626: authorization result of Require all granted: granted
[authz_core:debug] [pid 3906:tid 140546979436288] mod_authz_core.c(802): [client 192.168.91.132:58225] AH01626: authorization result of <RequireAny>: granted
[core:info] [pid 3906:tid 140546979436288] [client 192.168.91.132:58225] AH00128: File does not exist: /etc/apache2/fcgi-app/info.php

配置:

/etc/apache2/mods可用/fastcgi。形态

FastCgiWrapper On

/etc/apache2/suexec/www-data

/var/www/html
/cgi-bin

/etc/apache2/可用站点/示例。网形态

<VirtualHost *:80>
        ServerName example.net
        ServerAdmin example@example.net
        DocumentRoot /var/www/html/example.net/public_html
        LogLevel debug
        ErrorLog ${APACHE_LOG_DIR}/error.log

    SuexecUserGroup example examplegrp
    AddHandler php-fcgi-hand .php
    Action php-fcgi-hand /php-fcgi-uri
    Alias /php-fcgi-uri fcgi-app
    FastCgiExternalServer fcgi-app -socket /var/run/php5-fpm-example.sock -pass-header Authorization -idle-timeout 30000 -flush

    <Location /php-fcgi-uri>
            Require all granted
    </Location>

</VirtualHost>

/etc/php5/fpm/pool。d例如。形态

[example]
user  = example
group = examplegrp
listen = /var/run/php5-fpm-example.sock
listen.owner = example
listen.group = examplegrp
listen.mode = 0666
pm = dynamic
pm.max_children = 5
pm.start_servers = 2
pm.min_spare_servers = 1
pm.max_spare_servers = 3

/var/www/html/example。net/cgi-bin/php。cgi

#!/bin/sh 
PHP_FCGI_CHILDREN=5
export PHP_FCGI_CHILDREN
PHP_FCGI_MAX_REQUESTS=500
export PHP_FCGI_MAX_REQUESTS
exec /var/www/html/example.net/cgi-bin

文件夹结构和权限

/var/www/html/example.net/cgi-bin/php.cgi
/var/www/html/example.net/public_html/info.php

drwxrwxrwx 13 www-data www-data var
    |____drwxr-xr-x 5 www-data www-data www
        |____drwxr-xr-x 6 www-data www-data html
            |____ drwxr-xr-x 4 example  examplegrp example.net
                |______ drwxr-xr-x 2 example examplegrp cgi-bin
                    |_____-r-xr-xr-x 1 example examplegrp php.cgi

                |______ drwxr-xr-x 2 example examplegrp public_html
                    |_____-rwxr-xr-x 1 example examplegrp info.php

共有2个答案

越飞鸾
2023-03-14

您要求Apache作为用户示例运行,但是您为用户www.-data设置了配置文件。留档表示当Apache用户为www.-data时,将读取配置文件/etc/apache2/suexec/www.-data。我从未尝试过,但可能需要设置配置文件/etc/apache2/suexec/form。我觉得有点混乱的是这两个阶段:Apache用户和目标用户,后者被允许运行目标cgi。suexec在这两个阶段运行检查。suexec的自定义版本允许不同的Apache用户使用不同的配置文件运行,但这不同于使用Apache指令选择目标用户。如果我们只想更改目标用户,即运行CGI的用户,则不需要更改Apache用户。为此,原始版本就足够了。不管怎样,这是我的理解。我希望它能帮助某人。

黎奇略
2023-03-14

我很久以前就编写了这个工作配置,它在Apache2.4上工作。所以我建议你试一试https://gist.github.com/diemuzi/3849349.它太大了,无法在这里发布答案。您将找到所需的所有配置。你甚至可以看到我所做的与你在这里发布的不同。

但是,我也建议您不要像您正在尝试的那样,使用FastCgiExternalServer,您将在我的示例中发现这一点。而是考虑使用mod\u proxy\u fcgi。这是一种更简单的连接到FPM的方法,并且它最近确实支持套接字。

以下是mod\u proxy\u fcgi方式的示例:

# PHP-FPM via Socket
<IfModule proxy_module>
    <IfModule proxy_fcgi_module>
        ProxyPassMatch ^/(.*\.php(/.*)?)$ unix:/usr/local/php/etc/php-fpm/[USERNAME].sock|fcgi://localhost/vhosts/[DOMAIN]/public/
    </IfModule>
</IfModule>

当然,您还需要更改unix:路径和root文档的路径。请注意localhost部分,这不是一个错误。你为localhost放什么并不重要,但我觉得它看起来更好。是的,我的域可以通过IP和域访问,即使它说的是localhost,所以不要让它愚弄你。

如果您想使用TCP方式使用mod\u proxy\u fcgi,您也可以这样做:

# PHP-FPM via TCP
<IfModule proxy_module>
    <IfModule proxy_fcgi_module>
        <Location ~ ^/(.*\.php(/.*)?)$>
            ProxyPass fcgi://127.0.0.1:[PORT]/vhosts/[DOMAIN]/public/
        </Location>
    </IfModule>
</IfModule>

当然要确保127.0。0.1:[端口]与FPM池中的内容匹配,因此相应地进行更改。同样,请确保您也更改了文档根目录的路径。

我给你的三个答案都是工作的例子。我甚至在发布这个答案之前测试过。

 类似资料:
  • 我试图用apache、fastcgi和fpm建立一个DebianWeb服务器,但我越来越恼火了。 一旦我停用mod_php我得到以下错误: [周四可能22 12:16:10 2014][错误][客户端xxx.xxx.xxx.xxx](13)权限拒绝:FastCGI:连接到服务器失败/usr/lib/cgi-bin/php5-fcgi:连接()失败,参考:超文本传输协议://... [Thu可能22

  • 问题内容: 我运行 npm install lodash, 但它抛出 错误:EACCES:权限被拒绝 错误。我知道这是权限问题,但据我所知,本地安装节点模块不需要sudo权限。如果我使用sudo运行它,它将安装在〜/ node_modules文件夹中。 drwxrwxr-x 是现有文件夹的文件许可权。我不知道可能出了什么问题。 下面是错误消息。 问题答案: 使用 npm init 创建 packa

  • 我运行npm install lodash,但它抛出错误:EACCES:权限被拒绝错误。我知道这是权限问题,但据我所知,在本地安装节点模块不需要sudo权限。如果我用sudo运行它,它会安装在~/node\u modules文件夹中。drwxrwxr-x是现有文件夹的文件权限。我不知道可能出了什么问题。 下面是错误消息。

  • 我有一个问题与PHP脚本在我的网络服务器(Apache/2.4.10在Raspbian),我不能生成一个新的文件。我试过chmod 777(这是非常糟糕的做法),但它仍然不起作用。我已经为此挣扎了几天,即使经过广泛的研究,我也找不到解决这个问题的方法。下面是我的代码和它产生的错误消息: 警告:fopen(newfile.txt):无法打开流:第4行 /var/www/html/handlers/w

  • 我在django admin(127.0.0.1:8000/admin)中尝试为用户添加个人资料照片时收到此错误消息 有人能帮我找出原因吗? OSError at /admin/role/role/6/[Errno 13]权限被拒绝:'/User'请求方法: POST请求URL:http://127.0.0.1:8000/admin/role/role/6/Django版本: 1.8.2异常类型:

  • 我在Ruby 2.0.0-p353和OSX Mavericks上使用Rails 4.0.2、Guard 2.2.4、Guard rspec 4.2.4、rspec Rails 2.14.0、Capybara 2.2.1和Poltergeist 1.5.0。 当我运行bundle exec Guard时,我得到了很多失败的错误消息:一个错误发生在后钩子Errno::EACCES:权限拒绝- /usr