【发布时间】:2015-04-06 18:17:57
【问题描述】:
我一直在使用 HHVM 和 Nginx 运行一个 magento 站点。到目前为止,我没有遇到任何问题,我得到的只是一个非常受欢迎的显着性能提升。
但是,我刚刚添加了一个使用 HHVM 不支持的 PHP 函数的插件。好消息是这个插件只需要一个页面。坏消息是我没有将 Nginx 配置为仅使用 PHP 提供此页面。
某些人使用错误指令使用的常用回退技巧在这种情况下不起作用,因为页面不会引发错误。如果启用了 HHVM,它就不起作用了。
相反,我尝试为该特定页面编写许多不同的位置块。没有工作,这是我认为可以解决问题的两个。
有没有办法只为特定页面运行 PHP?
失败的解决方案 1
location ~ /page/.+\.php${
if (!-e $request_filename) { rewrite / /index.php last; }
fastcgi_pass unix:/var/run/php5-fpm.sock; ##Unix socket
fastcgi_param HTTPS $fastcgi_https;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
location ~ \.(hh|php)$ {
if (!-e $request_filename) { rewrite / /index.php last; }
fastcgi_keep_conn on;
fastcgi_pass unix:/var/run/hhvm/sock;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param HTTPS $fastcgi_https;
include fastcgi_params;
}
失败的解决方案 2(嵌套位置)
location ~ /page/ {
location ~ .php$ {
if (!-e $request_filename) { rewrite / /index.php last; }
fastcgi_pass unix:/var/run/php5-fpm.sock; ##Unix socket
fastcgi_param HTTPS $fastcgi_https;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
location ~ \.(hh|php)$ {
if (!-e $request_filename) { rewrite / /index.php last; }
fastcgi_keep_conn on;
fastcgi_pass unix:/var/run/hhvm/sock;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param HTTPS $fastcgi_https;
include fastcgi_params;
}
【问题讨论】: