HTTP 服务器:

需求支持:

l TR143 Upload Diagnostic (使用put) ,Download Diagnostic (get) 

l TR69 RPC Upload ,Download.

安装配置:

1 Fedora 10 都自带了Apache,如果要自行安装可以使用:

------添加删除软件----选择相应的服务包

2 配置:

l 测试www服务器是否安装:http:127.0.0.1

l Upload Diagnostic 使用put 方法进行测试,所以利用webdav配置httpd服务,使其满足需要:



第一步:在/var/www/html 下面再建立一个speed_test目录:

mkdir -p  /var/www/html/speed_test

chmod 777  /var/www/html/speed_test


第二步 在WebDAV 模块添加以下代码:

# WebDAV module configuration section.
<IfModule mod_dav_fs.c>
    # Location of the WebDAV lock database.
    DAVLockDB /var/lib/dav/lockdb

    <Location "/speed_test">
        DAV On
        <LimitExcept GET HEAD OPTIONS PUT>
            Allow from all
        </LimitExcept>
    </Location>

</IfModule>
第三步:http:127.0.0.1/speed_test/  即可用于upload diagnostic
启动apache: /etc/init.d/httpd start /restart /stop.



开头的时候不是讲过 CentOS 的 Apache 预设首页放置在 /var/www/html 这个目录吗? 为什么呢?因为 DocumentRoot 这个设定值的关系啦!此外,由于 Apache 允许 Internet 对我们的资料进行浏览, 所以你当然必须要针对可被浏览的目录进行权限的相关设定,那就是 <Directory> 这个设定值的重要特色!先让我们来看看预设的主网页设定吧!
[root@linux ~]# vi /etc/httpd/conf/httpd.conf

DocumentRoot "/var/www/html"  <==可以改成你放置首页的目录!

# 这个设定值重要到不行,因为他规范了 WWW 服务器主网页所放置的『目录』所在。

# 这个设定值是可以被随意更动的,不过更动之后你必须要针对该目录进行权限设定,

# 也就是底下要讲到的 Directory 这个设定值来规范目录的权限才行喔!


<Directory />
    Options FollowSymLinks
    AllowOverride None
</Directory>

# 这个设定值是针对 WWW 服务器的『预设环境』而来的,因为针对『/』的设定嘛!

# 建议可以设定的严格一点,就是保留上述的预设设定即可 (已经很严格了!)

<Directory "/var/www/html">
建议拿掉 Indexes 比较妥当!
    AllowOverride None
    Order allow,deny
    Allow from all
</Directory>


§ 这个地方则是针对 /var/www/html 这个目录来设定权限啦!就是咱们首页所在目录的权限。 主要的几个设定项目的意义是这样的:
Options:
表示这个目录内能够进行的动作,亦即是权限设定啦!主要的设定值:
Indexes:
如果在此目录下找不到『首页档案』时, 就显示整个目录下的文件名称,『首页档案』与 DirectoryIndex 设定值有关。

§ FollowSymLinks:
让在此目录下的连结档可以连结出此目录外。 一般来说被 chroot 的程序将无法离开其目录,也就是说预设的情况下,你在 /var/www/html 底下的连结档只要连结到非此目录的其他地方,则该连结档预设是失效的。 但使用此设定即可让连结档有效的离开本目录。

§ ExecCGI:
让此目录具有执行 CGI 程序的权限,非常重要!举例来说,目前常见的 OpenWebMail 使用了很多的 perl 的程序, 你要让 openwebmail 可以执行,就得要在 openwebmail 程序所在目录 拥有 ExecCGI 的权限。注意,不要让所有目录均可使用 ExecCGI !

§ Includes:
让一些 Server-Side Include 程序可以运作。建议可以加上去!

§ MultiViews:
这玩意儿有点象是多国语言的支持,与语系资料 (LanguagePriority) 有关。最常见在错误讯息的回报内容,在同一部主机当中, 可以依据用户端的语系而给予不同的语言显示呢!预设在错误回报讯息当中存在, 你可以检查一下 /var/www/error/ 目录下的资料喔!

