如何在Ubuntu中创建Apache virtualHostvirtualbox虚拟机联网

Ubuntu配置Apache虚拟主机 - Francis_Soung - 博客园
启用与停用站点的方法
a2ensite 站点名
a2dissite 站点名
基于名字的(通过域名来区分)的虚拟主机
安装好apache以后默认有一个叫default的虚拟主机。新建虚拟主机时可以直接复制默认虚拟主机的配置文件,在其基础上修改新虚拟主机的配置参数。
#copy /etc/apache2/site-available/default /etc/apache2/site-available/sitename
操作系统:Ubuntu Server 12.04 LTS
测试机地址:10.39.6.59
测试机域名:*.
我们都知道,如果我们想在单台机器上设置多个域名或主机名时,我们就要用到基于名称的虚拟主机了。那么要如何进行设置呢?这就是本文章想解决的问题了。在 Ubuntu 的 /etc/apache2/ 目录下有个 Apache2 的主配置文件 apache2.conf。在该文件中我们可以看到下列字段:
# Include the virtual host configurations:
Include /etc/apache2/sites-enabled/[^.#]*(12.04版本里无[^.#]*)
这行的意思表明该文件包含了 /etc/apache2/sites-enabled/ 目录中文件名不含 "." 或 "#" 这两个字符的所有文件。而当我们列出该目录的文件时,发现只有一个 000-default 的软链接文件,实际连接的是 /etc/apache2/sites-available 目录中的 default 文件,不难看出该文件的文件名中并不包含 "." 或 "#"。所以这个文件当然是要被配置文件 apache2.conf 所包含的了。打开该文件,发现它其实是一个虚拟主机的配置文件,不过由于该文件中的虚拟主机为 *,所以它实际上是一个通用配置文件。如果我们要建立虚拟主机的话,那么就要把该文件改成如下所示:
&VirtualHost *:80&
ServerName
ServerAdmin admin@
DocumentRoot /var/www/
&Directory /&
Options FollowSymLinks
AllowOverride None
&/Directory&
&Directory /var/www/&
Options Indexes FollowSymLinks MultiViews
AllowOverride None
Order allow,deny
Allow from all
# This directive allows us to have apache2's default start page
# in /apache2-default/, but still have / go to the right place
# Commented out for Ubuntu
#RedirectMatch ^/$ /apache2-default/
&/Directory&
ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
&Directory "/usr/lib/cgi-bin"&
AllowOverride None
Options ExecCGI -MultiViews +SymLinksIfOwnerMatch
Order allow,deny
Allow from all
&/Directory&
ErrorLog /var/log/apache2/error.log
# Possible values include: debug, info, notice, warn, error, crit,
# alert, emerg.
LogLevel warn
CustomLog /var/log/apache2/access.log combined
ServerSignature On
Alias /doc/ "/usr/share/doc/"
&Directory "/usr/share/doc/"&
Options Indexes MultiViews FollowSymLinks
AllowOverride None
Order deny,allow
Deny from all
Allow from 127.0.0.0/255.0.0.0 ::1/128
&/Directory&
&/VirtualHost&
下面我们来分析一下上面这段设置中与虚拟主机有关的设置语句:
`NameVirtualHost&:80`:表示我们要做的是一个基于名称的虚拟主机,监听的端口为80.
`&VirtualHost *:80& 和 &/VirtualHost&`:表示在其中的是一个虚拟主机的配置。注意如果上面的字段指定了端口号,这里也要指定
`ServerName `:设置虚拟主机的域名
`ServerAdmin admin@`:设置该虚拟主机网管员的邮件
`DocumentRoot /var/www/`:设置该虚拟主机的主目录路径
`ErrorLog /var/log/apache2/error.log`:设置该虚拟主机的出错信息
`CustomLog /var/log/apache2/access.log combined`:设置该虚拟主机的访问信息
这样我们就配置了一个虚拟主机 。但由于这是缺省配置,所以在 Apache2 重启之后,无论你输入 DNS 服务器中指向这个主机的任何域名,都会被导向
这个缺省配置所指向的 /var/www 这个目录的。除非该域名被其他虚拟主机配置所用,比如我们还配置了
指向本机,且配置了相应的虚拟主机,这样的话,输入域名
就会被对应该域名的目录中。
进一步说明
为了说明清楚 我们再添加一个虚拟主机站点 ,首先到 /etc/apache2/sites-available/ 目录中建立一个文件 edunuke,编辑该文件:
&VirtualHost *:80&
ServerName
ServerAdmin edunuke@
DocumentRoot "/var/www/edunuke/"
ErrorLog "/var/log/apache2/edunuke_errors.log"
CustomLog "/var/log/apache2/edunuke_accesses.log" common
&/VirtualHost&
设置的具体含义同上面的相似,这是我就不再多说了。然后再运行命令:
sudo a2ensite edunuke
注:我这里会提示重新加载配置,按照提示信息执行即可使配置文件生效(经过本人测试,使用重启apache的方式没有成功加载配置文件):
这样的话,虚拟主机站点
就已经安装好了。这时你也可以在 /etc/apache2/sites-enabled/ 目录中发现多了一个到 /etc/apache2/sites-available/edunuke 的软链接。接下来就是将 Apache2 重启来使虚拟主机站点运行起来:
sudo /etc/init.d/apache2 restart
这样你在浏览器上输入
的话,就会被指向 /var/www/edunuke 目录了,而输入其他指向本机的域名则都会指到缺省配置中的 /var/www 目录中。熟悉 Apache2 的朋友会问为什么这样麻烦,放在一个文件中不也是可以吗?为什么要用两个文件呢?其实很简单,因为如果我要对 edunuke 站点进行维护时,我只要运行命令:
sudo a2dissite edunuke
sudo /etc/init.d/apache2 restart
即可,这样既可以维护 edunuke 这个站点,同时还不影响其他站点的正常运行。
上面谈了一下简单的虚拟主机配置方法。这个基本上能满足我们大部分的需要。但如果要是安装 Zope+Plone 的话,上面的这点设置是远远不够的,由于 Zope+Plone 结构所采用的端口并非是80端口,所以我们还得做端口重定向。为了能够做这个,我们得激活 Rewrite 和 Proxy 两个模块。激活模块很简单,同站点配置目录一样,在 Apache2 中也有两个模块配置目录:mods-available 和 mods-enabled。在 mods-available 目录中的是所有可用的模块,而在 mods-enabled 目录中的则是已被安装到 Apache2 中的模块。由于在 mods-available 目录中已经有了 Rewrite 和 Proxy 模块的配置引导文件,所以只需要简单地将其安装到 Apache2 中即可。使用命令:
sudo a2enmod rewrite
sudo a2enmod proxy
然后,添加虚拟主机站点 ,同 edunuke 站点创建相似在/etc/apache2/sites-available/ 目录中建立一个文件 plone。显然这个文件名中是没有 "." 或 "#" 这两个字符的了。然后编辑该文件:
&VirtualHost :80&
ServerName
ServerAdmin francis@
ErrorLog "/var/log/apache2/plone_errors.log"
CustomLog "/var/log/apache2/plone_accesses.log" common
RewriteEngine on
RewriteRule ^/(.*) http://127.0.0.1:8081/VirtualHostBase/http/:80/plone/VirtualHostRoot/$1 [L,P]
Order Deny,Allow
Deny from all
Allow from all
&/VirtualHost&
这样就安装好了
虚拟主机站点,可以在浏览器中地址栏中输入&&就可以重定向到站点去了。中国领先的IT技术网站
51CTO旗下网站
Ubuntu下如何配置Apache虚拟主机?
如果我们想在单台机器上设置多个域名或主机名时,我们就要用到基于名称的虚拟主机了。那么要如何进行设置呢?本文就是介绍了在Ubuntu下配置Apache的虚拟主机的方法。
作者:佚名来源:博客转载| 15:16
在Ubuntu下如何配置Apache的虚拟主机呢?下文给出了详细的解释,具体内容如下所述。
我们都知道,如果我们想在单台机器上设置多个域名或主机名时,我们就要用到基于名称的虚拟主机了。那么要如何进行设置呢?这就是本指南想解决的问题了。在Ubuntu的/etc/apache2/目录下有个Apache2的主配置文件apache2.conf。在该文件中我们可以看到有这么一行内容:
Include/etc/apache2/sites-enabled/[^.#]*
这行的意思表明该文件包含了/etc/apache2/sites-enabled/目录中文件名不含&.&或&#&这两个字符的所有文件。而当我们列出该目录的文件时,发现只有一个000-default的软链接文件,实际连接的是/etc/apache2/sites-available目录中的default文件,不难看出该文件的文件名中并不包含&.&或&#&。所以这个文件当然是要被配置文件apache2.conf所包含的了。打开该文件,发现它其实是一个虚拟主机的配置文件,不过由于该文件中的虚拟主机为*,所以它实际上是一个通用配置文件。如果我们要建立虚拟主机的话,那么就要把该文件改成如下所示:
NameVirtualHost10.39.6.59 &&[VirtualHost10.39.6.59] &&ServerNamewww.britepic.org &&&] &&DocumentRoot/var/www/ &&[Directory/] &&OptionsFollowSymLinks &&AllowOverrideNone &&[/Directory] &&[Directory/var/www/] &&OptionsIndexesFollowSymLinksMultiViews &&AllowOverrideNone &&Orderallow,deny &&allowfromall &&#Thisdirectiveallowsustohaveapache2'sdefaultstartpage &&#in/apache2-default/,butstillhave/gototherightplace &&#CommentedoutforUbuntu &&#RedirectMatch^/$/apache2-default/ &&[/Directory] &&ScriptAlias/CGI-bin//usr/lib/cgi-bin/ &&[Directory&/usr/lib/cgi-bin&] &&AllowOverrideNone &&OptionsExecCGI-MultiViews+SymLinksIfOwnerMatch &&Orderallow,deny &&Allowfromall &&[/Directory] &&ErrorLog/var/log/apache2/error.log &&#Possiblevaluesinclude:debug,info,notice,warn,error,crit, &&#alert,emerg. &&LogLevelwarn &&CustomLog/var/log/apache2/Access.logcombined &&ServerSignatureOn &&Alias/doc/&/usr/share/doc/& &&[Directory&/usr/share/doc/&] &&OptionsIndexesMultiViewsFollowSymLinks &&AllowOverrideNone &&Orderdeny,allow &&Denyfromall &&Allowfrom127.0.0.0/255.0.0.0::1/128 &&[/Directory] &&[/VirtualHost] &&
下面我们来分析一下上面这段设置中与虚拟主机有关的设置语句:
`NameVirtualHost10.39.6.59`:表示我们要做的是一个基于名称的虚拟主机,且其IP地址为
10.39.6.59
`[VirtualHost10.39.6.59]和[/VirtualHost]`:表示在其中的是一个虚拟主机的配置
`ServerNamewww.britepic.org`:设置虚拟主机的域名
``:设置该虚拟主机网管员的邮件
`DocumentRoot/var/www/`:设置该虚拟主机的主目录路径
`ErrorLog/var/log/apache2/error.log`:设置该虚拟主机的出错信息
`CustomLog/var/log/apache2/access.logcombined`:设置该虚拟主机的访问信息
这样我们就配置了一个虚拟主机www.britepic.org。但由于这是缺省配置,所以在Apache2重启
之后,无论你输入DNS服务器中指向这个主机的任何域名,都会被导向www.britepic.org这个
缺省配置所指向的/var/www这个目录的。除非该域名被其他虚拟主机配置所用,比如我们还配置
了edunuke.britepic.org指向本机,且配置了相应的虚拟主机,这样的话,输入域名
edunuke.britepic.org就会被对应该域名的目录中。
B进一步说明
为了说明清楚我们再添加一个虚拟主机站点edunuke.britepic.org,首先到/etc/apache2/sites-available/目录中建立一个文件edunuke。当然这个文件名中是没有&.&
或&#&这两个字符的了。然后编辑该文件:
[VirtualHost10.39.6.59] &&ServerNameedunuke.britepic.org &&ServerAdminUbuntu@britepic.org &&DocumentRoot&/var/www/edunuke/& &&ErrorLog&/var/log/apache2/edunuke_errors.log& &&CustomLog&/var/log/apache2/edunuke_Accesses.log&common &&[/VirtualHost] &&
设置的具体含义同上面的相似,这是我就不再多说了。然后再运行命令:
sudoa2ensiteedunuke
这样的话,虚拟主机站点edunuke.britepic.org就已经安装好了。这时你也可以在
/etc/apache2/sites-enabled/目录中发现多了一个到/etc/apache2/sites-available/edun&
的软链接。接下来就是将Apache2重启来使虚拟主机站点运行起来:
sudo/etc/init.d/apache2restart
这样你在浏览器上输入edunuke.britepic.org的话,就会被指向/var/www/edunuke目录了,而输入其他指向本机的域名则都会指到缺省配置中的/var/www目录中。熟悉Apache2的朋友会问为什么这样麻烦,放在一个文件中不也是可以吗?为什么要用两个文件呢?
其实很简单,因为如果我要对edunuke站点进行维护时,我只要运行命令:
sudoa2dissiteedunuke &&sudo/etc/init.d/apache2restart &&
即可,这样既可以维护edunuke这个站点,同时还不影响其他站点的正常运行。
希望本文介绍的在Ubuntu下配置Apache虚拟主机的方法能够对读者有所帮助,更多还有待于读者去探索和学习。
【编辑推荐】
【责任编辑: TEL:(010)】
大家都在看猜你喜欢
头条头条热点头条热点
24H热文一周话题本月最赞
讲师:153655人学习过
讲师:133572人学习过
讲师:251982人学习过
精选博文论坛热帖下载排行
本书是以一个典型的计算机广域网通信为背景进行编写的,详细、全面地介绍了通信网中最主要的两个部分:目前,国内外接入网与交换网的主要技...
订阅51CTO邮刊django部署详细版教程(ubuntu+apache2+virtualenv) - 简书
django部署详细版教程(ubuntu+apache2+virtualenv)
在经历了无数的大坑后,终于按照网上一个比较简单的教程把自己的Blog做好了。后来在部署的时候又发现了无数的坑,于是有了这篇django部署教程,希望看到这篇教程的同学能少入坑,顺顺利利的部署成功自己的Blog。
希望同学们能认认真真看完此教程,我会尽我所能把每一步都讲的明白(虽然我也是个小白),下面让我们开始这坑爹而又有趣的部署之旅吧:
一、前提和环境
首先,本教程是假设你已经有了一个django项目且能在本机正常运行的外加一个可以正常使用的ubuntu。其次你可以不懂linux,因为照着教程走,不会有太大的问题,但最好有一点python和django基础。
python 3.4 (一般ubuntu自带py2和py3)
ubuntu-14.10-desktop、ubuntu-14.04-server(可以在win7下使用虚拟机)
django 1.7.1
apache 2.4.7
坑一:务必保持你的开发环境和我上述三个一样,否则可能会出现莫名其妙的问题,这是一个大坑。
virtualenv和django配置
1、首先ctrl+alt+t进入终端,然后我们安装python3-pip,pip类似ubuntu的apt-get可以方便的安装各种python库:
sudo apt-get install python3-pip
坑二:ubuntu默认安装py2和py3,终端输入“python”是py2环境,输入“python3”是py3环境。在ubuntu中如果想使用py3的pip请使用:“pip3”命令。“pip”命令为py2的,这点请注意。
2、安装python的虚拟环境virtualenv,virtualenv是一个可以虚拟多个python环境的东东,比如我的a网站是py2+django1.7开发,b网站是py3+django1.8开发。他们两个想共存于一台电脑上就要用到这个东东:
sudo pip3 install virtualenv
3、创建虚拟环境,此命令会创建一个名为venv的文件夹,位置就在你终端所显示的位置,里面包含了一个python环境。可以把它理解成类似与windows上的一个虚拟机系统,只不过他只是python的。
virtualenv venv
4、激活虚拟环境,相当于开启虚拟机系统,激活后,在这个激活的终端内执行的任何python命令都不会影响真实环境。注意如果你现在没有在venv的上级目录下,下面的命令是会报错的。可以用source后面跟完整的venv的路径。
source venv/bin/activate
5、安装django,到这里,就离最终成功迈出了关键的一步了,终于开始安装我们的主角django了,这里我安装的版本是1.7.1,安装前请再次确认你所开发的或者下载别人的django网站的版本和你安装的保持一致。
pip install -v django==1.7.1
小知识:在这里,我们使用pip而不是pip3的原因是虚拟环境里只有py3的存在,所以我们输入“python”和“pip”所关联的都会是py3的。你可以自己实验下在虚拟环境中输入是不会报错的,而在真实的环境里则会是显示py2。
6、安装所必须的python包,这里请根据你自己所开发的网站需要的包用“pip”进行安装,下面命令是我的blog所需要用到的包:
pip install django-ckeditor
pip install django-haystack
pip install whoosh
pip install jieba
pip install django-pagination-py3==1.1.1
坑三:安装分页插件pagination的时候,如果你是py3,请使用pip install django-pagination-py3==1.1.1命令安装,网上很多文章针对的都是py2的,当你用网上的命令安装这个插件后,在py3下是不会有效果的。
7、安装git,因为我是在server上面部署的,没有图形界面,所以我用git来下载我开发好的网站去部署就需要用到git了。git部分这里不再讲解,原因很简单,因为博主也不是很会啊!其实只要会上传到github然后会下载下来对于此文章来说就够了。如果你不是用的server版那就直接复制粘贴就更方便啦。(复制粘贴的请无视7和8条)
sudo apt-get install git
8、下载所需要的网站,这里我给出一个我的blog的源码,当然这也只是我做实验用的,你完全可以下载下来去学习,修改它。前提是你明白这是一个十分简陋的博客,仅供开发学习使用。
git clone /juventusryp/test.git
坑四:如果你是新手刚开始学习django,下载下来后,请使用“mv test my_blog_2"更改文件夹名字,会省去你很多麻烦。
9、初始化数据库,删除根目录下的数据库文件:db.sqlite3和article目录下的migrations文件夹。命令是“sudo rm -rf”加文件名。
然后运行下面的命令初始化数据库:
python manage.py migrate
初始化完毕后,建立后台管理员:
python manage.py createsuperuser
10、至此,一个网站应该是可以正常浏览了,请使用“python manage.py runserver”测试看是否可以正常浏览,如果正常,那么恭喜你,下面再只需要几步,就可以把你的网站部署到服务器上让大家都看到了。
二、部署部分
1、进入ubuntu,安装apache2和mod_wsgi:
sudo apt-get install apache2 libapache2-mod-wsgi-py3
坑五:此处如果你是py2开发的话去掉上述命令最后的“-py3”,否则最好加上。
2、查看apache2版本:
apachectl -v
看看是否是2.4.7版本
3、新建一个网站,这里是创建一个网站的配置文件,具体不再阐述,请自行学习apache的相关文档。
sudo vim /etc/apache2/sites-available/sitename.conf
我的sitename.conf如下,此文件仅作参考,请自行修改里面的相关路径和网址:
&VirtualHost *:80&
# The ServerName directive sets the request scheme, hostname and port that
# the server uses to identify itself. This is used when creating
# redirection URLs. In the context of virtual hosts, the ServerName
# specifies what hostname must appear in the request's Host: header to
# match this virtual host. For the default virtual host (this file) this
# value is not decisive as it is used as a last resort host regardless.
# However, you must set it for any further virtual host explicitly.
#ServerName
ServerName localhost:80
ServerAdmin
Alias /media/ /home/user/my_blog_2/media/
Alias /static/ /home/user/my_blog_2/static/
&Directory /home/user/my_blog_2/media&
Require all granted
&/Directory&
&Directory /home/user/my_blog_2/static&
Require all granted
&/Directory&
WSGIDaemonProcess http://127.0.0.1:80 python-path=/home/user/my_blog_2:/home/user/venv/lib/python3.4/site-packages
WSGIProcessGroup http://127.0.0.1:80
WSGIScriptAlias / /home/user/my_blog_2/my_blog_2/wsgi.py
&Directory /home/ryp/my_blog_2/my_blog_2&
&Files wsgi.py&
Require all granted
&/Directory&
# Available loglevels: trace8, ..., trace1, debug, info, notice, warn,
# error, crit, alert, emerg.
# It is also possible to configure the loglevel for particular
# modules, e.g.
#LogLevel info ssl:warn
ErrorLog ${APACHE_LOG_DIR}/error-my_blog_2.log
CustomLog ${APACHE_LOG_DIR}/access-my_blog_2.log combined
# For most configuration files from conf-available/, which are
# enabled or disabled at a global level, it is possible to
# include a line for only one particular virtual host. For example the
# following line enables the CGI configuration for this host only
# after it has been globally disabled with "a2disconf".
#Include conf-available/serve-cgi-bin.conf
&/VirtualHost&
# vim: syntax=apache ts=4 sw=4 sts=4 sr noet
坑六; 如果在服务器上使用了虚拟环境,配置文档里加上下面三行应该才可以,这里网上很多文章都没有说清楚,当初坑了博主相当长时间。
WSGIDaemonProcess http://127.0.0.1:80 python-path=/home/user/my_blog_2:/home/user/venv/lib/python3.4/site-packages
WSGIProcessGroup http://127.0.0.1:80
WSGIScriptAlias / /home/user/my_blog_2/my_blog_2/wsgi.py
4、修改wsgi文件,我的路径就是/home/user/my_blog_2/my_blog_2/wsgi.py
请找到你的路径修改如下:
WSGI config for my_blog_2 project.
It exposes the WSGI callable as a module-level variable named ``application``.
For more information on this file, see
/en/1.7/howto/deployment/wsgi/
from os.path import join,dirname,abspath
PROJECT_DIR = dirname(dirname(abspath(__file__)))
import sys
sys.path.insert(0,PROJECT_DIR)
os.environ["DJANGO_SETTINGS_MODULE"] = "my_blog_2.settings"
from django.core.wsgi import get_wsgi_application
application = get_wsgi_application()
是不是已经有点看不下去了?不要急,到最后一步了,坚持一下。完成下面的,我们的部署坑之路就算走完了。
5、设置权限,linux下对权限很敏感,建议大家先对这块有所了解。博主就不是很懂,所以很多地方都是根据log来一步一步调试的。
在 Linux 服务器上,用户上传目录还要设置给 www-data 用户的写权限,下面的方法比较好,不影响原来的用户的编辑。
假如上传目录为 my_blog_2/media/uploads 文件夹,进入media文件夹,将 uploads 用户组改为www-data,并且赋予该组写权限:
sudo chgrp -R www-data uploads
sudo chmod -R g+w uploads
如果你使用的是sqlite3数据库,还会提示 Attempt to write a readonly database,同样要给www-data写数据库的权限
进入项目目录的上一级,比如project目录为 /home/user/my_blog_2, 那就进入 /home/user 执行下面的命令(和修改上传文件夹类似)
sudo chgrp www-data my_blog_2
sudo chmod g+w my_blog_2
sudo chgrp www-data my_blog_2/db.sqlite3
# 更改为你的数据库名称
sudo chmod g+w my_blog_2/db.sqlite3
坑七:如果你是用我的test的网站学习,应该还会有些小问题,比如在写好文章发布的时候会报错,那是因为有个插件的权限问题,请打开debug模式,修改那个插件所在文件夹的权限即可。
6、纳尼!不是说已经可以正常访问了吗,怎么还有!博主保证下面一定是最后一步
切换到目录:/etc/apache2/sites-available/ 运行:
sudo service apache2 reload
sudo a2dissite 000-default && sudo a2ensite sitename.conf
sudo service apache2 restart
如果一切顺利,你的网站就可以通过域名(当然前提是请解析到你的服务器)或者ip来访问了
PS:如果你有任何不懂的地方,欢迎给我留言,我会尽力解答。
其实博主也真的是个小白,希望能有更多的小白来一起交流python,交流django。

我要回帖

更多关于 virtualbox导入虚拟机 的文章

 

随机推荐