是否可以从 php-fpm 提供静态 html?

是否可以从 php-fpm 提供静态 html?

我有dockerised一个 wordpress 应用程序,现在我是一个纯粹主义者,不想将其包含nginx在 docker 容器中,也不想在nginx容器和php-fpm容器之间共享任何状态。

我想php-fpm作为独立的 Web 服务器运行(例如 ruby​​ 中的 unicorn 或 python 中的 gunicorn),为 wordpress 网站提供所有内容(html、css 和图像)。并nginx在其前面运行反向代理(缓存静态内容)。这样,我就可以保持关注点分离,并且不需要nginx将流量转发到nginx服务器。

的默认配置php-fpm仅允许处理 php 文件。可以php-fpm更改该配置吗?如何更改?这是个好主意吗?

答案1

可以,但性能会很差,因为一​​切都要经过 PHP 解释器。这还会带来明显的严重安全问题。

这是确切地应该使用共享数据卷。

答案2

您可以在 nginx 和 php-fpm 之间使用 TCP 套接字连接,然后可以在不同的容器中运行它们。只需fastcgi_pass fastcgi://php-fpm-ip:port在您的 nginx 配置中指定即可。

然后,使用共享数据卷,您可以从同一位置访问文件。

答案3

这几周我一直在思考这个问题。我的解决方案是这个 docker 文档docs.docker.com其中写道:

如果您将空卷挂载到容器中存在文件或目录的目录中,则这些文件或目录将被传播(复制)到该卷中。同样,如果您启动容器并指定尚不存在的卷,则会为您创建一个空卷。这是预先填充另一个容器所需数据的好方法。

所以我只需在 composer.yml 中安装一个像这样的空卷:

services:
  nginx:
    image: nginx:1.25
    volumes:
      - my-volume:/var/www
  php:
    image: my-custom/image:latest
    volumes:
      - my-volume:/var/www
volumes:
  my-volume:

在此之后,静态文件从 php-fpm 容器完美地提供给 nginx,在这种情况下,该容器拥有需要与 nginx 共享的所有代码。

相关内容