AH01071:出现错误“主脚本未知\n”apache2.4 php-fpm7.2

Dan*_*Dan 4 security configuration logging php-fpm apache-2.4

我似乎在我的 /var/log/apache2/error.log 和 /var/log/apache2/access.log 中的相应记录中得到这些行

/var/log/apache2/error.log

[Fri Sep 20 02:28:36.654357 2019] [proxy_fcgi:error] [pid 28619:tid 140003157985024] [client 49.233.5.191:37604] AH01071: Got error 'Primary script unknown\n'
[Fri Sep 20 02:28:38.136282 2019] [proxy_fcgi:error] [pid 28618:tid 140003082450688] [client 49.233.5.191:43806] AH01071: Got error 'Primary script unknown\n'
Run Code Online (Sandbox Code Playgroud)

/var/log/apache2/access.log

49.233.5.191 - - [20/Sep/2019:02:28:36 +0000] "GET /TP/html/public/index.php HTTP/1.1" 404 392 "-" "Mozilla/5.0 (Windows; U; Windows NT 6.0;en-US; rv:1.9.2) Gecko/20100115 Firefox/3.6)"
49.233.5.191 - - [20/Sep/2019:02:28:36 +0000] "GET /elrekt.php HTTP/1.1" 404 433 "-" "Mozilla/5.0 (Windows; U; Windows NT 6.0;en-US; rv:1.9.2) Gecko/20100115 Firefox/3.6)"
Run Code Online (Sandbox Code Playgroud)

这些文件显然不存在,所以这看起来像是从 ip 位置和行为进行的机器人扫描。但是,当我请求另一个不存在的文件时。我在 /var/log/apache2/error.log 文件中没有收到 'Got error 'Primary script unknown\n' 错误

php-fpm 配置

<IfModule !mod_php7.c>
<IfModule proxy_fcgi_module>
    # Enable http authorization headers
    <IfModule setenvif_module>
    SetEnvIfNoCase ^Authorization$ "(.+)" HTTP_AUTHORIZATION=$1
    </IfModule>

    <FilesMatch ".+\.ph(ar|p|tml)$">
        SetHandler "proxy:unix:/run/php/php7.2-fpm.sock|fcgi://localhost"
    </FilesMatch>
    <FilesMatch ".+\.phps$">
        # Deny access to raw php sources by default
        # To re-enable it's recommended to enable access to the files
        # only in specific virtual host or directory
        Require all denied
    </FilesMatch>
    # Deny access to files without filename (e.g. '.php')
    <FilesMatch "^\.ph(ar|p|ps|tml)$">
        Require all denied
    </FilesMatch>
</IfModule>
</IfModule>
Run Code Online (Sandbox Code Playgroud)

这是我可以做的事情吗,可能会更改配置?

我知道我可以使用 iptables 来阻止 ip,如果可能的话,我更感兴趣的是通过一些配置更改来摆脱日志条目。

小智 6

最后,我检查了两个服务:

php-fpm7.3 -t
apachectl configtest
Run Code Online (Sandbox Code Playgroud)

由于一切看起来都很好,我重新启动了它们:

systemctl restart php7.3-fpm
systemctl restart apache2
Run Code Online (Sandbox Code Playgroud)

就那么简单。
虽然我猜重启也会解决这个问题AH01071


Joh*_*ong 6

在我最近的 ubuntu 22.04 + apache 2.4 (ubuntu repo)(以 FPM/FastCGI 运行 php) + php-fpm 8.1 (ubuntu repo) 的默认/标准设置中,加载不存在的 php 文件在访问日志中有 404 和“[Mon 8 月 14 日 19:41:02.162415 2022] [proxy_fcgi:error] [pid 578412:tid 140622065954369] [client 172.18.26.14:32120] AH01071:错误日志中出现错误“主脚本未知”。

浏览器显示“未找到文件”。http 404,不是标准的 apache 错误。

google了一下,应该是php解释器处理了一个不存在的php文件引起的。

解决方案:仅将存在的php文件传递给php解释器(添加If检查)。

# /etc/apache2/conf-available/php8.1-fpm.conf
<FilesMatch ".+\.ph(ar|p|tml)$">
    <If "-f %{REQUEST_FILENAME}">
        SetHandler "proxy:unix:/run/php/php8.1-fpm.sock|fcgi://localhost"
    </If>
</FilesMatch>
Run Code Online (Sandbox Code Playgroud)

参考:/sf/ask/1918579981/