§ AllowOverride:
表示是否允许额外设定档 .htaccess 的权限复写?我们可以在 httpd.conf 内设定好所有的权限,不过如此一来若使用者自己的个人网页想要修改权限时将会对管理员造成困扰。因此 Apache 预设可以让使用者以目录底下的 .htaccess 档案内复写 <Directory> 内的权限设定。 这个项目则是在规定 .htaccess 可以复写的权限类型有哪些。常见的有:
ALL:全部的权限均可被复写;

§ AuthConfig:仅有网页认证 (账号密码) 可复写;

§ Indexes:仅允许 Indexes 方面的复写;

§ Limits:允许使用者利用 Allow, Deny 与 Order 管理可浏览的权限;

§ None:不可复写,亦即 .htaccess 档案失效去!

1 这部份我们在进阶设定时会再讲到的!

§ Order:
决定是否可被浏览的权限设定啦!主要有两种方式:
deny,allow:以 deny 优先处理,但没有写入规则的则预设为 allow 喔。

§ allow,deny:以 allow 为优先处理,但没有写入规则的则预设为 deny 喔。

1 所以在预设的环境中,因为是 allow,deny 所以预设为 deny (不可浏览), 不过在下一行有个 Allow from all ,allow 优先处理,因此全部(all) 用户端皆可浏览啦!这部份我们会在进阶安全设定当中再提及低。

除了这些资料之外,你还得要知道的是底下这个玩意儿:


[root@linux ~]# vi /etc/httpd/conf/httpd.conf
DirectoryIndex index.html index.html.var  <==可能需要修改的项目!
# 如果用户端在网址列只输入到目录,例如 http://localhost/ 时,那么 Apache
# 将拿出那个档案来显示?这个档案也被称为预设的首页啦!一般来说是以
# index.* 为档名开头,但 Windows 则以 default.asp 之类的档名为开头的。
# 如果你想要让类似 index.pl 或 index.cgi 也可以是首页,那可以改成:
# DirectoryIndex index.html index.htm index.cgi index.php3 ...
# 这个项目与刚刚谈到的 Options 里面的 Indexes 有关喔!

浏览权限的设定动作 (order, limit)

咱们的 Apache 设定档内就可以指定限制浏览来源的动作了!我们可以针对来源 IP 或网域来限制呢! 就以 Order 这个限制配合 Allow 及 Deny 来处理即可。再次的强调一下:

· Order deny,allow:以 deny 优先处理,但没有写入规则的则预设为 allow 。常用于:拒绝所有,开放特定的条件;

· Order allow,deny:以 allow 为优先处理,但没有写入规则的则预设为 deny。 常用于:开放所有,拒绝特定的条件。

· 如果 allow 与 deny 的规则当中有重复的,则以预设的情况 (Order 的规范) 为主。

举例来说,如果我们的首页想要让 192.168.1.11 及政府部门无法连线,其他的则可以连线, 由上面的说明你可以知道是开放所有拒绝特定的条件,所以你可以这样做设定:

[root@linux ~]# vi /etc/httpd/conf/httpd.conf
<Directory "/var/www/html">
    Options FollowSymLinks
    AllowOverride None
    Order allow,deny
    allow from all
    deny from 192.168.1.11
    deny from .gov.tw
</Directory>

注意一下,因为 Order 是『 allow,deny 』,所以所有规则当中属于 allow 的都会被优先提到最上方, 为了避免这个设计上的困扰,所以建议你直接将 allow 的规则写在最上方。 而由于规则当中 192.168.1.11 隶属于 all 当中 (all 代表所有的嘛!),因此这个设定项目则为预设值, 亦即为 deny 啦!那个 .gov.tw 的设定项目也一样。如果是底下的模样:

[root@linux ~]# vi /etc/httpd/conf/httpd.conf
# 底下可是个错误的示范,请仔细看下个段落的详细说明喔!
<Directory "/var/www/html">
    Options FollowSymLinks
    AllowOverride None
    Order deny,allow
    deny from 192.168.1.11
    deny from .gov.tw
    allow from all
</Directory>

虽然 deny 会先挪到上方来处理,不过因为 192.168.1.11 是在 all 的范围内,所以发生重复, 因此这个设定值将会以预设的 allow 为主,因此就无法限制住这个 192.168.1.11 的存取啦! 这边很容易搞错的吶!鸟哥也是常常搞到头昏脑胀的~

