phpvirtualbox是一个基于Web的VirtualBox前端,用PHP编写,它允许您访问和控制远程VirtualBox实例。
尽可能地尽可能地使VirtualBox GUI类似,使其尽可能简单。如果您在服务器中运行VirtualBox(如教程中的VBoxHeadless - 在Ubuntu 16.04 LTS服务器上运行VirtualBox 5.1运行虚拟机),则可以非常适合VirtualBox GUI 。
本教程介绍如何在Ubuntu 16.04服务器上安装phpVirtualBox来管理本地安装的VirtualBox。
大家都知道VMware是一个强大的虚拟管理系统,作为麻雀的VitrualBox也不赖。使用VitrualBox都知道,VitrualBox无法在后台运行,始终在任务栏。其实VitrualBox可以在后台运行,使用VRDP就可以在后台运行了。但这个我们不研究他在后台运行,我们研究他管理功能,深度挖潜他的功能。
作为PHPer 能不能通过Web方式管理VitrualBox,有人就会说 噢,这是多么大的工程。对,是一个大工程! Web管理虚拟机。说做就做!
第一步,下载并安装VirtualBox
这不是废话嘛,如果你是高手那就请跳过此步。 VirtualBox的下载地址:https://www.virtualbox.org/wiki/Downloads
安装virtualbox
cd /usr/local/src
wget http://download.virtualbox.org/virtualbox/5.0.34/virtualbox-5.0_5.0.34-113845~Ubuntu~xenial_amd64.deb
dpkg -i virtualbox-5.0_5.0.34-113845-Ubuntu-xenial_amd64.deb
第二步,下载phpvirtualbox,下载地址: https://sourceforge.net/projects/phpvirtualbox/或者http://code.google.com/p/phpvirtualbox/downloads/list 下载时请选择对应的版本
我的phpvirtualbox安装包:phpvirtualbox-5.0-5.zip
第三步,安装nginx 和 PHP
ubuntu16.04 源码编译 nginx1.10.3
1. 官方下载地址
下载对应的 nginx 版本并解压
cd /usr/local/src
wget http://nginx.org/download/nginx-1.10.3.tar.gz
tar zxvf nginx-1.10.3.tar.gz
2. 安装依赖包以及所需模块
sudo apt-get install libpcre3 libpcre3-dev
sudo apt-get install openssl libssl-dev
3. 编译安装
cd nginx-1.10.3
./configure --with-http_stub_status_module --with-http_ssl_module --with-http_realip_module --with-http_gzip_static_module
make && make install
4. 修改 nginx.conf 配置文件
user root;
worker_processes auto;
pid /usr/local/nginx/nginx.pid;
worker_rlimit_nofile 65535;
events
{
use epoll;
worker_connections 65535;
}
http
{
include mime.types;
default_type application/octet-stream;
charset utf-8;
server_names_hash_bucket_size 128;
client_header_buffer_size 32k;
large_client_header_buffers 4 32k;
client_max_body_size 8m;
sendfile on;
tcp_nopush on;
keepalive_timeout 600;
tcp_nodelay on;
open_file_cache max=10000 inactive=5m;
open_file_cache_valid 2m;
open_file_cache_min_uses 1;
open_file_cache_errors on;
#下载线程控制
# error_page 404 403 502 503 http://ggr.yxdown.com/redirect/youxihe.url?ip=$wanip\$document_uri;
# limit_req_zone $binary_remote_addr zone=one:3m rate=1r/s;
# limit_req_zone $binary_remote_addr $uri zone=two:3m rate=1r/s;
# limit_req_zone $binary_remote_addr $request_uri zone=three:3m rate=1r/s;
# limit_conn_zone $binary_remote_addr zone=limit_conn_one:10m;
include /usr/local/nginx/conf/proxy.conf;
include /usr/local/nginx/conf/gzip.conf;
include /usr/local/nginx/conf/vhost/*.conf;
}
5. 新建配置文件和虚拟目录
vim /usr/local/nginx/conf/proxy.conf
proxy_redirect off;
proxy_store on;
proxy_store_access user:rw group:rw all:rw;
#proxy_temp_path /dev/shm/proxy_temp_path;
#proxy_cache_path /dev/shm/proxy_cache_path levels=1:2 keys_zone=cache_one:100m inactive=30s max_size=300g;
proxy_connect_timeout 600;
proxy_read_timeout 600;
proxy_send_timeout 600;
#proxy_cache_lock on;
#proxy_cache_lock_timeout 300s;
proxy_buffer_size 32k;
proxy_buffers 4 128k;
proxy_busy_buffers_size 256k;
proxy_temp_file_write_size 512k;
proxy_set_header Host $host;
proxy_cache_valid 200 302 1h;
proxy_cache_valid 301 1d;
proxy_cache_valid any 1m;
vim /usr/local/nginx/conf/gzip.conf
gzip on;
gzip_proxied any;
gzip_types text/css;
gzip_types text/csv;
gzip_types text/plain;
gzip_types text/javascript;
gzip_types application/javascript;
gzip_types application/json;
gzip_types application/x-javascript;
gzip_types application/ecmascript;
gzip_types application/xml;
gzip_types application/xml+rss;
gzip_types application/rss+xml;
gzip_types application/atom_xml;
gzip_types application/xhtml+xml;
gzip_types application/x-font-ttf;
gzip_types application/x-font-opentype;
gzip_types application/vnd.ms-fontobject;
gzip_types image/svg+xml;
gzip_types image/x-icon;
gzip_types text/xml;
gzip_comp_level 3;
gzip_http_version 1.1;
gzip_vary on;
gzip_disable "MSIE [1-6]\.(?!.*SV1)";
gzip_buffers 16 8k;
gzip_min_length 20;
mkdir -p /usr/local/nginx/conf/vhost
ubuntu16.04 源码编译php5.5
添加依赖应用
apt-get -y install gcc libxml2-dev libssl-dev libbz2-dev libcurl4-openssl-dev libgdchart-gd2-noxpm-dev libgmp-dev libmcrypt-dev libreadline-dev libxslt-dev make
其中有两个坑:
Openssl库文件安装后不存在:
ln -s /usr/lib/x86_64-linux-gnu/libssl.so /usr/lib
Gmp库文件安装后不存在:
ln -s /usr/include/x86_64-linux-gnu/gmp.h /usr/include
这样个都是因为x86与x64所安装时库文件位置不一致所导致
编译PHP
cd /usr/local
tar xf php-5.5.38.tar.gz
cd /usr/local/php-5.5.38/
./configure --prefix=/usr/local/php \
--with-config-file-path=/usr/local/php/etc \
--enable-fpm --with-fpm-user=php-fpm --with-fpm-group=php-fpm \
--with-mysqli=mysqlnd --with-libxml-dir --with-gd \
--with-jpeg-dir --with-png-dir --with-freetype-dir \
--with-iconv-dir --with-zlib-dir --with-mcrypt \
--enable-soap --enable-gd-native-ttf --enable-ftp \
--enable-mbstring --enable-exif --disable-ipv6 \
--with-curl --enable-bcmath --enable-sockets --with-gd
make
make test
make install
cd /usr/local/php-5.5.38
为php提供配置文件:
# cp php.ini-production /etc/php.ini
为php-fpm提供Sysv init脚本,并将其添加至服务列表:
#cp sapi/fpm/init.d.php-fpm /etc/init.d/php-fpm
chmod +x /etc/init.d/php-fpm
chkconfig --add php-fpm
chkconfig php-fpm on
为php-fpm提供配置文件:
cp /usr/local/php-5.5.38/sapi/fpm/php-fpm.conf.in /usr/local/php/etc/php-fpm.conf
编辑php-fpm的配置文件:
# vim /usr/local/php/etc/php-fpm.conf
配置fpm的相关选项为你所需要的值,并启用pid文件(如下最后一行):
pm.max_children = 150
pm.start_servers = 8
pm.min_spare_servers = 5
pm.max_spare_servers = 10
pid = /usr/local/php/var/run/php-fpm.pid
接下来就可以启动php-fpm了:
service php-fpm start
使用如下命令来验正(如果此命令输出有中几个php-fpm进程就说明启动成功了):
# ps aux | grep php-fpm
php-fpm -t #### 检查下php-fpm配置是否有错误
[09-Feb-2017 20:38:22] NOTICE: configuration file /etc/php-fpm.conf test is successful
启动php-fpm
service php-fpm start
使用如下命令来验正(如果此命令输出有中几个php-fpm进程就说明启动成功了):
# ps aux | grep php-fpm
root 1368 0.0 0.1 196428 5188 ? Ss 20:23 0:00 php-fpm: master process (/usr/local/php/etc/php-fpm.conf)
nginx 1369 0.0 0.1 198512 4716 ? S 20:23 0:00 php-fpm: pool www
nginx 1370 0.0 0.1 198512 4716 ? S 20:23 0:00 php-fpm: pool www
nginx 1371 0.0 0.1 198512 4716 ? S 20:23 0:00 php-fpm: pool www
nginx 1372 0.0 0.1 198512 4716 ? S 20:23 0:00 php-fpm: pool www
nginx 1373 0.0 0.1 198512 4716 ? S 20:23 0:00 php-fpm: pool www
nginx 1374 0.0 0.1 198512 4716 ? S 20:23 0:00 php-fpm: pool www
nginx 1375 0.0 0.1 198512 4716 ? S 20:23 0:00 php-fpm: pool www
nginx 1376 0.0 0.1 198512 4716 ? S 20:23 0:00 php-fpm: pool www
root 1602 0.0 0.0 112660 964 pts/0 S+ 20:44 0:00 grep --color=auto php-fpm
整合nginx和php5
1、编辑/etc/nginx/nginx.conf,启用如下选项:
if (!-e $request_filename) {
rewrite ^(.*)$ /index.php$1 last;
}
location ~ .*\.php(\/.*)*$
{
set $path_info "";
set $real_script_name $fastcgi_script_name;
if ($fastcgi_script_name ~ "^(.+?\.php)(/.+)$") {
set $real_script_name $1;
set $path_info $2;
}
fastcgi_param SCRIPT_FILENAME $document_root$real_script_name;
fastcgi_param SCRIPT_NAME $real_script_name;
fastcgi_param PATH_INFO $path_info;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
include fastcgi.conf;
}
并在所支持的主页面格式中添加php格式的主页,类似如下:
location / {
root html;
index index.php index.html index.htm;
}
而后重新载入nginx的配置文件:
# service nginx reload
3、在/usr/html新建index.php的测试页面,测试php是否能正常工作:
# cat > /usr/local/nginx/html/index.php << EOF
<?php
phpinfo();
?>
接着就可以通过浏览器访问此测试页面了。
安装xcache,为php加速:
1、安装
tar xf xcache-3.2.0.tar.gz
cd xcache-3.2.0
/usr/local/php/bin/phpize
./configure --enable-xcache --with-php-config=/usr/local/php/bin/php-config
make && make install
安装结束时,会出现类似如下行:
Installing shared extensions: /usr/local/php-5.5.38/lib/php/extensions/no-debug-non-zts
2、编辑php.ini,整合php和xcache:
首先将xcache提供的样例配置导入php.ini
mkdir /etc/php.d
cp xcache.ini /etc/php.d
说明:xcache.ini文件在xcache的源码目录中。
接下来编辑/etc/php.d/xcache.ini,找到zend_extension开头的行,修改为如下行:
extension = /usr/local/php/lib/php/extensions/no-debug-non-zts-20121212/xcache.so
注意:如果php.ini文件中有多条zend_extension指令行,要确保此新增的行排在第一位。
3、重新启动php-fpm
# service php-fpm restart
/etc/init.d/nginx start
查看php-fpm端口
netstat -lntup | grep php-fpm
tcp 0 0 127.0.0.1:9000 0.0.0.0:* LISTEN 2458/php-fpm: mast
php结合nginx
编辑/etc/nginx/nginx.conf
vim etc/nginx/nginx.conf修改后的范例如下:
server {
listen 80;
server_name localhost;
charset utf-8;
root html;
index index.php index.html index.htm;
if (!-e $request_filename) {
rewrite ^(.*)$ /index.php$1 last;
}
location ~ .*\.php(\/.*)*$
{
set $path_info "";
set $real_script_name $fastcgi_script_name;
if ($fastcgi_script_name ~ "^(.+?\.php)(/.+)$") {
set $real_script_name $1;
set $path_info $2;
}
fastcgi_param SCRIPT_FILENAME $document_root$real_script_name;
fastcgi_param SCRIPT_NAME $real_script_name;
fastcgi_param PATH_INFO $path_info;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
include fastcgi.conf;
}
配置网站默认页
vim /etc/nginx/html/index.php
<?php
phpinfo();
?>
检查nginx配置
nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
重载nginx
nginx -s reload
6.nginx 启动脚本
cat /etc/init.d/nginx
#!/bin/sh
### BEGIN INIT INFO
# Provides: nginx
# Required-Start: $network $remote_fs $local_fs
# Required-Stop: $network $remote_fs $local_fs
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Stop/start nginx
### END INIT INFO
# Author: Sergey Budnevitch <sb@nginx.com>
PATH=/sbin:/usr/sbin:/bin:/usr/bin
DESC=nginx
NAME=nginx
nginxDIR=/usr/local/nginx
CONFFILE=$nginxDIR/conf/nginx.conf
DAEMON=$nginxDIR/sbin/nginx
PIDFILE=$nginxDIR/$NAME.pid
SCRIPTNAME=/etc/init.d/$NAME
[ -x $DAEMON ] || exit 0
[ -r /etc/default/$NAME ] && . /etc/default/$NAME
DAEMON_ARGS=" $DAEMON_ARGS"
. /lib/init/vars.sh
. /lib/lsb/init-functions
do_start()
{
start-stop-daemon --start --quiet --pidfile $PIDFILE --exec $DAEMON -- $DAEMON_ARGS
RETVAL="$?"
return "$RETVAL"
}
do_stop()
{
# Return
# 0 if daemon has been stopped
# 1 if daemon was already stopped
# 2 if daemon could not be stopped
# other if a failure occurred
start-stop-daemon --stop --quiet --retry=TERM/30/KILL/5 --pidfile $PIDFILE --name $NAME
RETVAL="$?"
rm -f $PIDFILE
return "$RETVAL"
}
do_reload() {
#
start-stop-daemon --stop --signal HUP --quiet --pidfile $PIDFILE --name $NAME
RETVAL="$?"
return "$RETVAL"
}
do_configtest() {
if [ "$#" -ne 0 ]; then
case "$1" in
-q)
FLAG=$1
;;
*)
;;
esac
shift
fi
$DAEMON -t $FLAG
RETVAL="$?"
return $RETVAL
}
do_upgrade() {
OLDBINPIDFILE=$PIDFILE.oldbin
do_configtest -q || return 6
start-stop-daemon --stop --signal USR2 --quiet --pidfile $PIDFILE --name $NAME
RETVAL="$?"
sleep 1
if [ -f $OLDBINPIDFILE -a -f $PIDFILE ]; then
start-stop-daemon --stop --signal QUIT --quiet --pidfile $OLDBINPIDFILE --name $NAME
RETVAL="$?"
else
echo $"Upgrade failed!"
RETVAL=1
return $RETVAL
fi
}
case "$1" in
start)
[ "$VERBOSE" != no ] && log_daemon_msg "Starting $DESC " "$NAME"
do_start
case "$?" in
0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;;
2) [ "$VERBOSE" != no ] && log_end_msg 1 ;;
esac
;;
stop)
[ "$VERBOSE" != no ] && log_daemon_msg "Stopping $DESC" "$NAME"
do_stop
case "$?" in
0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;;
2) [ "$VERBOSE" != no ] && log_end_msg 1 ;;
esac
;;
status)
status_of_proc "$DAEMON" "$NAME" && exit 0 || exit $?
;;
configtest)
do_configtest
;;
upgrade)
do_upgrade
;;
reload|force-reload)
log_daemon_msg "Reloading $DESC" "$NAME"
do_reload
log_end_msg $?
;;
restart|force-reload)
log_daemon_msg "Restarting $DESC" "$NAME"
do_configtest -q || exit $RETVAL
do_stop
case "$?" in
0|1)
do_start
case "$?" in
0) log_end_msg 0 ;;
1) log_end_msg 1 ;; # Old process is still running
*) log_end_msg 1 ;; # Failed to start
esac
;;
*)
# Failed to stop
log_end_msg 1
;;
esac
;;
*)
echo "Usage: $SCRIPTNAME startstop|status|restart|reload|force-reload|upgrade|configtest" >&2
exit 3
;;
esac
exit $RETVAL
第三步,安装phpvirtualbox 。 解压phpvirtualbox 到 Web网站目录。
unzip phpvirtualbox-5.0-5.zip
mv phpvirtualbox-5.0-5 /usr/local/nginx/html/phpvirtualbox
vim /usr/local/nginx/conf/vhost/vbox.conf
server
{
listen 80;
server_name localhost;
index index.html index.htm index.php;
root /usr/local/nginx/html/phpvirtualbox;
location ~ \.php$ {
include fastcgi_params;
fastcgi_pass unix:/tmp/php-fcgi.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /usr/local/nginx/html/phpvirtualbox$fastcgi_script_name;
}
}
第四步,将config.php-example 重命名为 config.php
cp /usr/local/nginx/html/phpvirtualbox/config.php-example /usr/local/nginx/html/phpvirtualbox/config.php
首先,创建一个名为vbox的系统用户,并将其添加到vboxusers组中:
groupadd vboxusers
useradd -m vbox -G vboxusers
创建vbox用户的密码:
passwd vbox
假设你设置的密码为vbox
创建文件/ etc / default / virtualbox并将其中的VBOXWEB_USER = vbox放在其中(以便使用称为vboxwebsrv的VirtualBox SOAP API 作为用户vbox运行):
nano / etc / default / virtualbox
VBOXWEB_USER = vbox
接下来创建vboxwebsrv的系统启动链接并启动它:
systemctl enable vboxweb-service
systemctl start vboxweb-service
打开config.php
var $username = 'vbox';
var $password = 'vobx';
$language='en' 更改为 $language='zh_CN'
其余保持默认。若你不想使用系统用户名及验证,请将var $noAuth = true 打开
配置Phpvirtualbox截图
第五步 安装phpVirtualBox
VBoxWebSrv
然后你打开 Web网站就可以看到管理页面了,帐号和密码初始都是 admin
VirtualBox虚拟机消失的解决方法
问题出现:今天早晨机房断电后,发现使用很久的WinXP虚拟机没有了。
1. Ubuntu安装的软件都会在/usr/share/applications文件夹下面生成快捷方式;
2. 我注意到以前安装VBox用某种方式更改了其快捷方式的属性,使得每次点击启动器里的VBox图标都是以root权限打开应用程序,现在却是直接打开,是普通用户权限,会不会与这个有关系?
3. 现在尝试更改VBox快捷方式的属性,要使得其以root权限执行,可以在图标上右键->基本->命令,此栏上最前加上“gksudo ”(无引号),即可以赋予其root权限;
4. 但是我进Ubuntu系统就是普通用户,不具有超级用户权限,无法直接对除了本用户目录以外的其他路径下的文件及其属性进行修改,因此我即使操作了步骤3,重新查看属性会发现没有任何更改;
5. 想到Ubuntu下的所谓快捷方式(此称呼也是参考Windows的)也是一种软链接文件,可以用文本编辑器对其进行编辑;于是我先在终端下执行命令“sudo gedit ”,然后再通过Gedit打开/usr/share/applications/virtualbox.desktop,找到“Exec=VirtualBox %U”这一行,修改为“Exec=gksudo VirtualBox %U”,保存;
6. 重新查看VBox快捷方式的属性,发现其命令那一行已经变成“Exec=gksudo VirtualBox %U”了;再次点击VBox图标,会弹出输入密码的对话框,输入root密码后,可以看到以前的WinXP虚拟机重新出现啦!
总结:这个问题其实不是一个“问题”,关键是要清楚使用哪个用户执行应用程序,在VBox中,如果是用普通用户登录,会在该用户文件夹下创建虚拟机,如果是用root用户登录,则会在root用户文件夹下创建虚拟机。因为VBox需要访问一些底层的设备,例如挂载U盘,给它较高的权限能保证其运行起来没有任何问题。
Linux VirtualBox启用VRDE远程桌面扩展
请参考推荐阅读,我已经大体介绍了如何在Linux Host通过命令行安装VM以及VM的OS。现在介绍一下更通用的办法,即启用VRDE远程桌面服务。这样,我们就通过windows或者Linux上的远程桌面客户端,去链接VM了。
1.下载和安装VRDE扩展
VRDE扩展,需要单独从virtualbox官网:https://www.virtualbox.org下载,即下载这个页面上的Oracle VM VirtualBox Extension Pack
安装
wget http://download.virtualbox.org/virtualbox/5.0.34/Oracle_VM_VirtualBox_Extension_Pack-5.0.34-113845.vbox-extpack
vboxmanage extpack install Oracle_VM_VirtualBox_Extension_Pack-5.0.34-113845.vbox-extpack
2.配置vm启用vrde
vboxmanage modifyvm zabbix_server --vrde on #启用 zabbix_server虚拟机上的vrde
vboxmanage modifyvm zabbix_server --vrdeport 8889 #绑定到的host端口上
3.启动VM并连接
VBoxHeadless --startvm zabbix_server --vrde=on #启动虚拟机时,打开vrde扩展。
之后,在其他的机器上,可以通过Windows或者Linux的远程桌面,链接 x.y.z.w:8889上的远程桌面服务,其中x.y.z.w是Host的IP地址。
注意:
这里的配置,没有启用vrde的验证,所以安全性会存在问题,推荐在内网使用。
尽可能地尽可能地使VirtualBox GUI类似,使其尽可能简单。如果您在服务器中运行VirtualBox(如教程中的VBoxHeadless - 在Ubuntu 16.04 LTS服务器上运行VirtualBox 5.1运行虚拟机),则可以非常适合VirtualBox GUI 。
本教程介绍如何在Ubuntu 16.04服务器上安装phpVirtualBox来管理本地安装的VirtualBox。
大家都知道VMware是一个强大的虚拟管理系统,作为麻雀的VitrualBox也不赖。使用VitrualBox都知道,VitrualBox无法在后台运行,始终在任务栏。其实VitrualBox可以在后台运行,使用VRDP就可以在后台运行了。但这个我们不研究他在后台运行,我们研究他管理功能,深度挖潜他的功能。
作为PHPer 能不能通过Web方式管理VitrualBox,有人就会说 噢,这是多么大的工程。对,是一个大工程! Web管理虚拟机。说做就做!
第一步,下载并安装VirtualBox
这不是废话嘛,如果你是高手那就请跳过此步。 VirtualBox的下载地址:https://www.virtualbox.org/wiki/Downloads
安装virtualbox
cd /usr/local/src
wget http://download.virtualbox.org/virtualbox/5.0.34/virtualbox-5.0_5.0.34-113845~Ubuntu~xenial_amd64.deb
dpkg -i virtualbox-5.0_5.0.34-113845-Ubuntu-xenial_amd64.deb
第二步,下载phpvirtualbox,下载地址: https://sourceforge.net/projects/phpvirtualbox/或者http://code.google.com/p/phpvirtualbox/downloads/list 下载时请选择对应的版本
我的phpvirtualbox安装包:phpvirtualbox-5.0-5.zip
第三步,安装nginx 和 PHP
ubuntu16.04 源码编译 nginx1.10.3
1. 官方下载地址
下载对应的 nginx 版本并解压
cd /usr/local/src
wget http://nginx.org/download/nginx-1.10.3.tar.gz
tar zxvf nginx-1.10.3.tar.gz
2. 安装依赖包以及所需模块
sudo apt-get install libpcre3 libpcre3-dev
sudo apt-get install openssl libssl-dev
3. 编译安装
cd nginx-1.10.3
./configure --with-http_stub_status_module --with-http_ssl_module --with-http_realip_module --with-http_gzip_static_module
make && make install
4. 修改 nginx.conf 配置文件
user root;
worker_processes auto;
pid /usr/local/nginx/nginx.pid;
worker_rlimit_nofile 65535;
events
{
use epoll;
worker_connections 65535;
}
http
{
include mime.types;
default_type application/octet-stream;
charset utf-8;
server_names_hash_bucket_size 128;
client_header_buffer_size 32k;
large_client_header_buffers 4 32k;
client_max_body_size 8m;
sendfile on;
tcp_nopush on;
keepalive_timeout 600;
tcp_nodelay on;
open_file_cache max=10000 inactive=5m;
open_file_cache_valid 2m;
open_file_cache_min_uses 1;
open_file_cache_errors on;
#下载线程控制
# error_page 404 403 502 503 http://ggr.yxdown.com/redirect/youxihe.url?ip=$wanip\$document_uri;
# limit_req_zone $binary_remote_addr zone=one:3m rate=1r/s;
# limit_req_zone $binary_remote_addr $uri zone=two:3m rate=1r/s;
# limit_req_zone $binary_remote_addr $request_uri zone=three:3m rate=1r/s;
# limit_conn_zone $binary_remote_addr zone=limit_conn_one:10m;
include /usr/local/nginx/conf/proxy.conf;
include /usr/local/nginx/conf/gzip.conf;
include /usr/local/nginx/conf/vhost/*.conf;
}
5. 新建配置文件和虚拟目录
vim /usr/local/nginx/conf/proxy.conf
proxy_redirect off;
proxy_store on;
proxy_store_access user:rw group:rw all:rw;
#proxy_temp_path /dev/shm/proxy_temp_path;
#proxy_cache_path /dev/shm/proxy_cache_path levels=1:2 keys_zone=cache_one:100m inactive=30s max_size=300g;
proxy_connect_timeout 600;
proxy_read_timeout 600;
proxy_send_timeout 600;
#proxy_cache_lock on;
#proxy_cache_lock_timeout 300s;
proxy_buffer_size 32k;
proxy_buffers 4 128k;
proxy_busy_buffers_size 256k;
proxy_temp_file_write_size 512k;
proxy_set_header Host $host;
proxy_cache_valid 200 302 1h;
proxy_cache_valid 301 1d;
proxy_cache_valid any 1m;
vim /usr/local/nginx/conf/gzip.conf
gzip on;
gzip_proxied any;
gzip_types text/css;
gzip_types text/csv;
gzip_types text/plain;
gzip_types text/javascript;
gzip_types application/javascript;
gzip_types application/json;
gzip_types application/x-javascript;
gzip_types application/ecmascript;
gzip_types application/xml;
gzip_types application/xml+rss;
gzip_types application/rss+xml;
gzip_types application/atom_xml;
gzip_types application/xhtml+xml;
gzip_types application/x-font-ttf;
gzip_types application/x-font-opentype;
gzip_types application/vnd.ms-fontobject;
gzip_types image/svg+xml;
gzip_types image/x-icon;
gzip_types text/xml;
gzip_comp_level 3;
gzip_http_version 1.1;
gzip_vary on;
gzip_disable "MSIE [1-6]\.(?!.*SV1)";
gzip_buffers 16 8k;
gzip_min_length 20;
mkdir -p /usr/local/nginx/conf/vhost
ubuntu16.04 源码编译php5.5
添加依赖应用
apt-get -y install gcc libxml2-dev libssl-dev libbz2-dev libcurl4-openssl-dev libgdchart-gd2-noxpm-dev libgmp-dev libmcrypt-dev libreadline-dev libxslt-dev make
其中有两个坑:
Openssl库文件安装后不存在:
ln -s /usr/lib/x86_64-linux-gnu/libssl.so /usr/lib
Gmp库文件安装后不存在:
ln -s /usr/include/x86_64-linux-gnu/gmp.h /usr/include
这样个都是因为x86与x64所安装时库文件位置不一致所导致
编译PHP
cd /usr/local
tar xf php-5.5.38.tar.gz
cd /usr/local/php-5.5.38/
./configure --prefix=/usr/local/php \
--with-config-file-path=/usr/local/php/etc \
--enable-fpm --with-fpm-user=php-fpm --with-fpm-group=php-fpm \
--with-mysqli=mysqlnd --with-libxml-dir --with-gd \
--with-jpeg-dir --with-png-dir --with-freetype-dir \
--with-iconv-dir --with-zlib-dir --with-mcrypt \
--enable-soap --enable-gd-native-ttf --enable-ftp \
--enable-mbstring --enable-exif --disable-ipv6 \
--with-curl --enable-bcmath --enable-sockets --with-gd
make
make test
make install
cd /usr/local/php-5.5.38
为php提供配置文件:
# cp php.ini-production /etc/php.ini
为php-fpm提供Sysv init脚本,并将其添加至服务列表:
#cp sapi/fpm/init.d.php-fpm /etc/init.d/php-fpm
chmod +x /etc/init.d/php-fpm
chkconfig --add php-fpm
chkconfig php-fpm on
为php-fpm提供配置文件:
cp /usr/local/php-5.5.38/sapi/fpm/php-fpm.conf.in /usr/local/php/etc/php-fpm.conf
编辑php-fpm的配置文件:
# vim /usr/local/php/etc/php-fpm.conf
配置fpm的相关选项为你所需要的值,并启用pid文件(如下最后一行):
pm.max_children = 150
pm.start_servers = 8
pm.min_spare_servers = 5
pm.max_spare_servers = 10
pid = /usr/local/php/var/run/php-fpm.pid
接下来就可以启动php-fpm了:
service php-fpm start
使用如下命令来验正(如果此命令输出有中几个php-fpm进程就说明启动成功了):
# ps aux | grep php-fpm
php-fpm -t #### 检查下php-fpm配置是否有错误
[09-Feb-2017 20:38:22] NOTICE: configuration file /etc/php-fpm.conf test is successful
启动php-fpm
service php-fpm start
使用如下命令来验正(如果此命令输出有中几个php-fpm进程就说明启动成功了):
# ps aux | grep php-fpm
root 1368 0.0 0.1 196428 5188 ? Ss 20:23 0:00 php-fpm: master process (/usr/local/php/etc/php-fpm.conf)
nginx 1369 0.0 0.1 198512 4716 ? S 20:23 0:00 php-fpm: pool www
nginx 1370 0.0 0.1 198512 4716 ? S 20:23 0:00 php-fpm: pool www
nginx 1371 0.0 0.1 198512 4716 ? S 20:23 0:00 php-fpm: pool www
nginx 1372 0.0 0.1 198512 4716 ? S 20:23 0:00 php-fpm: pool www
nginx 1373 0.0 0.1 198512 4716 ? S 20:23 0:00 php-fpm: pool www
nginx 1374 0.0 0.1 198512 4716 ? S 20:23 0:00 php-fpm: pool www
nginx 1375 0.0 0.1 198512 4716 ? S 20:23 0:00 php-fpm: pool www
nginx 1376 0.0 0.1 198512 4716 ? S 20:23 0:00 php-fpm: pool www
root 1602 0.0 0.0 112660 964 pts/0 S+ 20:44 0:00 grep --color=auto php-fpm
整合nginx和php5
1、编辑/etc/nginx/nginx.conf,启用如下选项:
if (!-e $request_filename) {
rewrite ^(.*)$ /index.php$1 last;
}
location ~ .*\.php(\/.*)*$
{
set $path_info "";
set $real_script_name $fastcgi_script_name;
if ($fastcgi_script_name ~ "^(.+?\.php)(/.+)$") {
set $real_script_name $1;
set $path_info $2;
}
fastcgi_param SCRIPT_FILENAME $document_root$real_script_name;
fastcgi_param SCRIPT_NAME $real_script_name;
fastcgi_param PATH_INFO $path_info;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
include fastcgi.conf;
}
并在所支持的主页面格式中添加php格式的主页,类似如下:
location / {
root html;
index index.php index.html index.htm;
}
而后重新载入nginx的配置文件:
# service nginx reload
3、在/usr/html新建index.php的测试页面,测试php是否能正常工作:
# cat > /usr/local/nginx/html/index.php << EOF
<?php
phpinfo();
?>
接着就可以通过浏览器访问此测试页面了。
安装xcache,为php加速:
1、安装
tar xf xcache-3.2.0.tar.gz
cd xcache-3.2.0
/usr/local/php/bin/phpize
./configure --enable-xcache --with-php-config=/usr/local/php/bin/php-config
make && make install
安装结束时,会出现类似如下行:
Installing shared extensions: /usr/local/php-5.5.38/lib/php/extensions/no-debug-non-zts
2、编辑php.ini,整合php和xcache:
首先将xcache提供的样例配置导入php.ini
mkdir /etc/php.d
cp xcache.ini /etc/php.d
说明:xcache.ini文件在xcache的源码目录中。
接下来编辑/etc/php.d/xcache.ini,找到zend_extension开头的行,修改为如下行:
extension = /usr/local/php/lib/php/extensions/no-debug-non-zts-20121212/xcache.so
注意:如果php.ini文件中有多条zend_extension指令行,要确保此新增的行排在第一位。
3、重新启动php-fpm
# service php-fpm restart
/etc/init.d/nginx start
查看php-fpm端口
netstat -lntup | grep php-fpm
tcp 0 0 127.0.0.1:9000 0.0.0.0:* LISTEN 2458/php-fpm: mast
php结合nginx
编辑/etc/nginx/nginx.conf
vim etc/nginx/nginx.conf修改后的范例如下:
server {
listen 80;
server_name localhost;
charset utf-8;
root html;
index index.php index.html index.htm;
if (!-e $request_filename) {
rewrite ^(.*)$ /index.php$1 last;
}
location ~ .*\.php(\/.*)*$
{
set $path_info "";
set $real_script_name $fastcgi_script_name;
if ($fastcgi_script_name ~ "^(.+?\.php)(/.+)$") {
set $real_script_name $1;
set $path_info $2;
}
fastcgi_param SCRIPT_FILENAME $document_root$real_script_name;
fastcgi_param SCRIPT_NAME $real_script_name;
fastcgi_param PATH_INFO $path_info;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
include fastcgi.conf;
}
配置网站默认页
vim /etc/nginx/html/index.php
<?php
phpinfo();
?>
检查nginx配置
nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
重载nginx
nginx -s reload
6.nginx 启动脚本
cat /etc/init.d/nginx
#!/bin/sh
### BEGIN INIT INFO
# Provides: nginx
# Required-Start: $network $remote_fs $local_fs
# Required-Stop: $network $remote_fs $local_fs
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Stop/start nginx
### END INIT INFO
# Author: Sergey Budnevitch <sb@nginx.com>
PATH=/sbin:/usr/sbin:/bin:/usr/bin
DESC=nginx
NAME=nginx
nginxDIR=/usr/local/nginx
CONFFILE=$nginxDIR/conf/nginx.conf
DAEMON=$nginxDIR/sbin/nginx
PIDFILE=$nginxDIR/$NAME.pid
SCRIPTNAME=/etc/init.d/$NAME
[ -x $DAEMON ] || exit 0
[ -r /etc/default/$NAME ] && . /etc/default/$NAME
DAEMON_ARGS=" $DAEMON_ARGS"
. /lib/init/vars.sh
. /lib/lsb/init-functions
do_start()
{
start-stop-daemon --start --quiet --pidfile $PIDFILE --exec $DAEMON -- $DAEMON_ARGS
RETVAL="$?"
return "$RETVAL"
}
do_stop()
{
# Return
# 0 if daemon has been stopped
# 1 if daemon was already stopped
# 2 if daemon could not be stopped
# other if a failure occurred
start-stop-daemon --stop --quiet --retry=TERM/30/KILL/5 --pidfile $PIDFILE --name $NAME
RETVAL="$?"
rm -f $PIDFILE
return "$RETVAL"
}
do_reload() {
#
start-stop-daemon --stop --signal HUP --quiet --pidfile $PIDFILE --name $NAME
RETVAL="$?"
return "$RETVAL"
}
do_configtest() {
if [ "$#" -ne 0 ]; then
case "$1" in
-q)
FLAG=$1
;;
*)
;;
esac
shift
fi
$DAEMON -t $FLAG
RETVAL="$?"
return $RETVAL
}
do_upgrade() {
OLDBINPIDFILE=$PIDFILE.oldbin
do_configtest -q || return 6
start-stop-daemon --stop --signal USR2 --quiet --pidfile $PIDFILE --name $NAME
RETVAL="$?"
sleep 1
if [ -f $OLDBINPIDFILE -a -f $PIDFILE ]; then
start-stop-daemon --stop --signal QUIT --quiet --pidfile $OLDBINPIDFILE --name $NAME
RETVAL="$?"
else
echo $"Upgrade failed!"
RETVAL=1
return $RETVAL
fi
}
case "$1" in
start)
[ "$VERBOSE" != no ] && log_daemon_msg "Starting $DESC " "$NAME"
do_start
case "$?" in
0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;;
2) [ "$VERBOSE" != no ] && log_end_msg 1 ;;
esac
;;
stop)
[ "$VERBOSE" != no ] && log_daemon_msg "Stopping $DESC" "$NAME"
do_stop
case "$?" in
0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;;
2) [ "$VERBOSE" != no ] && log_end_msg 1 ;;
esac
;;
status)
status_of_proc "$DAEMON" "$NAME" && exit 0 || exit $?
;;
configtest)
do_configtest
;;
upgrade)
do_upgrade
;;
reload|force-reload)
log_daemon_msg "Reloading $DESC" "$NAME"
do_reload
log_end_msg $?
;;
restart|force-reload)
log_daemon_msg "Restarting $DESC" "$NAME"
do_configtest -q || exit $RETVAL
do_stop
case "$?" in
0|1)
do_start
case "$?" in
0) log_end_msg 0 ;;
1) log_end_msg 1 ;; # Old process is still running
*) log_end_msg 1 ;; # Failed to start
esac
;;
*)
# Failed to stop
log_end_msg 1
;;
esac
;;
*)
echo "Usage: $SCRIPTNAME startstop|status|restart|reload|force-reload|upgrade|configtest" >&2
exit 3
;;
esac
exit $RETVAL
第三步,安装phpvirtualbox 。 解压phpvirtualbox 到 Web网站目录。
unzip phpvirtualbox-5.0-5.zip
mv phpvirtualbox-5.0-5 /usr/local/nginx/html/phpvirtualbox
vim /usr/local/nginx/conf/vhost/vbox.conf
server
{
listen 80;
server_name localhost;
index index.html index.htm index.php;
root /usr/local/nginx/html/phpvirtualbox;
location ~ \.php$ {
include fastcgi_params;
fastcgi_pass unix:/tmp/php-fcgi.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /usr/local/nginx/html/phpvirtualbox$fastcgi_script_name;
}
}
第四步,将config.php-example 重命名为 config.php
cp /usr/local/nginx/html/phpvirtualbox/config.php-example /usr/local/nginx/html/phpvirtualbox/config.php
首先,创建一个名为vbox的系统用户,并将其添加到vboxusers组中:
groupadd vboxusers
useradd -m vbox -G vboxusers
创建vbox用户的密码:
passwd vbox
假设你设置的密码为vbox
创建文件/ etc / default / virtualbox并将其中的VBOXWEB_USER = vbox放在其中(以便使用称为vboxwebsrv的VirtualBox SOAP API 作为用户vbox运行):
nano / etc / default / virtualbox
VBOXWEB_USER = vbox
接下来创建vboxwebsrv的系统启动链接并启动它:
systemctl enable vboxweb-service
systemctl start vboxweb-service
打开config.php
var $username = 'vbox';
var $password = 'vobx';
$language='en' 更改为 $language='zh_CN'
其余保持默认。若你不想使用系统用户名及验证,请将var $noAuth = true 打开
配置Phpvirtualbox截图
第五步 安装phpVirtualBox
VBoxWebSrv
然后你打开 Web网站就可以看到管理页面了,帐号和密码初始都是 admin
VirtualBox虚拟机消失的解决方法
问题出现:今天早晨机房断电后,发现使用很久的WinXP虚拟机没有了。
1. Ubuntu安装的软件都会在/usr/share/applications文件夹下面生成快捷方式;
2. 我注意到以前安装VBox用某种方式更改了其快捷方式的属性,使得每次点击启动器里的VBox图标都是以root权限打开应用程序,现在却是直接打开,是普通用户权限,会不会与这个有关系?
3. 现在尝试更改VBox快捷方式的属性,要使得其以root权限执行,可以在图标上右键->基本->命令,此栏上最前加上“gksudo ”(无引号),即可以赋予其root权限;
4. 但是我进Ubuntu系统就是普通用户,不具有超级用户权限,无法直接对除了本用户目录以外的其他路径下的文件及其属性进行修改,因此我即使操作了步骤3,重新查看属性会发现没有任何更改;
5. 想到Ubuntu下的所谓快捷方式(此称呼也是参考Windows的)也是一种软链接文件,可以用文本编辑器对其进行编辑;于是我先在终端下执行命令“sudo gedit ”,然后再通过Gedit打开/usr/share/applications/virtualbox.desktop,找到“Exec=VirtualBox %U”这一行,修改为“Exec=gksudo VirtualBox %U”,保存;
6. 重新查看VBox快捷方式的属性,发现其命令那一行已经变成“Exec=gksudo VirtualBox %U”了;再次点击VBox图标,会弹出输入密码的对话框,输入root密码后,可以看到以前的WinXP虚拟机重新出现啦!
总结:这个问题其实不是一个“问题”,关键是要清楚使用哪个用户执行应用程序,在VBox中,如果是用普通用户登录,会在该用户文件夹下创建虚拟机,如果是用root用户登录,则会在root用户文件夹下创建虚拟机。因为VBox需要访问一些底层的设备,例如挂载U盘,给它较高的权限能保证其运行起来没有任何问题。
Linux VirtualBox启用VRDE远程桌面扩展
请参考推荐阅读,我已经大体介绍了如何在Linux Host通过命令行安装VM以及VM的OS。现在介绍一下更通用的办法,即启用VRDE远程桌面服务。这样,我们就通过windows或者Linux上的远程桌面客户端,去链接VM了。
1.下载和安装VRDE扩展
VRDE扩展,需要单独从virtualbox官网:https://www.virtualbox.org下载,即下载这个页面上的Oracle VM VirtualBox Extension Pack
安装
wget http://download.virtualbox.org/virtualbox/5.0.34/Oracle_VM_VirtualBox_Extension_Pack-5.0.34-113845.vbox-extpack
vboxmanage extpack install Oracle_VM_VirtualBox_Extension_Pack-5.0.34-113845.vbox-extpack
2.配置vm启用vrde
vboxmanage modifyvm zabbix_server --vrde on #启用 zabbix_server虚拟机上的vrde
vboxmanage modifyvm zabbix_server --vrdeport 8889 #绑定到的host端口上
3.启动VM并连接
VBoxHeadless --startvm zabbix_server --vrde=on #启动虚拟机时,打开vrde扩展。
之后,在其他的机器上,可以通过Windows或者Linux的远程桌面,链接 x.y.z.w:8889上的远程桌面服务,其中x.y.z.w是Host的IP地址。
注意:
这里的配置,没有启用vrde的验证,所以安全性会存在问题,推荐在内网使用。