![Apache mod_proxy_fcgi:每个虚拟主机一个代理工作器?](https://linux22.com/image/695314/Apache%20mod_proxy_fcgi%EF%BC%9A%E6%AF%8F%E4%B8%AA%E8%99%9A%E6%8B%9F%E4%B8%BB%E6%9C%BA%E4%B8%80%E4%B8%AA%E4%BB%A3%E7%90%86%E5%B7%A5%E4%BD%9C%E5%99%A8%EF%BC%9F.png)
我一直在使用 Apache 2.4、mpm_event、mod_proxy_fcgi 和 php_fpm 设置服务器。
在 mod_proxy_fcgi 文档中(https://httpd.apache.org/docs/2.4/mod/mod_proxy_fcgi.html) 中提到“出于性能原因,您将需要定义一个代表相同 fcgi:// 后端的工作程序。”
他们的例子:
<FilesMatch "\.php$">
# Note: The only part that varies is /path/to/app.sock
SetHandler "proxy:unix:/path/to/app.sock|fcgi://localhost/"
</FilesMatch>
# Define a matching worker.
# The part that is matched to the SetHandler is the part that
# follows the pipe. If you need to distinguish, "localhost; can
# be anything unique.
<Proxy "fcgi://localhost/" enablereuse=on max=10>
</Proxy>
现在我的问题是;我为每个 Vhost 设置了一个 php_fpm 池,并为每个 vhost 指定了“SetHandler”,以便它使用适当的池,我是否也应该为每个 vhost 设置一个新的代理工作器?
示例 Vhost 1:
<FilesMatch "\.php$">
SetHandler "proxy:unix:/path/to/app1.sock|fcgi://app1/"
</FilesMatch>
<Proxy "fcgi://app1/" enablereuse=on max=10></Proxy>
示例 Vhost 2:
<FilesMatch "\.php$">
SetHandler "proxy:unix:/path/to/app2.sock|fcgi://app2/"
</FilesMatch>
<Proxy "fcgi://app2/" enablereuse=on max=10></Proxy>
或者在每个 SetHandler 中使用“fcgi://localhost/”是正确的方法吗?
答案1
我意识到我没有完全理解我所配置的内容。正如 mod_proxy 文档所述,Apache 以 2 个默认的 mod_proxy 工作程序开始,一个用于正向代理请求,一个用于反向代理请求。这些工作程序指的是 MPM 工作程序,这是我所不理解的。在我的例子中,它们是 mpm_event 工作程序,每个工作程序都按照 Apache 配置中的配置运行。
如果不首先考虑您的使用情况和工作器配置,则无法正确回答此问题。如果您认为一个 mpm 工作器可以处理所有网站,则没有理由不使用默认工作器 fcgi://localhost。如果您有一个大型网站并希望它拥有自己的 mpm 工作器,您需要做的就是指定一个新的代理并设置您的处理程序以使用它。