运行 HHVM 和 PHP 同时与 Nginx
Run HHVM and PHP simultaneously with Nginx
我一直在运行使用 HHVM 和 Nginx 创建一个 magento 站点。到目前为止,我没有遇到任何问题,我得到的只是非常受欢迎的显着性能提升。
但是,我刚刚添加了一个使用 HHVM 不支持的 PHP 函数的插件。好消息是这个插件只需要一个页面。坏消息是我没有将 Nginx 配置为仅使用 PHP.
服务此页面
某些使用错误指令的人通常使用的回退技巧在这种情况下不起作用,因为页面不会抛出错误。如果启用了 HHVM,它就不起作用。
相反,我尝试为该特定页面编写许多位置块变体。 None 起作用了,这两个是我认为可以解决问题的方法。
有没有办法 运行 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;
}
尝试使用可变条件方法,它对我有用,以 /serve-with-php/
开头的位置由 unix:/var/run/php5-fpm.sock
提供,而所有其他位置由 127.0.0.1:9000
[=14 提供=]
server {
root /home/vearutop/test-hhvm;
index index.php index.html index.htm;
error_log /var/log/nginx-error.log error;
charset utf-8;
server_name test-hhvm;
location / {
set $fcgi_worker 127.0.0.1:9000; # hhvm handle
try_files $uri $uri/ /index.php?$query_string;
}
location /serve-with-php/ {
set $fcgi_worker unix:/var/run/php5-fpm.sock; # php-fpm handle
try_files $uri $uri/ /index.php?$query_string;
}
location ~ \.php$ {
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass $fcgi_worker;
fastcgi_index index.php;
include fastcgi_params;
}
}
我一直在运行使用 HHVM 和 Nginx 创建一个 magento 站点。到目前为止,我没有遇到任何问题,我得到的只是非常受欢迎的显着性能提升。
但是,我刚刚添加了一个使用 HHVM 不支持的 PHP 函数的插件。好消息是这个插件只需要一个页面。坏消息是我没有将 Nginx 配置为仅使用 PHP.
服务此页面某些使用错误指令的人通常使用的回退技巧在这种情况下不起作用,因为页面不会抛出错误。如果启用了 HHVM,它就不起作用。
相反,我尝试为该特定页面编写许多位置块变体。 None 起作用了,这两个是我认为可以解决问题的方法。
有没有办法 运行 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;
}
尝试使用可变条件方法,它对我有用,以 /serve-with-php/
开头的位置由 unix:/var/run/php5-fpm.sock
提供,而所有其他位置由 127.0.0.1:9000
[=14 提供=]
server {
root /home/vearutop/test-hhvm;
index index.php index.html index.htm;
error_log /var/log/nginx-error.log error;
charset utf-8;
server_name test-hhvm;
location / {
set $fcgi_worker 127.0.0.1:9000; # hhvm handle
try_files $uri $uri/ /index.php?$query_string;
}
location /serve-with-php/ {
set $fcgi_worker unix:/var/run/php5-fpm.sock; # php-fpm handle
try_files $uri $uri/ /index.php?$query_string;
}
location ~ \.php$ {
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass $fcgi_worker;
fastcgi_index index.php;
include fastcgi_params;
}
}