所以这不是让PHP工作,而是关于混合语法结构。 具体而言,我正在寻找一种方法来使用一个优雅的Action
速记绑定PHP-FPM在不同的虚拟主机。
你好, mod-fastcgi的方式:
以前我曾经使用FastCGIExternalServer
和ScriptAlias
等人的虚拟path:
FastCGIExternalServer /www/fcgi/api5 -flush -socket /var/run/php-fpm-api.sock ScriptAlias /..A5.. /www/fcgi/api5 Action php5-api /..A5.. AddHandler php5-api .php
现在这既不是非常现代的,也不是很可读。 除了AddHandler php5-user
部分。 这正是我想在整个configuration中继续使用的。
用于mod-proxy-fcgi的 ProxyPassMatch
对于PHP-FPM设置,通常首先推荐这种设置:
ProxyPassMatch ^/(.*\.php(/.*)?)$ proxy:unix:/run/php-fpm.sock|fcgi://localhost
正则expression式匹配当然有它的魅力。 但它很容易干扰RewriteRule集。 所以这也不是最好的select。
SetHandler
与<FilesMatch>
当然是更好和常见的select:
<FilesMatch ".+\.ph(p[3457]?|t|tml)$"> SetHandler "proxy:unix:/run/php/php7.0-fpm.sock|fcgi://localhost" </FilesMatch>
但是我仍然认为这太冗长了,相比于AddHandler php7-whatever .php
带代理指定符的AddHandler
没有看到这个在Apache手册中的任何地方提到,也没有看到。 但是,您也可以使用更简单的AddHandler
方法来映射.php
文件:
AddHandler "proxy:unix:/run/php-fpm.sock|fcgi://localhost" .php
这是我喜欢的东西。 但是我仍然需要在整个虚拟主机configuration中复制代理string。 当然,我可以使用Include
一堆vhost / fpm-pool变体,我宁愿有预定义的名称。
Define
和AddHandler
唯一明智的解决方法似乎是:
Define php7-api "proxy:unix:/run/php7-api.sock|fcgi://localhost" Define php7-usr "proxy:unix:/run/php7-usr.sock|fcgi://localhost" Define php5-tst "proxy:unix:/run/php5-tst.sock|fcgi://localhost" # … AddHandler ${php7-usr} .php
如果这是最短的select,我会明显地解决这个问题。 用一些缩写来定义FastCGIstring是我所追求的。 (因此,即使在虚拟环节中,它也可以更容易地混合和混合。)
RewriteRule[H=]
只是为了完整性/还没有检查处理程序/定义快捷方式将在这里工作:
RewriteRule \.php$ - [H=${php72-beta}]
现在我可能会解决Define
解决方法。 但是我仍然想知道为什么没有任何“标准”的aproaches与mod_proxy_fcgi一起玩。
基本Action
我原以为这可能会这样做:
Action php7-fpm "proxy:unix:/run/php7-fpm.sock|fcgi://localhost" virtual AddHandler php7-fpm .php
…因为Action适用于CGI的所有东西,而mod_proxy可以把它捡起来。 但是,大概行动仍然只承认简单的旧脚本,即使是virtual
?
卷入的ScriptAlias
类似于旧的mod_fastcgischeme,也试过:
ScriptAlias /..P7.. "proxy:unix:/run/php7-fpm.sock|fcgi://localhost" Action php7-fpm /..P7.. virtual AddHandler php7-fpm .php
无济于事。 虽然很不清楚为什么即使ScriptAlias不能识别协议redirect,或者mod_proxy也会检测到它。 (不幸的是,尽pipe有日志级别的信息,但是只有在日志中没有find无用的“文件”)。
那么,是否有另外一种方法来定义/绑定PHP-FPM到老式的Set / AddHandler名称或MIMEtypes?