前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >如何在Ubuntu 14.04上使用Nginx安装HHVM

如何在Ubuntu 14.04上使用Nginx安装HHVM

原创
作者头像
木纸鸢
修改2018-09-30 17:18:45
1.3K0
修改2018-09-30 17:18:45
举报

介绍

HHVM是一个用于执行PHP和Hack代码的开源虚拟机。HHVM由Facebook开发和支持,这一事实最近引起了越来越多的人们对HHVM的关注。

HHVM与其他PHP引擎不同,因为它的实时(JIT)编译方法。HHVM将PHP代码编译为中间字节代码,然后直接编译为x64机器指令。与其他引擎的工作方式相比,这可以实现更多优化和更高的性能。

HHVM功能强大且速度快,但它在资源方面也很苛刻,就像任何其他虚拟机(例如JVM)一样。因此,与其他更轻量级的PHP解释器(如PHP-FPM)相比,HHVM需要更多的RAM和CPU。我们的测试表明,良好的性能要求CVM至少有1 GB RAM。

在本文中,我们将向您展示如何安装HHVM并将其与Nginx集成。

准备

本教程已在Ubuntu 14.04上测试过。所描述的安装和配置在其他OS或OS版本上类似,但配置文件的命令和位置可能不同。

在本教程中,您将需要:

本教程中的所有命令都应以非root用户身份运行。如果命令需要root访问权限,则前面会有sudo

安装

对于Ubuntu 14.04,有一个官方支持的HHVM存储库。要添加此存储库,您必须使用以下命令导入其GnuPG公钥:

代码语言:javascript
复制
sudo apt-key adv --recv-keys --keyserver hkp://keyserver.ubuntu.com:80 0x5a16e7281be7a449

之后,您可以使用以下命令安全地安装HHVM的存储库:

代码语言:javascript
复制
sudo add-apt-repository "deb http://dl.hhvm.com/ubuntu $(lsb_release -sc) main"

一旦你添加了存储库,你必须让apt,即Ubuntu的软件管理员知道有新的软件包可以随之安装。这可以通过使用以下命令更新apt的缓存来完成:

代码语言:javascript
复制
sudo apt-get update

最后,您可以使用以下命令安装HHVM:

代码语言:javascript
复制
sudo apt-get install hhvm

上面的命令安装HHVM并首次启动它。要确保HHVM使用CVM自动启动和停止,请使用以下命令将HHVM添加到默认运行级别:

代码语言:javascript
复制
sudo update-rc.d hhvm defaults

组态

HHVM附带了一个脚本,可以很容易地与Nginx集成。如果你有一个默认的Nginx安装,你可以运行脚本而不需要像这样的任何参数:

代码语言:javascript
复制
sudo /usr/share/hhvm/install_fastcgi.sh

运行时,此脚本将配置文件/etc/nginx/hhvm.conf添加到默认的Nginx服务器块配置/etc/nginx/sites-enabled/default中。它仅适用于没有任何FastCGI配置的默认Nginx配置。

如果您已使用自定义FastCGI配置(例如PHP-FPM配置)修改了默认服务器块,则必须使用以下方法手动替换以前的FastCGI配置:

代码语言:javascript
复制
location ~ \.(hh|php)$ {
    fastcgi_keep_conn on;
    fastcgi_pass   127.0.0.1:9000;
    fastcgi_index  index.php;
    fastcgi_param  SCRIPT_FILENAME $document_root$fastcgi_script_name;
    include        fastcgi_params;
}

以上意味着Nginx应该使用HHVM来处理任何.php.hh(hack)请求的文件。

您还需要重新启动Nginx以启用更改:

代码语言:javascript
复制
sudo service nginx restart

它还假定您尚未更改127.0.0.1:9000中使服务可访问的默认HHVM配置。此设置来自主HHVM配置文件/etc/hhvm/server.ini,其中包含:

代码语言:javascript
复制
; php options
​
pid = /var/run/hhvm/pid
​
; hhvm specific
​
hhvm.server.port = 9000
hhvm.server.type = fastcgi
hhvm.server.default_document = index.php
hhvm.log.use_log_file = true
hhvm.log.file = /var/log/hhvm/error.log
hhvm.repo.central.path = /var/run/hhvm/hhvm.hhbc

在上面的配置中,您可能会注意到确定HHVM将在TCP端口9000上侦听的变量hhvm.server.port。此外,除非另行指定,否则它将默认侦听localhost。

HHVM被认为适用于负载较重的环境,因此您可以做的第一个配置更改是使HHVM侦听接口而不是TCP端口。因此,Nginx和HHVM之间的通信将需要更少的CPU和内存。

要将HHVM配置为侦听接口,请在您喜欢的编辑器中打开该/etc/hhvm/server.ini文件,例如vim

代码语言:javascript
复制
sudo vim /etc/hhvm/server.ini

然后删除以hhvm.server.port开头的行,并在其位置添加以下内容:

代码语言:javascript
复制
hhvm.server.file_socket=/var/run/hhvm/hhvm.sock

保存配置文件,然后使用以下命令重新启动HHVM:

代码语言:javascript
复制
sudo service hhvm restart

接下来,您必须让Nginx了解此更改。为此,打开文件/etc/nginx/hhvm.conf进行编辑:

代码语言:javascript
复制
sudo vim /etc/nginx/hhvm.conf

在此文件中,确保该fastcgi_pass指令指向HHVM套接字,如下所示:

代码语言:javascript
复制
fastcgi_pass unix:/var/run/hhvm/hhvm.sock;

您还必须重新启动Nginx才能使此更改生效。为此,请使用以下命令:

代码语言:javascript
复制
sudo service nginx restart

