Apache基本配置4-实战

来源:互联网 发布:二维动画软件大全 编辑:程序博客网 时间:2024/06/06 17:06

  • 说明
  • 准备工作
  • 练习内容
  • 开始练习
    • 0 每次更改配置文件后都要使用apachectl restart重启服务器才能生效
    • 1 测试端口80和8888结合virtualhost
    • 2 查看日志信息
    • 3 测试php
    • 4 自定义错误信息
    • 5 限制某些文件的访问
    • 6 用户目录
  • 小结

1. 说明

本文系我的"Web Server & Web Technology (WSWT)系列博客之一,主要讲解Linux系统的Apache配置和使用,以及如何使用apache搭建自己的个人网站".该系列博客的总目录参见这里http://blog.csdn.net/u014303046/article/details/73694983。

2. 准备工作

当按照上一个教程在ubuntu系统安装好Apache之后,就可以来探索一下Apache的配置了。

为了方便大家观察效果,我写了几个简单的网页,大家可以在这里下载不知道为什么不能设成0积分下载,所以也可以到这里免费下载,下载后把文件解压放在某个目录下,比如我放在了/home/zsc/workspace/web/apache_1,然后在下面的Docker命令里使用-v参数把这个目录作为Docker容器可访问的数据卷。如果你没有使用Docker,你只需要把下文中对应的DocumentRoot目录修改成你自己的目录就好了。

如果你使用Docker,那么首先需要从你之前保存的镜像(从源码安装好apache的镜像)运行一个容器:

sudo docker run -ti --name web -p 80:80 -p 443:443 -p 8888:8888 -v /home/zsc/workspace/web/apache_1/:/web/doc_root apache:v1.0 bash

注意:-v参数用来把Docker宿主主机上的/home/zsc/workspace/web/apache_1目录映射到容器内的/web/doc_root目录,这样就可以在容器内访问该目录及其子目录了。所以我们在下文使用Docker的时候都是用/web/doc_root作为DocumetnRoot目录。
在容器里你可以看到我们多了一个目录:
这里写图片描述

进入之后启动服务器:

 cd /etc/apache2/server_root/bin/ ./apachectl start

如果你使用自己购买的服务器或者自己的笔记本电脑,直接启动就好了。
我还是建议大家使用docker学习本教程,因为后面的负载均衡等内容需要至少3个服务器,买3个服务器或者自己有3台电脑都是有点浪费的。

本教程假设你已经学习了前面的教程,并在Docker里或者自己的笔记本电脑或者自己购买的服务器上从源码编译好了apache和php。
如果你想使用Docker进行练习但是又没有做好docker的相关镜像,你可以从docker hub 搜索我做好的镜像:leeochang/angryberry,然后直接pull下来,就可以使用了。链接.

3. 练习内容

  1. 让服务器支持php
  2. 监听80和8888端口(当然你可以自己随意设定一個端口)
  3. 练习为文件或者目录设定访问权限
  4. 支持多用户
  5. 学会使用virtualhost
  6. 学会查看log日志信息

4. 开始练习

4.0 每次更改配置文件后都要使用apachectl restart重启服务器才能生效

4.1 测试端口80和8888(结合virtualhost)

修改/etc.apache2/server_root/conf/httpd.conf文件:
添加如下内容:

Listen 80Listen 8888

去掉”Include conf/extra/httpd-vhosts.conf”前面的注释,然后在/conf/extra/httpd-vhosts.conf文件里做如下修改:

<VirtualHost *:80>    DocumentRoot "/web/doc_root"    <Directory "/web/doc_root">        Options Indexes FollowSymLinks        AllowOverride None        Require all granted    </Directory>    <IfModule dir_module>        DirectoryIndex index.html    </IfModule>    ServerName first.example.com    ErrorLog "logs/first.example.com-error_log"    CustomLog "logs/first.example.com-access_log" common</VirtualHost><VirtualHost *:8888>    DocumentRoot "/web/doc_root"    <Directory "/web/doc_root">        Options Indexes FollowSymLinks        AllowOverride None        Require all granted    </Directory>    <IfModule dir_module>        DirectoryIndex 8888.html    </IfModule>    ServerName other.example.com    ErrorLog "logs/other.example.com-error-log"    CustomLog "logs/other.example.com-access_log" common</VirtualHost>

