nginx proxy_fcgi:错误来自脚本的错误头

ohtdti5x  于 2023-10-17  发布在  Nginx
关注(0)|答案(1)|浏览(178)

我正在尝试使用Docker为我公司的开发团队“重建”一个基础设施。我大约在一年前完成了这个工作,现在我正在进行重构和重写,以更好地匹配我们的生产环境。我已经成功地将大多数Apache指令翻译成了nginx。因此,我们在开发环境中使用nginx作为代理和Web服务器。然而,在我们的生产设置中,我们使用Apache作为Web服务器,使用nginx作为反向代理。这就是我目前努力使设置对齐的原因。
我正在构建一个新项目,并将apache,php-fpm和nginx分离到不同的容器中。这就是问题所在。Apache + FCGI配置不断生成下面列出的错误:
这应该是响应体,但由于某种原因,它显示为响应头

[proxy_fcgi:error] malformed header from script 'index.php': Bad header: {"success":true,"token":"1F535, referer: http://localhost/
[proxy_fcgi:error] AH01070: Error parsing script headers, referer: http://localhost/
[proxy_fcgi:error] (22)Invalid argument: [client 172.19.0.1:42216] AH01075: Error dispatching request to : , referer: http://localhost/

这是我当前的Apache设置

ServerName localhost

LoadModule deflate_module /usr/local/apache2/modules/mod_deflate.so
LoadModule proxy_module /usr/local/apache2/modules/mod_proxy.so
LoadModule proxy_fcgi_module /usr/local/apache2/modules/mod_proxy_fcgi.so
<VirtualHost *:80>
    <IfModule proxy_module>
      ProxyPassMatch ^/(.*\.php(/.*)?)$ fcgi://php:9000/var/www/html/company/public/$1
    </IfModule>

    <IfModule mod_deflate.c>
      SetOutputFilter DEFLATE
    </IfModule>

    DocumentRoot /var/www/html/company/public
    <Directory /var/www/html/company/public>
        DirectoryIndex index.php
        Options Indexes FollowSymLinks
        AllowOverride All
        Require all granted
    </Directory>

    # Send apache logs to stdout and stderr
    CustomLog /proc/self/fd/1 common
    ErrorLog /proc/self/fd/2
</VirtualHost>

版本

APACHE_VERSION=2.4.57-alpine
PHP_VERSION=7.4.33-fpm-alpine3.16
NGINX_VERSION=1.25.1-alpine3.17

PHP应用程序非常旧,我们使用的是ZendFramework v1
我试图修改ProxyRules,但这种方法被证明是无效的。当我将合并PHP和Apache组合在同一个容器中时,设置功能正常,因为它绕过了对fastcgi层的需要。我研究了Apache文档和关于Stack Overflow的各种答案,但不幸的是,它们似乎都没有提供解决方案。

qrjkbowd

qrjkbowd1#

在花了很长时间试图修复这个错误之后,来回了将近一年,我终于找到了这个问题。我们有一些来自接口的Ajax方法调用,出于某种原因,有人将字符集标题拆分为新的行,结果如下所示:

header('Content-Type: application/json;');
header('charset=ISO-8859-1');

一旦我弄清楚了这一点,我就简单地删除了新行,并将字符集添加到内容类型头中。

header('Content-Type: application/json; charset=ISO-8859-1');

我还遇到了另一个Zend返回的错误“Cannot send header;在Zend中的“header already sent”?“如果你遇到这样的事情,可能是由于一些空格或换行符和php文件的开始/结束。
How to fix "Cannot send headers; headers already sent" in Zend?

相关问题