我尝试在同一个VPS上托管多个域,使用HHVM来提供页面。
我想知道如何编写VirtualHost以便在/ var / www目录中指向正确的文件夹?
例如xxx.domain.com>> /var/www/domain.com/
答案 0 :(得分:2)
好消息。自HHVM 2。3(2013年12月13日)发布以来,您可以在FCGI模式下运行HHVM。使用Nginx或Apache,它可以很好地工作。
参考:http://www.hhvm.com/blog/1817/fastercgi-with-hhvm
使用旧版本的HHVM,您可以在内部端口上运行多个服务器实例,即8001,8002等。然后将Nginx配置为反向代理。 (Apache也可以这样做。)
upstream node1{
server 127.0.0.1:8001;
}
upstream node2{
server 127.0.0.1:8002;
}
server {
...
server_name server1.com;
location ~ \.php$ {
proxy_pass http://node1;
proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;
proxy_redirect off;
proxy_buffering off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Ssl on; #only for https
}
}
server {
...
server_name server2.com;
location ~ \.php$ {
proxy_pass http://node2;
proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;
proxy_redirect off;
proxy_buffering off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Ssl on; #only for https
}
}
当然这个设置占用了大量内存。如果可以升级,请使用2.3。
答案 1 :(得分:1)
显然还不可能。根据托管代码的官方github repository,open issue与您提出的问题相同,并且标记为 wishlist / 功能请求
解决此问题的最佳方法可能是为每个域运行HHVM服务器(意味着每个域需要不同的根文件夹),并使用Apache或Nginx作为代理。
答案 2 :(得分:0)
在Nginx上,我能够将其发挥作用的唯一方法是将/
用作SourceRoot
用于HHVM,并在/
中添加fastcgi_param SCRIPT_FILENAME /$document_root$fastcgi_script_name;
我的/etc/nginx/hhvm.conf
文件。通过这种组合,到目前为止,我正在运行~7个站点没有问题。我正在运行Ubuntu 13.10 64位。
在/etc/hhvm/server.hdf
中,将SourceRoot = /var/www
更改为SourceRoot = /
:
Server {
Port = 9000
SourceRoot = /
DefaultDocument = index.php
}
在/etc/nginx/hhvm.conf
中,在$document_root$fastcgi_script_name;
前面添加/:
location ~ \.php$ {
fastcgi_split_path_info ^(.+?\.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;
fastcgi_intercept_errors on;
fastcgi_read_timeout 300;
include fastcgi_params;
}
您可能还需要将fastcgi_param SCRIPT_FILENAME $fastcgi_script_name;
更改为fastcgi_param SCRIPT_FILENAME /$document_root$fastcgi_script_name;
,至少我必须与我一起。
使用/
作为您的SourceRoot可能会产生安全隐患 - 我通过防火墙端口9000尽可能地减轻这种影响,因此只有localhost可以访问它。或者您可以使用套接字。不是万无一失,但从我到目前为止所看到的还可以。