例题:
如果有个应该要保护的内部目录,假设在 /var/www/html/lan/ ,我仅要让 192.168.1.0/24 这个网域可以浏览的话,那么你应该要如何设定的好?
答: 

这个案例当中有点象是『拒绝所有连线,仅接受特定连线』的样子,因此可以使用 deny,allow 那个情况, 所以你可以这样做:

<Directory "/var/www/html/lan">
    Options FollowSymLinks
    AllowOverride None
    Order deny,allow
    deny from all
    allow from 192.168.1.0/24
</Directory>


事实上,如果想要让某个网域或者是 IP 无法浏览的话,最好还是利用 iptables 来处理比较妥当。 不过如果仅是某些重要目录不想让人家来查阅的话,那么这个 allow, deny 与 order 的设定资料可就很值得参考了。

而除了这个 order 设定值之外,我们还有个限制用户端能进行的动作的设定喔! 那就是 Limit 这个设定啦!举例来说,如果我们想要让使用者在 /var/www/html/lan 这个目录下仅能进行最阳春的 GET, POST, OPTIONS 的功能,除了这几个之外的其他功能通通不允许, 那么你可以这样做:

[root@linux ~]# vi /etc/httpd/conf/httpd.conf
<Directory "/var/www/html/lan">
    AllowOverride none
    Options FllowSymLinks
先允许能够进行 GET, POST 与 OPTIONS 啦!
    <Limit GET POST OPTIONS>
        Order allow,deny
        Allow from all
    </Limit>

再规定除了这三个动作之外,其他的动作通通不允许啦!
    <LimitExcept GET POST OPTIONS>
        Order deny,allow
        Deny from all
    </LimitExcept>
</Directory>

透过 Limit 与 LimitExcept 就能够处理用户端能够进行的动作啦!也就有办法针对你的资料进行细部保护囉。 不过这些保护真的很细部,一般小网站大致上用不到 Limit 这个玩意儿说。


安装VSFTP:

l 安装:在线安装 yum install vsftp

l 系统--管理--服务器设置--服务 可以设置服务器在计算机开启时自动运行。

·  建立上传/下载目录 

在上列的数据当中,实际上匿名使用者仅可进行下载的动作而已。如果你还想让匿名者可以上传档案或者是建立目录的话, 那你还需要额外增加一些设定才行:

[root@linux ~]# vi /etc/vsftpd/vsftpd.conf
# 新增底下这几行啊!
write_enable=YES
anon_other_write_enable=YES
anon_mkdir_write_enable=YES
anon_upload_enable=YES

[root@linux ~]# /etc/init.d/vsftpd restart


如果仍然不能访问FTP:

查看防火墙设置:系统--管理--防火墙


配置Download Upload

1 可以利用 Apache 中的Alias 把FTP 的Upload 目录设置为http  Download的目录:


Alias /jack/ /var/ftp/upload/
<Directory /var/ftp/upload>
    Options All Indexes  FollowSymLinks
    AllowOverride all
    Order allow,deny
    Allow from all
</Directory>
用于Download firware

Alias /icons/ "/var/www/icons/"
<Directory "/var/www/icons">
    Options Indexes MultiViews
    AllowOverride None
    Order allow,deny
    Allow from all
</Directory>

# 这个 Alias 很有趣的!是制作出类似连结档的东西啦!

# 当你输入 http://localhost/icons 时,其实你的 /var/www/html 并没有 icons

# 那个目录,不过由于 Alias 的关系,会让该网址直接连结到 /var/www/icons/ 下。

# 这里面预设有很多 Apache 提供的小图示喔!而因为设定了一个新的可浏览目录,

# 所以你瞧,多了个 <Directory> 来规定权限了吧! ^_^


ScriptAlias /cgi-bin/ "/var/www/cgi-bin/"
<Directory "/var/www/cgi-bin">
    AllowOverride None
    Options None
    Order allow,deny
    Allow from all
</Directory>

# 与上面的 icons 类似,不过这边却是以 ScriptAlias 为设定值!

# 这个设定值可以指定该目录底下为『具有 ExecCGI 』能力的目录所在喔!

# 所以你可以将类似 Open webmail 的程序给他放置到 /var/www/cgi-bin 内,

# 就不必额外设定其他的目录来放置你的 CGI 程序喔!


配置PHP

l 用于upload configuration 文件

