【发布时间】:2019-07-31 16:40:24
【问题描述】:
我正在使用 Slim/Twig 将 PHP 中的一些站点迁移到 docker 容器。在旧服务器中,一个请求进来了,将请求发送回 html,然后浏览器进行调用以获取 apache 接管的资源 CSS、图像等。
迁移到 Docker 的 httpd conf 本质上是这样的:
ProxyPassMatch "^/(.*\.php\/(.*)?)$" "fcgi://php:9000/var/www/html/public/index.php/$2"
仍在解决所有这些问题,但这实际上是将http://192.168.33.20:8080/index.php/admin 之类的请求转发到fcgi://php:9000/var/www/html/public/index.php/$2,Slim 会选择路径的所有其余部分,因此admin 并返回由twig 呈现的正确视图。
我遇到的问题是资源。我通过 Composer 在 php 应用程序中拥有大部分 css 和前端框架。于是浏览器再次调用:
/index.php/vendor/twbs/bootstrap/dist/js/bootstrap.bundle.js HTTP/1.1" 404
获取404,因为 Slim 不知道这条路径是什么,而 apache 只是在转发。
我看过的内容和缺点:
将资源放在 Apache 上,但这基本上像服务器一样将 Apache 和 php 结合在一起。
创建一个容器来服务这些文件,即另一个非负载平衡器 Apache 来服务这些请求。这仍然是一对,也意味着我需要找到一种方法来潜在地在蓝绿色部署中存储多个版本。
将一个卷安装到 Apache lb。不知道为什么我放弃了这个。可能是版本问题。
创建可以搜索资源的路径。到目前为止我最喜欢的想法,但增加了代码复杂性。
所以我的问题是在 Docker 中有一个标准的方法来处理这个问题吗?
【问题讨论】:
-
作为对阅读本文的任何人的更新。根据几天的研发,我发现最好的做法是使用 php:apache。它是带有 mod_php 的 apache。所以 apache 和 php 处理的所有好处。站点的反向代理和 php-fpm 基本上是试图将正方形放入圆孔中。这更适合api。当你进入静态文件时,php-fpm 会增加一些不值得头疼的复杂性。