上面的例子中,每个VirtualHost中我们都用DocumentRoot定义了文件根目录,并且使用Directory明确options等内容。
同时,使用

<IfModule dir_module>    DirectoryIndex 8888.html</IfModule>

指明了文件的默认提供顺序。

现在,重启服务器:”./bin/apachectl restart”
使用ifconfig命令获得容器的IP地址,我的地址是172.17.0.2,然后在浏览器输入:http://172.17.0.2:80,结果如下:
这里写图片描述

浏览器输入:http://172.17.0.2:8888,结果如下:
这里写图片描述
这说明我们的apache现在可以根据端口的不同分别提供不同的默认主页。

4.2 查看日志信息

在4.1小结的VirtualHost里面我们对不同的端口分别设置了记录访问日志和错误日志的日志文件。现在到对应目录看一下我们发现已经生成了相应的日志文件:
这里写图片描述
使用vim查看other.example.com.access-log文件发现里面已经记录了一些访问记录:
这里写图片描述

特别注意:其实我们在这里使用这种方式存放日志不是很好。如果你看过我的Docker教程你就会知道,容器应该是临时的,一次性的,因此最好使用数据卷来存放日志,这样的话当容器结束后我们的日志也可以永久保存。

4.3 测试php

如果你使用我的镜像或者完全按照我的教程来的话,我们已经配置好了php支持,下面来测试一下(我提供的例程里有一个test.php文件):
浏览器输入:http://172.17.0.2/test.php
这里写图片描述

4.4 自定义错误信息

以404信息为例,我们们可以通过修改httpd-vhost.conf文件的对应位置指定404返回页面(去掉相应注释并指定返回页面,比方我指定/web/doc_root/404.html作为80端口的返回页面,/web/doc_root/404_for_8888.html作为8888端口的返回页面):
这里写图片描述
那么当我们试图访问一个不存在的资源的时候,比如浏览器输入:
http://172.17.0.2/hahahahaha.html, 就会返回以下自定义内容:
这里写图片描述
http://172.17.0.2:8888/hahahahaha.html 会返回:
这里写图片描述

4.5 限制某些文件的访问

比如我们的apache_1(也就是容器里的doc_root)目录下有一个deny.html文件,未作禁止之前,我们输入
http://172.17.0.2/deny.html可以得到一下结果:

这里写图片描述
如果希望限定80端口不可访问该文件,需要在httpd-vhost.conf文件里里做如下修改:
这里写图片描述
此时,重启服务器,你再次输入网址http://172.17.0.2/deny.html就会得到下面的结果,提示你没有访问权限:
这里写图片描述
但是http://172.17.0.2:8888/deny.html依旧可以正常访问。

使用这种方法,你可以限制文件或者某个目录的访问权限。

4.6 用户目录

UserDir的用法:
首先,去掉httpd.conf文件的这2行注释:

LoadModule userdir_module modules/mod_userdir.soInclude conf/extra/httpd-userdir.conf

然后修改conf/extra/httpd-userdir.conf文件:
这里写图片描述

UserDir定义了在哪个目录,默认是public_html,这会在系统默认的/home/username/目录寻找对应的文件,由于我们没有在容器里添加多用户,因此我们采用其他方式来看效果——即建立两个目录leo & bob,更改UserDir为/web/doc_root,然后使用http://[IP_Of_Container]/~username同样可以正确解析。
同时,我们设定了directoryIndex来指定默认主页。

重启服务器之后:
浏览器输入http://172.17.0.2/~leo/
这里写图片描述

浏览器输入http://172.17.0.2/~bob/
这里写图片描述

5. 小结

好了,这次练习就到这里了。
更多的教程全力上线中,敬请期待。

原创粉丝点击