AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 888114
Accepted
Esa Jokinen
Esa Jokinen
Asked: 2017-12-15 04:23:38 +0800 CST2017-12-15 04:23:38 +0800 CST 2017-12-15 04:23:38 +0800 CST

Apache 2.4 / php5.6-fpm / proxy_fcgi 上缺少 PATH_INFO

  • 772

我正在使用带有 PHP-FPM7.0.26-2和5.6.32-1来自存储库 deb.sury.org 的 Debian 9。相同的配置在带有 PHP-FPM 的 Debian 8 服务器上运行良好5.6.30

  • 我已经pool.d/user.conf从该服务器复制了。
  • 这两个php.ini文件都有cgi.fix_pathinfo=1.
  • 该参数也被强制使用php_admin_value[cgi.fix_pathinfo] = 1。
  • <VirtualHost>两台服务器从上下文中类似地使用此池:

    ProxyPassMatch ^/(.*\.php(/.*)?)$ unix:/run/php/user.sock|fcgi://localhost/home/user/public_html
    

现在,有一个 AJAX 页面需要从PATH_INFO(可能PATH_TRANSLATED)读取路径。然而,虽然这些变量在 Debian 8 服务器上具有正确的内容:

["SCRIPT_NAME"]=>
string(14) "/path/ajax.php"
["ORIG_SCRIPT_NAME"]=>
string(25) "/path/ajax.php/para/meters"
["PATH_INFO"]=>
string(12) "/para/meters"
["PATH_TRANSLATED"]=>
string(34) "/home/user/public_html/para/meters"

它们在新的 Debian 9 + dub.sury.org 上的工作方式似乎有所不同:

["SCRIPT_NAME"]=>
string(25) "/path/ajax.php/para/meters"
["PATH_TRANSLATED"]=>
string(22) "/home/user/public_html"

和参数ORIG_SCRIPT_NAME完全PATH_INFO丢失。

apache-2.4
  • 2 2 个回答
  • 2682 Views

2 个回答

  • Voted
  1. Best Answer
    Esa Jokinen
    2017-12-15T05:01:45+08:002017-12-15T05:01:45+08:00

    这是我使用 proxy_fcgi 的方式。如示例中所述mod_proxy_fcgi:

    您还可以通过创建合适的处理程序传递来强制将请求作为反向代理请求进行处理。- - 这种形式的好处是它允许URI到文件名的正常映射发生在服务器中,并将本地文件系统结果传递给后端。以这种方式配置 FastCGI 时,服务器可以计算出最准确的PATH_INFO.

    所以我换了我的

    ProxyPassMatch ^/(.*\.php(/.*)?)$ unix:/run/php/user.sock|fcgi://localhost/home/user/...
    

    带有处理程序和工作人员:

        <FilesMatch "\.php$">
                SetHandler  "proxy:unix:/run/php/user.sock|fcgi://localhost"
        </FilesMatch>
        <Proxy "fcgi://localhost/" enablereuse=on max=10>
        </Proxy>
    

    现在所有的 AJAX 请求都工作正常。

    奖励:如果有人知道为什么ProxyPassMatch能够PATH_INFO在我的 Debian 8 / Apache 2.4.10 / PHP-FPM 5.6.30 上计算之前的值,但不能在 Debian 9 上计算,那就太棒了。

    • 2
  2. klor
    2018-10-14T11:09:25+08:002018-10-14T11:09:25+08:00

    正如它所描述的:

    https://httpd.apache.org/docs/2.4/mod/mod_proxy_fcgi.html#env

    ProxyPassMatch 未设置 PATH_INFO 的原因如下:

    环境变量

    除了控制 mod_proxy 行为的配置指令外,还有许多控制 FCGI 协议提供程序的环境变量:

    • proxy-fcgi-pathinfo:当通过 ProxyPass 或 ProxyPassMatch 配置时,mod_proxy_fcgi 不会设置 PATH_INFO 环境变量。这允许后端 FCGI 服务器正确确定 SCRIPT_NAME 和 Script-URI 并符合 RFC 3875 第 3.3 节。如果您需要 mod_proxy_fcgi 为 PATH_INFO 生成“最佳猜测”,请设置此 env-var。这是一些 FCGI 实现中的错误的解决方法。该变量可以设置为多个值,以调整最佳猜测的选择方式(仅在 2.4.11 及更高版本中):

      • first-dot:PATH_INFO 是从第一个“.”后面的斜杠中分割出来的。在网址中。

      • last-dot:PATH_INFO 是从最后一个“.”后面的斜杠中分割出来的。在网址中。

      • full : PATH_INFO 是通过尝试将 URL 映射到本地文件系统来计算的。

      • unescape : PATH_INFO 是 URL 的路径组件,未转义/解码。

      • 任何其他值:PATH_INFO 与 URL 的路径部分相同。最初,这是唯一的 proxy-fcgi-pathinfo 选项。

    • 2

相关问题

  • Apache2 - SSL 不工作

  • Apache <VirtualHost> 标签,如果客户端的 IP = x 则不重定向... 怎么做?

  • 我无法启用我的网站?[关闭]

  • SELinux 阻止 Apache 写入文件

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve