我正在尝试使用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的各种答案,但不幸的是,它们似乎都没有提供解决方案。
1条答案
按热度按时间qrjkbowd1#
在花了很长时间试图修复这个错误之后,来回了将近一年,我终于找到了这个问题。我们有一些来自接口的Ajax方法调用,出于某种原因,有人将字符集标题拆分为新的行,结果如下所示:
一旦我弄清楚了这一点,我就简单地删除了新行,并将字符集添加到内容类型头中。
我还遇到了另一个Zend返回的错误“Cannot send header;在Zend中的“header already sent”?“如果你遇到这样的事情,可能是由于一些空格或换行符和php文件的开始/结束。
How to fix "Cannot send headers; headers already sent" in Zend?