如何在apache FCGI中仅为选定的url设置flushpackets=on

How to set flushpackets=on in apache FCGI only for selected url

提问人:user2531657 提问时间:10/2/2023 最后编辑:Lakpriya Senevirathnauser2531657 更新时间:10/6/2023 访问量:117

问:

我正在尝试将我的 Apache Web 服务器配置为使用 php-fpm FCGI 后端,但我希望此设置仅适用于特定 URL。flushpackets=on

我目前的php-fpm配置是:

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

    <FilesMatch \.(php|phar)$>
        SetHandler "proxy:unix:/run/php-fpm/www.sock|fcgi://localhost"
    </FilesMatch>
    <Proxy "fcgi://localhost" enablereuse=on flushpackets=on max=10>
       ProxySet timeout=100
    </Proxy>
  </IfModule>
</IfModule>

这会为所有请求设置 flushpackets,但我希望它只为特定 url 启用,例如/endpoint_1/

php apache 代理 httpd.conf

评论


答:

1赞 neopheus 10/3/2023 #1

若要仅应用于特定 URL,请使用flushpackets=on<Location>

喜欢这个:

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

    <FilesMatch \.(php|phar)$>
        SetHandler "proxy:unix:/run/php-fpm/www.sock|fcgi://localhost/general"
    </FilesMatch>

    <Proxy "fcgi://localhost/endpoint_1">
        ProxySet enablereuse=on
        ProxySet flushpackets=on
        ProxySet max=10
        ProxySet timeout=100
    </Proxy>

    <Proxy "fcgi://localhost/general">
        ProxySet enablereuse=on
        ProxySet flushpackets=off
        ProxySet max=10
        ProxySet timeout=100
    </Proxy>

    <Location /endpoint_1/>
        ProxyPass "fcgi://localhost/endpoint_1"
        ProxyPassReverse "fcgi://localhost/endpoint_1"
    </Location>

    <Location />
        ProxyPass "fcgi://localhost/general"
        ProxyPassReverse "fcgi://localhost/general"
    </Location>

  </IfModule>
</IfModule>

评论

0赞 user2531657 10/3/2023
这是我最初的想法,但它不起作用。Apache/2.4.37 失败并显示错误:<Location> 上下文中不允许代理。
0赞 neopheus 10/3/2023
我更新代码
0赞 user2531657 10/4/2023
不确定我是否理解您关于有两个 <Proxy> 指令的想法,以及这将如何应用于 FilesMatch 中的 SetHandler
0赞 neopheus 10/4/2023
<Proxy> 指令:这些指令定义了两个不同 FastCGI 代理的设置: fcgi://localhost/endpoint_1:此代理具有 flushpackets=on,这意味着它将在每个数据包后刷新输出缓冲区。这对于流式处理响应非常有用。fcgi://localhost/general:此代理具有 flushpackets=off,这意味着它将缓冲输出并一次性发送所有输出。
0赞 neopheus 10/4/2023
是的,在 FilesMatch 中将 fcgi://localhost 替换为 fcgi://localhost/general