【问题标题】:How to make Apache check if PHP file exists before passing it to PHP-FPM?如何让 Apache 在将 PHP 文件传递​​给 PHP-FPM 之前检查它是否存在?
【发布时间】:2021-02-09 19:50:20
【问题描述】:

我收到以下错误“未指定输入文件”。而不是在我请求不存在的 PHP 文件时找不到文件。

那么是否可以让 Apache 在将 PHP 文件传递​​给 PHP-FPM 服务器之前检查它是否存在,以避免“未指定输入文件”。错误?还是那个错误是正常/无害的?

这是配置 Apache 来处理 PHP 文件的方式:

<FilesMatch \.php$>
SetHandler "proxy:unix:/var/run/php5-fpm.sock.example|fcgi://localhost"
</FilesMatch>

【问题讨论】:

    标签: apache php


    【解决方案1】:

    我不喜欢使用 RewriteEngine 来完成该任务。这是使用 SetHandler 指令的正确配置,同时检查 PHP 文件是否实际存在:

    <FilesMatch "\.(php|php[57]|phtml)$">
        <If "-f %{REQUEST_FILENAME}">
                SetHandler "proxy:fcgi://127.0.0.1:9000"
        </If>
    </FilesMatch>
    

    来源:PHP-FPM

    【讨论】:

    • 您的示例缺少该文章中的 &lt;Proxy&gt; 指令。另外,他提到的安全问题有什么顾虑吗?
    【解决方案2】:

    这是一个 mod_rewrite(虚拟主机上下文)替代方案,仅在文件存在时设置处理程序。

    RewriteEngine ON
    RewriteCond %{DOCUMENT_ROOT}/%{REQUEST_URI} -f
    RewriteRule \.php$ - [H=proxy:unix:/var/run/php5-fpm.sock|fcgi://localhost/]
    

    但它不适用于 PATH_INFO,因为它会检查文档根目录下的文件+路径信息

    【讨论】:

    • 能否请您扩展一下 PATH_INFO 评论?
    • IIUC,在 中使用 SetHandler 进行配置的一个优点是 Apache 会为您正确计算 path_info 并将其传递给 PHP-FPM。 PATH_INFO 是跟在你的脚本名称后面的非查询字符串——比如 /foo.php/bar/baz 或 /foo/bar/baz 当 /foo 映射到 /foo.php 时。
    • @covener 这很容易解决。看我的回答。
    【解决方案3】:

    默认情况下,对 PHP 脚本的所有请求(即使文件系统上不存在该脚本)都将在 proxy_fcgi 处理程序中传递。解决此问题的一种方法(需要 Apache >= 2.4.10)是将以下内容放入您的 Apache2 vhost 文件中:

    # define worker
    <Proxy "unix:/var/run/php5-fpm-domain.tld.sock|fcgi://domain.tld" retry=0>
        ProxySet connectiontimeout=5 timeout=30
    </Proxy>
    
    RewriteEngine On
    RewriteOptions Inherit
    
    <FilesMatch \.ph(p[3457]?|t|tml)$>
        RewriteCond %{REQUEST_FILENAME} -f
        RewriteRule .* - [H=proxy:fcgi://domain.tld,NC]
    </FilesMatch>
    

    在这里,我们仅在文件存在时设置 proxy_fcgi 处理程序。 PATH_INFO 也得到了正确处理。请注意,我们必须继承重写规则(存储在 .htaccess 文件中的重写规则的情况)。

    【讨论】:

      猜你喜欢
      • 2022-10-14
      • 2020-11-16
      • 2017-09-15
      • 2023-01-02
      • 1970-01-01
      • 2013-12-25
      • 2020-02-09
      • 2015-04-21
      • 1970-01-01
      相关资源
      最近更新 更多