我正在使用 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
to这样的请求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 中有一种标准的方法来处理这个问题吗?
一只名叫tom的猫