/usr/share/hhvm/install_fastcgi.sh脚本可以为您节省一些时间,但有些事情您需要手动调整,特别是在您的Nginx服务器块方面。例如,默认的服务器模块配置打开,如只索引文件index.html,并且在同时目录列表index.htm是被禁止的文件。这是您应该确定更改的一件事,并将index.php文件包含为索引文件。要执行此操作,请使用您喜欢的编辑器再次打开默认服务器块的配置文件:

代码语言:javascript
复制
sudo vim /etc/nginx/sites-enabled/default

然后转到该server部分并在索引处添加index.php以使其看起来像这样:

代码语言:javascript
复制
index index.html index.htm index.php;

再次重启Nginx以使此设置生效:

代码语言:javascript
复制
sudo service nginx restart

测试和调整HHVM

您可以执行的第一个测试是使用指向/etc/alternatives/php的PHP命令行界面(cli)/usr/bin/php,在术语中指向HHVM二进制文件/usr/bin/hhvm

代码语言:javascript
复制
/usr/bin/php --version

当您运行上面的命令时,您应该看到打印的HHVM的版本和存储库信息,如下所示:

代码语言:javascript
复制
HipHop VM 3.8.1 (rel)
Compiler: tags/HHVM-3.8.1-0-g3006bc45691762b5409fc3a510a43093968e9660
Repo schema: 253b3802ce1bcd19e378634342fc9c245ac76c33

如果你在HHVM之前安装了PHP,你仍然可以看到旧PHP的输出。要更改此设置并使其指向HHVM,请运行以下命令:

代码语言:javascript
复制
sudo /usr/bin/update-alternatives --install /usr/bin/php php /usr/bin/hhvm 60

接下来,您可以使用众所周知的phpinfo()功能来查看HHVM的设置和选项。为此,使用您喜欢的编辑器在默认文档根目录/usr/share/nginx/html中创建一个新文件info.php

代码语言:javascript
复制
sudo vim /usr/share/nginx/html/info.php

新文件应包含:

代码语言:javascript
复制
<?php
phpinfo();
?>

确保所有Nginx Web文件都是Nginx用户www-data的所有者始终是一个好习惯。因此,使用www-data命令更改此文件的所有权:

代码语言:javascript
复制
sudo chown www-data: /usr/share/nginx/html/info.php

现在尝试通过CVM的IP访问此文件。放入浏览器的URL应是http://your_server_ip/info.php

浏览器中的结果应如下所示:

如果您没有看到类似的页面,请首先确保您已正确遵循先决条件中的安装说明。其次,在Nginx(/var/log/nginx/error.log)和HHVM(/var/log/hhvm/error.log)的错误日志中查找错误。

回到浏览器,您可能会注意到此页面与通常的PHP 生成的phpinfo()页面类似。事实上,除了以hhvm.前缀开头的HHVM特定变量之外,大多数变量与通常的PHP相同。

在探索变量时,注意memory limit等于17179869184字节,略高于17 GB。如此高的内存资源限制肯定会杀死具有几GB RAM的CVM,使其无响应。您应该将此值减小到低于CVM的可用RAM的值,以确保CVM上的其他服务不会因RAM不足而受到影响。

作为一般示例,如果您的CVM具有2GB的RAM,那么将大约1.2 GB专用于HHVM应该是安全的。要实现这一点,请使用您喜欢的编辑器编辑/etc/hhvm/php.ini文件(sudo vim /etc/hhvm/php.ini)并在; php options 部分后面添加一个新变量:

代码语言:javascript
复制
memory_limit = 1200M

以类似的方式,您可以根据您的需要和喜好修改任何PHP设置和变量。只需确保在每次更改后使用以下命令重新启动HHVM:

代码语言:javascript
复制
sudo service hhvm restart

接下来,您可以使用常见的Web应用程序执行更复杂的测试。重要的是要知道HHVM与通常的PHP以及所有流行的PHP框架都不是100%兼容的。我们在撰写本文时的测试表明,许多PHP Web应用程序(如WordPress)似乎都能正常工作。但是,正式来说,支持的框架数量有限。

使用完整的框架/ Web应用程序进行测试时,应该没有特定于HHVM的内容。安装和操作说明应与常规LEMP堆栈相同。这是因为,默认情况下,HHVM捆绑了所有大多数PHP模块,提供良好的兼容性。

但是,在一些非常罕见的情况下,您可能需要为HHVM安装一个额外的模块。例如,如果您将PostreSQL用作数据库服务器,则需要该pgsql模块。在这种情况下,请先咨询HHVM的官方文档,即使它可能会将您转发给第三方资源,例如pgsql

结论

正如本文所示,HHVM可以轻松安装,配置和与Nginx集成。如果你有足够的资源,你一定要试一试,看看HHVM独特的JIT编译器在性能和稳定性方面如何为你工作。对于像Facebook这样具有复杂功能和无与伦比的流量的网站来说,必须有充分的理由相信它。但是,对于流量较少的小站点,您可能会发现较低内存占用的解决方案(如PHP-FPM)仍然是更好的选择。

想要了解更多关于Linux的开源信息教程,请前往腾讯云+社区学习更多知识。

参考文献:《How To Install HHVM with Nginx on Ubuntu 14.04》

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 介绍
  • 准备
  • 安装
  • 组态
  • 测试和调整HHVM
  • 结论
相关产品与服务
云数据库 MySQL
腾讯云数据库 MySQL(TencentDB for MySQL)为用户提供安全可靠,性能卓越、易于维护的企业级云数据库服务。其具备6大企业级特性,包括企业级定制内核、企业级高可用、企业级高可靠、企业级安全、企业级扩展以及企业级智能运维。通过使用腾讯云数据库 MySQL,可实现分钟级别的数据库部署、弹性扩展以及全自动化的运维管理,不仅经济实惠,而且稳定可靠,易于运维。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档