Cloud Foundry PHP 网站实例因自定义 MIME 配置而崩溃
Cloud Foundry PHP website instance crashes with custom mime configuration
我正在尝试在 Cloud Foundry 上部署带有 html 扩展名的基本 php 页面,更准确地说是在 Swisscom Application Cloud 上。
这是我唯一的源文件,位于 ${APP_ROOT}/www/index.html
<html>
<?php
phpinfo();
?>
</html>
我的配置文件如下
在.bp-config/options.json
:
{
"WEBDIR": "www",
"PHP_VERSION": "{PHP_56_LATEST}",
"WEB_SERVER": "httpd"
}
在.bp-config/httpd/httpd.conf
:
ServerRoot "${HOME}/httpd"
Listen ${PORT}
ServerAdmin "${HTTPD_SERVER_ADMIN}"
ServerName sample-app.scapp.io
DocumentRoot "${HOME}/#{WEBDIR}"
Include conf/extra/httpd-modules.conf
Include conf/extra/httpd-mime.conf
我从 Swisscom App Cloud 的设置中获取的服务器名称:
在.bp-config/httpd/extra/httpd-modules.conf
:
LoadModule mpm_event_module modules/mod_mpm_event.so
根据错误日志,这似乎是必需的,如果没有包含的话。
在.bp-config/httpd/extra/httpd-mime.conf
:
<IfModule mime_module>
AddType application/x-httpd-php .php .htm .html
</IfModule>
为了方便起见,可以在 this GitHub repo 访问上面的源代码。
实例无法启动,但我找不到任何描述性的错误消息。这些是来自 Swisscom Application Cloud 的日志:
2017-05-19 12:56:26 [API/1] OUT Created app with guid 383e1568-29e9-4ef5-9825-3e1248a85b8e
2017-05-19 12:56:28 [API/3] OUT Updated app with guid 383e1568-29e9-4ef5-9825-3e1248a85b8e ({"route"=>"025e8337-7fd2-42c8-a325-d535af3db460", :verb=>"add", :relation=>"routes", :related_guid=>"025e8337-7fd2-42c8-a325-d535af3db460"})
2017-05-19 12:56:38 [API/1] OUT Updated app with guid 383e1568-29e9-4ef5-9825-3e1248a85b8e ({"state"=>"STARTED"})
2017-05-19 12:56:38 [STG/0] OUT Downloading dotnet_core_buildpack...
2017-05-19 12:56:38 [STG/0] OUT Downloading nodejs_buildpack...
2017-05-19 12:56:38 [STG/0] OUT Downloading python_buildpack...
2017-05-19 12:56:38 [STG/0] OUT Downloading binary_buildpack...
2017-05-19 12:56:38 [STG/0] OUT Downloading go_buildpack...
2017-05-19 12:56:39 [STG/0] OUT Downloaded nodejs_buildpack
2017-05-19 12:56:39 [STG/0] OUT Downloading php_buildpack...
2017-05-19 12:56:39 [STG/0] OUT Downloaded dotnet_core_buildpack
2017-05-19 12:56:39 [STG/0] OUT Downloading java_buildpack...
2017-05-19 12:56:39 [STG/0] OUT Downloaded binary_buildpack
2017-05-19 12:56:39 [STG/0] OUT Downloading staticfile_buildpack...
2017-05-19 12:56:39 [STG/0] OUT Downloaded python_buildpack
2017-05-19 12:56:39 [STG/0] OUT Downloading ruby_buildpack...
2017-05-19 12:56:39 [STG/0] OUT Downloaded go_buildpack
2017-05-19 12:56:39 [STG/0] OUT Downloaded java_buildpack
2017-05-19 12:56:39 [STG/0] OUT Downloaded php_buildpack
2017-05-19 12:56:39 [STG/0] OUT Downloaded staticfile_buildpack
2017-05-19 12:56:39 [STG/0] OUT Downloaded ruby_buildpack
2017-05-19 12:56:39 [STG/0] OUT Creating container
2017-05-19 12:56:39 [STG/0] OUT Successfully created container
2017-05-19 12:56:39 [STG/0] OUT Downloading app package...
2017-05-19 12:56:39 [STG/0] OUT Downloaded app package (1.5K)
2017-05-19 12:56:39 [STG/0] OUT Staging...
2017-05-19 12:56:41 [STG/0] OUT -------> Buildpack version 4.3.31
2017-05-19 12:56:41 [STG/0] OUT Installing HTTPD
2017-05-19 12:56:41 [STG/0] OUT HTTPD 2.4.25
2017-05-19 12:56:42 [STG/0] OUT Downloaded [file:///tmp/buildpacks/d16e91f150d8c31f69507a615bf75f08/dependencies/https___buildpacks.cloudfoundry.org_dependencies_httpd_httpd-2.4.25-linux-x64-bf8851c4.tgz] to [/tmp]
2017-05-19 12:56:42 [STG/0] OUT Installing PHP
2017-05-19 12:56:42 [STG/0] OUT PHP 5.6.30
2017-05-19 12:56:42 [STG/0] OUT Downloaded [file:///tmp/buildpacks/d16e91f150d8c31f69507a615bf75f08/dependencies/https___buildpacks.cloudfoundry.org_dependencies_php_php-5.6.30-linux-x64-13625eaa.tgz] to [/tmp]
2017-05-19 12:56:44 [STG/0] OUT Finished: [2017-05-19 10:56:44.679464]
2017-05-19 12:56:53 [STG/0] OUT Exit status 0
2017-05-19 12:56:53 [STG/0] OUT Staging complete
2017-05-19 12:56:53 [STG/0] OUT Uploading droplet, build artifacts cache...
2017-05-19 12:56:53 [STG/0] OUT Uploading droplet...
2017-05-19 12:56:53 [STG/0] OUT Uploading build artifacts cache...
2017-05-19 12:56:53 [STG/0] OUT Uploaded build artifacts cache (198B)
2017-05-19 12:57:01 [STG/0] OUT Uploaded droplet (55.3M)
2017-05-19 12:57:01 [STG/0] OUT Uploading complete
2017-05-19 12:57:01 [STG/0] OUT Destroying container
2017-05-19 12:57:02 [CELL/0] OUT Creating container
2017-05-19 12:57:02 [CELL/0] OUT Successfully created container
2017-05-19 12:57:04 [STG/0] OUT Successfully destroyed container
2017-05-19 12:57:06 [CELL/0] OUT Starting health monitoring of container
2017-05-19 12:57:07 [APP/PROC/WEB/0] OUT 10:57:07 php-fpm | [19-May-2017 10:57:07] NOTICE: fpm is running, pid 40
2017-05-19 12:57:07 [APP/PROC/WEB/0] OUT 10:57:07 php-fpm | [19-May-2017 10:57:07] NOTICE: ready to handle connections
2017-05-19 12:57:07 [APP/PROC/WEB/0] OUT Exit status 1
2017-05-19 12:57:07 [CELL/0] OUT Exit status 0
2017-05-19 12:57:07 [CELL/0] OUT Destroying container
2017-05-19 12:57:07 [API/3] OUT Process has crashed with type: "web"
2017-05-19 12:57:07 [API/3] OUT App instance exited with guid 383e1568-29e9-4ef5-9825-3e1248a85b8e payload: {"instance"=>"", "index"=>0, "reason"=>"CRASHED", "exit_description"=>"2 error(s) occurred:\n\n* 2 error(s) occurred:\n\n* Exited with status 1\n* cancelled\n* cancelled", "crash_count"=>1, "crash_timestamp"=>1495191427514377386, "version"=>"ede7276b-e0a6-467c-a86a-5c60f1c36021"}
我想肯定还有其他日志包含有关崩溃的更多信息,但我不知道在哪里可以找到它们。
是什么导致了崩溃,我该如何解决?
我不确定您的应用失败的原因。我的猜测是 HTTPD 不喜欢配置并且它正在退出。日志中没有 HTTPD 的输出,您应该会看到它正在启动,就像这样。
例如:
2017-05-20T08:26:18.76-0400 [APP/PROC/WEB/0] OUT 12:26:18 httpd | [Sat May 20 12:26:18.741822 2017] [mpm_event:notice] [pid 103:tid 140440543442816] AH00489: Apache/2.4.25 (Unix) configured -- resuming normal operations
2017-05-20T08:26:18.77-0400 [APP/PROC/WEB/0] OUT 12:26:18 httpd | [Sat May 20 12:26:18.741947 2017] [mpm_event:info] [pid 103:tid 140440543442816] AH00490: Server built: Dec 20 2016 22:27:46
2017-05-20T08:26:18.77-0400 [APP/PROC/WEB/0] OUT 12:26:18 httpd | [Sat May 20 12:26:18.741961 2017] [core:notice] [pid 103:tid 140440543442816] AH00094: Command line: '/app/httpd/bin/httpd -f /home/vcap/app/httpd/conf/httpd.conf -D FOREGROUND'
如果您想让 PHP-FPM 处理您的 HTML 文件,您需要进行一些更改。
1.) 在 .bp-config/httpd/extra/httpd-php.conf
中,您需要修改或附加 <Directory "${HOME}/#{WEBDIR}">
块,以便它将 .html
文件发送到 PHP-FPM。如果您不这样做,HTTPD 将提供它们或 return 404。
Ex:发送 .php
和 .html
<Directory "${HOME}/#{WEBDIR}">
<Files *.php>
<If "-f %{REQUEST_FILENAME}"> # make sure the file exists so that if not, Apache will show its 404 page and not FPM
SetHandler proxy:fcgi://#{PHP_FPM_LISTEN}
</If>
</Files>
<Files *.html>
<If "-f %{REQUEST_FILENAME}"> # make sure the file exists so that if not, Apache will show its 404 page and not FPM
SetHandler proxy:fcgi://#{PHP_FPM_LISTEN}
</If>
</Files>
</Directory>
2.) 您需要指示PHP-FPM 处理扩展名为.html
的文件。默认情况下它不会,因为它试图通过错误配置防止滥用(即防止攻击者评估具有意外扩展名的文件)。
为此,您需要添加文件 .bp-config/php/fpm.d/php-process-html.conf
(php-process-html
部分无关紧要,但名称需要以 .conf
结尾)。在其中,您需要输入以下内容:
[www]
security.limit_extensions = .php .html
这告诉 PHP-FPM 处理 .php
和 .html
文件。
注意:这至少需要 PHP 构建包的 v4.3.32,这在我撰写本文时是相当新的。如果你使用的是旧版本的构建包,它仍然是可能的,但你需要提供一个完整的自定义 php-fpm.conf 配置文件,而不是仅仅覆盖这个 属性 和那个文件将进入 .bp-config/php/php-fpm.conf
。从 here 中获取 php-fpm.conf
文件之一,如果您被困在较旧的构建包上,则将其用作入门的基础。
我正在尝试在 Cloud Foundry 上部署带有 html 扩展名的基本 php 页面,更准确地说是在 Swisscom Application Cloud 上。
这是我唯一的源文件,位于 ${APP_ROOT}/www/index.html
<html>
<?php
phpinfo();
?>
</html>
我的配置文件如下
在.bp-config/options.json
:
{
"WEBDIR": "www",
"PHP_VERSION": "{PHP_56_LATEST}",
"WEB_SERVER": "httpd"
}
在.bp-config/httpd/httpd.conf
:
ServerRoot "${HOME}/httpd"
Listen ${PORT}
ServerAdmin "${HTTPD_SERVER_ADMIN}"
ServerName sample-app.scapp.io
DocumentRoot "${HOME}/#{WEBDIR}"
Include conf/extra/httpd-modules.conf
Include conf/extra/httpd-mime.conf
我从 Swisscom App Cloud 的设置中获取的服务器名称:
在.bp-config/httpd/extra/httpd-modules.conf
:
LoadModule mpm_event_module modules/mod_mpm_event.so
根据错误日志,这似乎是必需的,如果没有包含的话。
在.bp-config/httpd/extra/httpd-mime.conf
:
<IfModule mime_module>
AddType application/x-httpd-php .php .htm .html
</IfModule>
为了方便起见,可以在 this GitHub repo 访问上面的源代码。
实例无法启动,但我找不到任何描述性的错误消息。这些是来自 Swisscom Application Cloud 的日志:
2017-05-19 12:56:26 [API/1] OUT Created app with guid 383e1568-29e9-4ef5-9825-3e1248a85b8e
2017-05-19 12:56:28 [API/3] OUT Updated app with guid 383e1568-29e9-4ef5-9825-3e1248a85b8e ({"route"=>"025e8337-7fd2-42c8-a325-d535af3db460", :verb=>"add", :relation=>"routes", :related_guid=>"025e8337-7fd2-42c8-a325-d535af3db460"})
2017-05-19 12:56:38 [API/1] OUT Updated app with guid 383e1568-29e9-4ef5-9825-3e1248a85b8e ({"state"=>"STARTED"})
2017-05-19 12:56:38 [STG/0] OUT Downloading dotnet_core_buildpack...
2017-05-19 12:56:38 [STG/0] OUT Downloading nodejs_buildpack...
2017-05-19 12:56:38 [STG/0] OUT Downloading python_buildpack...
2017-05-19 12:56:38 [STG/0] OUT Downloading binary_buildpack...
2017-05-19 12:56:38 [STG/0] OUT Downloading go_buildpack...
2017-05-19 12:56:39 [STG/0] OUT Downloaded nodejs_buildpack
2017-05-19 12:56:39 [STG/0] OUT Downloading php_buildpack...
2017-05-19 12:56:39 [STG/0] OUT Downloaded dotnet_core_buildpack
2017-05-19 12:56:39 [STG/0] OUT Downloading java_buildpack...
2017-05-19 12:56:39 [STG/0] OUT Downloaded binary_buildpack
2017-05-19 12:56:39 [STG/0] OUT Downloading staticfile_buildpack...
2017-05-19 12:56:39 [STG/0] OUT Downloaded python_buildpack
2017-05-19 12:56:39 [STG/0] OUT Downloading ruby_buildpack...
2017-05-19 12:56:39 [STG/0] OUT Downloaded go_buildpack
2017-05-19 12:56:39 [STG/0] OUT Downloaded java_buildpack
2017-05-19 12:56:39 [STG/0] OUT Downloaded php_buildpack
2017-05-19 12:56:39 [STG/0] OUT Downloaded staticfile_buildpack
2017-05-19 12:56:39 [STG/0] OUT Downloaded ruby_buildpack
2017-05-19 12:56:39 [STG/0] OUT Creating container
2017-05-19 12:56:39 [STG/0] OUT Successfully created container
2017-05-19 12:56:39 [STG/0] OUT Downloading app package...
2017-05-19 12:56:39 [STG/0] OUT Downloaded app package (1.5K)
2017-05-19 12:56:39 [STG/0] OUT Staging...
2017-05-19 12:56:41 [STG/0] OUT -------> Buildpack version 4.3.31
2017-05-19 12:56:41 [STG/0] OUT Installing HTTPD
2017-05-19 12:56:41 [STG/0] OUT HTTPD 2.4.25
2017-05-19 12:56:42 [STG/0] OUT Downloaded [file:///tmp/buildpacks/d16e91f150d8c31f69507a615bf75f08/dependencies/https___buildpacks.cloudfoundry.org_dependencies_httpd_httpd-2.4.25-linux-x64-bf8851c4.tgz] to [/tmp]
2017-05-19 12:56:42 [STG/0] OUT Installing PHP
2017-05-19 12:56:42 [STG/0] OUT PHP 5.6.30
2017-05-19 12:56:42 [STG/0] OUT Downloaded [file:///tmp/buildpacks/d16e91f150d8c31f69507a615bf75f08/dependencies/https___buildpacks.cloudfoundry.org_dependencies_php_php-5.6.30-linux-x64-13625eaa.tgz] to [/tmp]
2017-05-19 12:56:44 [STG/0] OUT Finished: [2017-05-19 10:56:44.679464]
2017-05-19 12:56:53 [STG/0] OUT Exit status 0
2017-05-19 12:56:53 [STG/0] OUT Staging complete
2017-05-19 12:56:53 [STG/0] OUT Uploading droplet, build artifacts cache...
2017-05-19 12:56:53 [STG/0] OUT Uploading droplet...
2017-05-19 12:56:53 [STG/0] OUT Uploading build artifacts cache...
2017-05-19 12:56:53 [STG/0] OUT Uploaded build artifacts cache (198B)
2017-05-19 12:57:01 [STG/0] OUT Uploaded droplet (55.3M)
2017-05-19 12:57:01 [STG/0] OUT Uploading complete
2017-05-19 12:57:01 [STG/0] OUT Destroying container
2017-05-19 12:57:02 [CELL/0] OUT Creating container
2017-05-19 12:57:02 [CELL/0] OUT Successfully created container
2017-05-19 12:57:04 [STG/0] OUT Successfully destroyed container
2017-05-19 12:57:06 [CELL/0] OUT Starting health monitoring of container
2017-05-19 12:57:07 [APP/PROC/WEB/0] OUT 10:57:07 php-fpm | [19-May-2017 10:57:07] NOTICE: fpm is running, pid 40
2017-05-19 12:57:07 [APP/PROC/WEB/0] OUT 10:57:07 php-fpm | [19-May-2017 10:57:07] NOTICE: ready to handle connections
2017-05-19 12:57:07 [APP/PROC/WEB/0] OUT Exit status 1
2017-05-19 12:57:07 [CELL/0] OUT Exit status 0
2017-05-19 12:57:07 [CELL/0] OUT Destroying container
2017-05-19 12:57:07 [API/3] OUT Process has crashed with type: "web"
2017-05-19 12:57:07 [API/3] OUT App instance exited with guid 383e1568-29e9-4ef5-9825-3e1248a85b8e payload: {"instance"=>"", "index"=>0, "reason"=>"CRASHED", "exit_description"=>"2 error(s) occurred:\n\n* 2 error(s) occurred:\n\n* Exited with status 1\n* cancelled\n* cancelled", "crash_count"=>1, "crash_timestamp"=>1495191427514377386, "version"=>"ede7276b-e0a6-467c-a86a-5c60f1c36021"}
我想肯定还有其他日志包含有关崩溃的更多信息,但我不知道在哪里可以找到它们。
是什么导致了崩溃,我该如何解决?
我不确定您的应用失败的原因。我的猜测是 HTTPD 不喜欢配置并且它正在退出。日志中没有 HTTPD 的输出,您应该会看到它正在启动,就像这样。
例如:
2017-05-20T08:26:18.76-0400 [APP/PROC/WEB/0] OUT 12:26:18 httpd | [Sat May 20 12:26:18.741822 2017] [mpm_event:notice] [pid 103:tid 140440543442816] AH00489: Apache/2.4.25 (Unix) configured -- resuming normal operations
2017-05-20T08:26:18.77-0400 [APP/PROC/WEB/0] OUT 12:26:18 httpd | [Sat May 20 12:26:18.741947 2017] [mpm_event:info] [pid 103:tid 140440543442816] AH00490: Server built: Dec 20 2016 22:27:46
2017-05-20T08:26:18.77-0400 [APP/PROC/WEB/0] OUT 12:26:18 httpd | [Sat May 20 12:26:18.741961 2017] [core:notice] [pid 103:tid 140440543442816] AH00094: Command line: '/app/httpd/bin/httpd -f /home/vcap/app/httpd/conf/httpd.conf -D FOREGROUND'
如果您想让 PHP-FPM 处理您的 HTML 文件,您需要进行一些更改。
1.) 在 .bp-config/httpd/extra/httpd-php.conf
中,您需要修改或附加 <Directory "${HOME}/#{WEBDIR}">
块,以便它将 .html
文件发送到 PHP-FPM。如果您不这样做,HTTPD 将提供它们或 return 404。
Ex:发送 .php
和 .html
<Directory "${HOME}/#{WEBDIR}">
<Files *.php>
<If "-f %{REQUEST_FILENAME}"> # make sure the file exists so that if not, Apache will show its 404 page and not FPM
SetHandler proxy:fcgi://#{PHP_FPM_LISTEN}
</If>
</Files>
<Files *.html>
<If "-f %{REQUEST_FILENAME}"> # make sure the file exists so that if not, Apache will show its 404 page and not FPM
SetHandler proxy:fcgi://#{PHP_FPM_LISTEN}
</If>
</Files>
</Directory>
2.) 您需要指示PHP-FPM 处理扩展名为.html
的文件。默认情况下它不会,因为它试图通过错误配置防止滥用(即防止攻击者评估具有意外扩展名的文件)。
为此,您需要添加文件 .bp-config/php/fpm.d/php-process-html.conf
(php-process-html
部分无关紧要,但名称需要以 .conf
结尾)。在其中,您需要输入以下内容:
[www]
security.limit_extensions = .php .html
这告诉 PHP-FPM 处理 .php
和 .html
文件。
注意:这至少需要 PHP 构建包的 v4.3.32,这在我撰写本文时是相当新的。如果你使用的是旧版本的构建包,它仍然是可能的,但你需要提供一个完整的自定义 php-fpm.conf 配置文件,而不是仅仅覆盖这个 属性 和那个文件将进入 .bp-config/php/php-fpm.conf
。从 here 中获取 php-fpm.conf
文件之一,如果您被困在较旧的构建包上,则将其用作入门的基础。