l 安装: yum  install php

l 测试安装是否成功:

那个『 <?php ... ?> 』是 PHP 模块的网页嵌入式程序语法,在这中间的就是 PHP 的程序码啦。 那个『 phpinfo() 』是特殊的 PHP 函数,可以显示出目前你 WWW 服务器内 PHP 模块的相关核心资料。 写完之后立刻以浏览器再查阅这个档案看看.

http://127.0.0.1/phpinfo.php


在/var/www/html 目录下面建立一个php 文件,用于测试Upload,上传的内容存于myputfile.xml文件中。

<?php
/* PUT data comes in on the stdin stream */
$putdata = fopen("php://input", "r");

/* Open a file for writing */
$fp = fopen("myputfile.xml", "w");

/* Read the data 1 KB at a time
   and write to the file */
while ($data = fread($putdata, 1024))
  fwrite($fp, $data);

/* Close the streams */
fclose($fp);
fclose($putdata);
?>



约略谈了谈 httpd.conf 之后,你应该会发现一件事情,那就是『我们怎么没有讲到 PHP 这个模块的设定啊?』 不是不讲啦!而是因为目前 Apache 很聪明的将一些重要模块给他拆出来放置到 /etc/httpd/conf.d/ 这个目录下了, 所以我们必须要到该目录下才能了解到某些模块是否有被加入啊!底下先来瞧瞧吧!

[root@linux ~]# vi /var/www/html/phpinfo.php
<?php
phpinfo();
?>


我们主要来看看关于 PHP 的设定档吧:

[root@linux ~]# cd /etc/httpd/conf.d
[root@linux conf.d]# ll *.conf
-rw-r--r--  1 root root 448 Sep 21 20:13 php.conf
-rw-r--r--  1 root root 299 Aug 13 16:33 welcome.conf
# 如果你是按照刚刚鸟哥说的几个模块去安装的,那么这个目录下至少会有这两个资料,
# 一个是规范 PHP 设定,一个则是规范『如果首页不存在时的欢迎画面』囉。

这三行分别代表载入 PHP 模块、增加附档名为 .php 的档案处理方式,以及将 index.php 增加成为首页档名。所以如果你在 /var/www/html 这个首页目录内新增一个档名为 index.php 时,他可以被使用为首页显示啦!基本上你不需要进行任何修改,这个档案就能够让你的 Apache 支援 PHP 模块与语法了!

另外你也必须要知道 PHP 的设定档是在 /etc/php.ini ,这个档案内容有某些地方可以进行一些小修改, 也有某些地方你必须要特别留意,免得被用户端误用你的 PHP 资源:

[root@linux ~]# vi /etc/httpd/conf.d/php.conf
LoadModule     php4_module modules/libphp4.so
AddType        application/x-httpd-php .php
DirectoryIndex index.php



[root@linux ~]# vi /etc/php.ini
register_globals = Off
# 这个项目请确定为 Off (预设就是 Off),因为如果设定为 On 时,
# 虽然程序执行比较不容易出状况,但是很容易不小心就被攻击。

log_errors = On
ignore_repeated_errors = On
ignore_repeated_source = On
# 这三个设定项目可以决定是否要将 PHP 程序的错误记录起来,
# 建议将将重复的错误资料忽略掉,否则在很忙碌的系统上,
# 这些错误资料将可能造成你的登录档暴增,导致效能不佳 (或当机)

display_errors = Off
display_startup_errors = Off
# 当你的程序发生问题时,是否要在浏览器上头显示相关的错误讯息 (包括部分程序码)
# 强烈的建议设定为 Off 。不过如果是尚未开放的 WWW 服务器,为了你的 debug
# 容易,可以暂时的将他设定为 On ,如此一来你的程序问题会在浏览器上面
# 直接显示出来,你不需要进入 /var/log/httpd/error_log 登录当中查阅。
# 但程序完成后,记得将此设定值改为 Off 喔!重要重要!


如果你想要提供 Apache 的说明文件给自己的 WWW 服务器的话, 可以安装一下 httpd-manual 这个套件,你就会发现在这个目录当中又会新增档案 (manual.conf) ,而且从此你可以使用 http://localhost/manual 来登入 Apache 的使用手册呢!真方便! 有兴趣的话可以参考与安装底下这些套件喔: