Ubuntu 16.04与Apache虚拟主机配置的步骤详解
<p><span><strong>前言</strong></span></p>
<p>
众所周知在window下,Apache的配置文件是httpd.conf,但在Linux下安装了Apache后发现其配置并不像window下那么简单,Linux下Apache将各个设置项分在了不同的配置文件中,想想也是有很大的理由的,这样子可以使用户在开发过程中自由的搭配其不同的功能模块,更好的提高效率,不过,如果不事先了解Apache,可能在配置时蒙圈。</p>
<p>
Ubuntu中Apache的配置文件是//etc/apache2/apache2.conf。Apache在启动时会找到这个文件并自动读取该文件中的配置信息,而其他配置文件则是通过include指令包含进来的,在apache2.conf 中可以看到这些引入行。当然,也可以将所有的配置全放在apache2.conf或者httpd.conf或者其他文件中,Apache这样划分是一种比较好的习惯。</p>
<p>
在Ubuntu中Web文档的根目录是在/var/www中,怎么知道的呢?在/etc/apache2/sites-enabled/000-default中有这样一段内容</p>
<div class="jb51code">
<div>
<div class="syntaxhighlighterbash" id="highlighter_891412">
<div class="toolbar">
<span>?</span>
</div>
<table border="0" cellpadding="0" cellspacing="0"><tbody><tr>
<td class="gutter">
<div class="line number1 index0 alt2">
1</div>
<div class="line number2 index1 alt1">
2</div>
<div class="line number3 index2 alt2">
3</div>
<div class="line number4 index3 alt1">
4</div>
</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2">
<code class="bash plain">NameVirtualHost *</code>
</div>
<div class="line number2 index1 alt1">
<code class="bash plain"><VirtualHost *></code>
</div>
<div class="line number3 index2 alt2">
<code class="bash plain">ServerAdmin webmaster@localhost</code>
</div>
<div class="line number4 index3 alt1">
<code class="bash plain">DocumentRoot </code><code class="bash plain">/var/www/</code>
</div>
</div>
</td>
</tr></tbody></table>
</div>
</div>
<div class="codetool" id="codetool">
<div class="code_n">
<textarea></textarea>
</div>
</div>
</div>
<p>
这是设置虚拟机的,当然,如果觉得没有用的,也可以将apache2.conf里的Include /etc/apache2/sites-enabled/一行注释掉,并在htttpd.conf中的DocumentRoot设置成某个项目的目录,这样可以方便开发。</p>
<p>
在/etc/apache2目录下,发现了sites-enabled目录,然而还有一个sites-available目录,那么这两个目录到底有什么作用呢?其实,sites-available这个目录包含Apache虚拟主机的配置文件。虚拟主机允许Apache配置多个站点并为每个站点配置不同的参数。而sites-enabled目录的作用是持有/etc/apache2/sites-available目录下文件的链接。当Apache重启后,该目录中包含的站点将会被激活。如果apache上配置了多个虚拟机,每个虚拟机的配置文件都放在sites-available下,那么对于虚拟主机的停用,启动就是非常方便了,操作某个虚拟主机就不用动配置文件了</p>
<p>
------- 我是美丽的分割线 -------</p>
<p>
在/etc/apache2下还用类似于sites-enabled和sites-available两个目录的mods-available和mods-enabled两个目录,那么这两个目录有何作用呢?其实类似于sites-enabled和sites-available,mods-available这个目录包含模块和模块配置文件,不是所有的模块都有配置文件。比如当apt-get install php5安装了php模块,在这两个目录中就有了php5.load、php5.conf和指向这两个文件的链接。这对于apache开启停用某个模块是非常方便的</p>
<p>
在/etc/apache2目录下,还有一个文件ports.conf,这个文件配置Apache监听的端口,如果觉得嫌弃它多余,可以先把apache2.conf中的Include /etc/apache2/ports.conf一行去掉,在httpd.conf里设置Apache端口。</p>
<p>
在Ubuntu缺省安装的目录有与其他相比有一点不同。在ubuntu中module和 virtual host的配置都有两个目录,一个是available,一个是enabled,available目录是存放有效的内容,但不起作用,只有用ln 连到enabled过去才可以起作用。这样子对于开发以及调试都很方便。</p>
<p>
------- 我是美丽的分割线 -------</p>
<p>
<strong>什么是虚拟主机(Virtual Hosting)</strong></p>
<p>
所谓虚拟主机,就是把一台运行在互联网上的服务器划分成多个“虚拟”的服务器,每一个虚拟主机都具有独立的域名和完整的Internet服务器(支持WWW、FTP、E-mail等)功能。再简单的说,就是同一台服务器可以同时处理超过一个域名(domain)。假设www.example1.com和www.example2.com两个域名都指向同一个服务器,而web服务器又支持虚拟主机,那么www.example1.com和www.example2.com可以访问到同一服务器上不同的web空间。</p>
<p>
在Apache2中,有效的站点信息都存放在/etc/apache2/sites-available/用户名(文件) 里面。 我们可以添加格式如下的信息来增加一个有效的虚拟空间,将/etc/apache2/sites-available/000-default.conf里的大部分东西拷贝过来就行了(比较老的ubuntu版本可能叫做default),命名成自己想命的名字,记得改DocumentRoot作为默认目录,在Directory中设置路径,注意端口号不要与其他的虚拟主机重复:</p>
<div class="jb51code">
<div>
<div class="syntaxhighlighterbash" id="highlighter_674686">
<div class="toolbar">
<span>?</span>
</div>
<table border="0" cellpadding="0" cellspacing="0"><tbody><tr>
<td class="gutter">
<div class="line number1 index0 alt2">
1</div>
<div class="line number2 index1 alt1">
2</div>
<div class="line number3 index2 alt2">
3</div>
<div class="line number4 index3 alt1">
4</div>
<div class="line number5 index4 alt2">
5</div>
<div class="line number6 index5 alt1">
6</div>
<div class="line number7 index6 alt2">
7</div>
<div class="line number8 index7 alt1">
8</div>
<div class="line number9 index8 alt2">
9</div>
<div class="line number10 index9 alt1">
10</div>
<div class="line number11 index10 alt2">
11</div>
<div class="line number12 index11 alt1">
12</div>
<div class="line number13 index12 alt2">
13</div>
<div class="line number14 index13 alt1">
14</div>
<div class="line number15 index14 alt2">
15</div>
<div class="line number16 index15 alt1">
16</div>
<div class="line number17 index16 alt2">
17</div>
<div class="line number18 index17 alt1">
18</div>
<div class="line number19 index18 alt2">
19</div>
<div class="line number20 index19 alt1">
20</div>
<div class="line number21 index20 alt2">
21</div>
<div class="line number22 index21 alt1">
22</div>
<div class="line number23 index22 alt2">
23</div>
<div class="line number24 index23 alt1">
24</div>
<div class="line number25 index24 alt2">
25</div>
<div class="line number26 index25 alt1">
26</div>
<div class="line number27 index26 alt2">
27</div>
<div class="line number28 index27 alt1">
28</div>
<div class="line number29 index28 alt2">
29</div>
</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2">
<code class="bash plain"><VirtualHost *自定义端口></code>
</div>
<div class="line number2 index1 alt1">
<code class="bash comments"># 在ServerName后加上你的网站名称</code>
</div>
<div class="line number3 index2 alt2">
<code class="bash plain">ServerName www.linyupark.com</code>
</div>
<div class="line number4 index3 alt1">
<code class="bash comments"># 如果你想多个网站名称都取得相同的网站,可以加在ServerAlias后加上其他网站别名。</code>
</div>
<div class="line number5 index4 alt2">
<code class="bash comments"># 别名间以空格隔开。</code>
</div>
<div class="line number6 index5 alt1">
<code class="bash plain">ServerAlias </code><code class="bash functions">ftp</code><code class="bash plain">.linyupark.com mail.linyupark.com</code>
</div>
<div class="line number7 index6 alt2">
<code class="bash comments"># 在ServerAdmin后加上网站管理员的电邮地址,方便别人有问题是可以联络网站管理员。</code>
</div>
<div class="line number8 index7 alt1">
<code class="bash plain">ServerAdmin webmaster@linyupark.com</code>
</div>
<div class="line number9 index8 alt2">
<code class="bash comments"># 在DocumentRoot后加上存放网站内容的目录路径(用户的个人目录)</code>
</div>
<div class="line number10 index9 alt1">
<code class="bash plain">DocumentRoot </code><code class="bash plain">/home/linyupark/public_html</code>
</div>
<div class="line number11 index10 alt2">
<code class="bash plain"><Directory </code><code class="bash plain">/home/linyupark/public_html</code><code class="bash plain">></code>
</div>
<div class="line number12 index11 alt1">
<code class="bash plain">Options Indexes FollowSymLinks MultiViews</code>
</div>
<div class="line number13 index12 alt2">
<code class="bash plain">AllowOverride None</code>
</div>
<div class="line number14 index13 alt1">
<code class="bash plain">Order allow,deny</code>
</div>
<div class="line number15 index14 alt2">
<code class="bash plain">allow from all</code>
</div>
<div class="line number16 index15 alt1">
<code class="bash plain"><</code><code class="bash plain">/Directory</code><code class="bash plain">></code>
</div>
<div class="line number17 index16 alt2">
<code class="bash plain">ScriptAlias </code><code class="bash plain">/cgi-bin/</code> <code class="bash plain">/usr/lib/cgi-bin/</code>
</div>
<div class="line number18 index17 alt1">
<code class="bash plain"><Directory </code><code class="bash string">"/usr/lib/cgi-bin"</code><code class="bash plain">></code>
</div>
<div class="line number19 index18 alt2">
<code class="bash plain">AllowOverride None</code>
</div>
<div class="line number20 index19 alt1">
<code class="bash plain">Options ExecCGI -MultiViews +SymLinksIfOwnerMatch</code>
</div>
<div class="line number21 index20 alt2">
<code class="bash plain">Allow from all</code>
</div>
<div class="line number22 index21 alt1">
<code class="bash plain"><</code><code class="bash plain">/Directory</code><code class="bash plain">></code>
</div>
<div class="line number23 index22 alt2">
<code class="bash plain">ErrorLog </code><code class="bash plain">/home/linyupark/public_html/error</code><code class="bash plain">.log</code>
</div>
<div class="line number24 index23 alt1">
<code class="bash comments"># Possible values include: debug, info, notice, warn, error, crit,</code>
</div>
<div class="line number25 index24 alt2">
<code class="bash comments"># alert, emerg.</code>
</div>
<div class="line number26 index25 alt1">
<code class="bash plain">LogLevel warn</code>
</div>
<div class="line number27 index26 alt2">
<code class="bash plain">CustomLog </code><code class="bash plain">/home/linyupark/public_html/access</code><code class="bash plain">.log combined</code>
</div>
<div class="line number28 index27 alt1">
<code class="bash plain">ServerSignature On</code>
</div>
<div class="line number29 index28 alt2">
<code class="bash plain"><</code><code class="bash plain">/VirtualHost</code><code class="bash plain">></code>
</div>
</div>
</td>
</tr></tbody></table>
</div>
</div>
<div class="codetool" id="codetool">
<div class="code_n">
<textarea></textarea>
</div>
</div>
</div>
<p>
如果你的服务器有多个IP,而不同的IP又有着不一样的虚拟用户的话,可以修改成:</p>
<div class="jb51code">
<div>
<div class="syntaxhighlighterbash" id="highlighter_412996">
<div class="toolbar">
<span>?</span>
</div>
<table border="0" cellpadding="0" cellspacing="0"><tbody><tr>
<td class="gutter">
<div class="line number1 index0 alt2">
1</div>
<div class="line number2 index1 alt1">
2</div>
<div class="line number3 index2 alt2">
3</div>
</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2">
<code class="bash plain"><VirtualHost IP地址[:端口]></code>
</div>
<div class="line number2 index1 alt1">
<code class="bash plain">...</code>
</div>
<div class="line number3 index2 alt2">
<code class="bash plain"><</code><code class="bash plain">/VirtualHost</code><code class="bash plain">> </code>
</div>
</div>
</td>
</tr></tbody></table>
</div>
</div>
<div class="codetool" id="codetool">
<div class="code_n">
<textarea></textarea>
</div>
</div>
</div>
<p>
一般情况下,我们只需要做两部操作:1,添加“ServerName www.example.com”, 2,修改“DocumentRoot /var/www”为自己定义的目录。</p>
<p>
<span><strong>启用配置</strong></span></p>
<p>
1,现在我们配置的内容只是有效虚拟主机,要是真正的发挥作用得放在/etc/apache2/sites-enabled 文件夹下面,需要通过ln建立关联:</p>
<div class="jb51code">
<div>
<div class="syntaxhighlighterbash" id="highlighter_823326">
<div class="toolbar">
<span>?</span>
</div>
<table border="0" cellpadding="0" cellspacing="0"><tbody><tr>
<td class="gutter">
<div class="line number1 index0 alt2">
1</div>
</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2">
<code class="bash functions">sudo</code> <code class="bash functions">ln</code> <code class="bash plain">-s </code><code class="bash plain">/etc/apache2/sites-available/example</code><code class="bash plain">.conf </code><code class="bash plain">/etc/apache2/sites-enabled/example</code><code class="bash plain">.conf </code>
</div>
</div>
</td>
</tr></tbody></table>
</div>
</div>
<div class="codetool" id="codetool">
<div class="code_n">
<textarea></textarea>
</div>
</div>
</div>
<p>
2,修改/etc/hosts文件,加入当前主机的IP地址和需要设置的虚拟主机名,如:127.0.0.1 www.jiaoxue.com :</p>
<div class="jb51code">
<div>
<div class="syntaxhighlighterbash" id="highlighter_231283">
<div class="toolbar">
<span>?</span>
</div>
<table border="0" cellpadding="0" cellspacing="0"><tbody><tr>
<td class="gutter">
<div class="line number1 index0 alt2">
1</div>
<div class="line number2 index1 alt1">
2</div>
<div class="line number3 index2 alt2">
3</div>
<div class="line number4 index3 alt1">
4</div>
<div class="line number5 index4 alt2">
5</div>
<div class="line number6 index5 alt1">
6</div>
<div class="line number7 index6 alt2">
7</div>
<div class="line number8 index7 alt1">
8</div>
<div class="line number9 index8 alt2">
9</div>
<div class="line number10 index9 alt1">
10</div>
<div class="line number11 index10 alt2">
11</div>
</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2">
<code class="bash plain">127.0.0.1 localhost</code>
</div>
<div class="line number2 index1 alt1">
<code class="bash plain">127.0.1.1 shanlei-Lenovo-ideapad-110-15ISK</code>
</div>
<div class="line number3 index2 alt2">
<code class="bash plain">127.0.0.1 www.jiaoxue.com</code>
</div>
<div class="line number4 index3 alt1">
<code class="bash spaces"> </code>
</div>
<div class="line number5 index4 alt2">
<code class="bash comments"># The following lines are desirable for IPv6 capable hosts</code>
</div>
<div class="line number6 index5 alt1">
<code class="bash plain">::1 ip6-localhost ip6-loopback</code>
</div>
<div class="line number7 index6 alt2">
<code class="bash plain">fe00::0 ip6-localnet</code>
</div>
<div class="line number8 index7 alt1">
<code class="bash plain">ff00::0 ip6-mcastprefix</code>
</div>
<div class="line number9 index8 alt2">
<code class="bash plain">ff02::1 ip6-allnodes</code>
</div>
<div class="line number10 index9 alt1">
<code class="bash plain">ff02::2 ip6-allrouters</code>
</div>
<div class="line number11 index10 alt2">
<code class="bash plain">~</code>
</div>
</div>
</td>
</tr></tbody></table>
</div>
</div>
<div class="codetool" id="codetool">
<div class="code_n">
<textarea></textarea>
</div>
</div>
</div>
<p>
检查语法没有错误,如果没有错误,重启Apache:</p>
<div class="jb51code">
<div>
<div class="syntaxhighlighterbash" id="highlighter_988850">
<div class="toolbar">
<span>?</span>
</div>
<table border="0" cellpadding="0" cellspacing="0"><tbody><tr>
<td class="gutter">
<div class="line number1 index0 alt2">
1</div>
<div class="line number2 index1 alt1">
2</div>
<div class="line number3 index2 alt2">
3</div>
</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2">
<code class="bash functions">sudo</code> <code class="bash plain">/etc/init</code><code class="bash plain">.d</code><code class="bash plain">/apache2</code> <code class="bash plain">restart</code>
</div>
<div class="line number2 index1 alt1">
<code class="bash plain">//</code><code class="bash plain">或</code>
</div>
<div class="line number3 index2 alt2">
<code class="bash plain">service apache2 restart</code>
</div>
</div>
</td>
</tr></tbody></table>
</div>
</div>
<div class="codetool" id="codetool">
<div class="code_n">
<textarea></textarea>
</div>
</div>
</div>
<p>
<span><strong>总结</strong></span></p>
<p>
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对的支持。</p>
<p>
原文链接:http://www.cnblogs.com/lishanlei/p/7978783.html</p>
頁:
[1]