部署Apache服务
Web 网络服务是一种被动访问的服务程序,即只有接收到互联网中其他主机发出的请求后才会响应,最终用于提供服务程序的 Web 服务器会通过 HTTP(超文本传输协议)或 HTTPS(安全超文本传输协议)把请求的内容传送给用户。目前能够提供 Web 网络服务的程序有 IIS、Nginx 和 Apache 等。
- IIS(Internet Information Service,互联网信息服务)是 Windows 系统中默认的 Web 服务程序,这是一款图形化的网站管理工具,不仅可以提供 Web 网站服务,还可以提供 FTP、NMTP、SMTP 等服务。但是,IIS 只能在 Windows 系统中使用,暂时不在我们的学习范围之内。
- Nginx程序作为一款轻量级的网站服务软件,因其稳定性和丰富的功能而快速占领服务器市场,但Nginx 最被认可的还是其系统资源消耗低且并发能力强的特性,因此得到了国内诸如新浪、网易、腾讯等门户网站的青睐。
- Apache 程序是目前拥有很高市场占有率的 Web 服务程序之一,其跨平台和安全性广泛被认可且拥有快速、可靠、简单的 API 扩展。
Apache服务程序可以运行在 Linux 系统、UNIX 系统甚至是 Windows 系统中,它支持基于 IP、域名及端口号的虚拟主机功能,支持多种认证方式,集成有代理服务器模块、安全 Socket 层(SSL),能够实时监视服务状态与定制日志消息,并支持各类丰富的模块。
安装Apache服务
第一步:把系统镜像挂载到/media/cdrom 目录。
[RS ~]# mount /dev/cdrom /media/cdrom //挂载光盘
[RS ~]# vim /etc/yum.repos.d/rhel8.repo //编写软件仓库
[BaseOS]
name=BaseOS
baseurl=file:///media/cdrom/BaseOS
enabled=1
gpgcheck=0
[AppStream]
name=AppStream
baseurl=file:///media/cdrom/AppStream
enabled=1
gpgcheck=0
第二步:安装 Apache 服务程序。在使用 dnf 命令进行安装时,跟在命令后面的 Apache 服务的软件包名称为 httpd。
[RS ~]# dnf install httpd //安装httpd服务
[RS ~]# systemctl start httpd //启动httpd服务
[RS ~]# systemctl enable httpd //加入到开机启动项
配置服务文件参数
在 Linux 系统中配置服务,其实就是修改服务的配置文件。因此,还需要知道这些配置文件的所在位置以及用途。httpd 服务程序的主要配置文件及存放位置如表所示。
作用 | 文件名称 |
---|---|
服务目录 | /etc/httpd |
主配置文件 | /etc/httpd/conf/httpd.conf |
网站数据目录 | /var/www/html |
访问日志 | /var/log/httpd/access_log |
错误日志 | /var/log/httpd/error_log |
主配置文件中保存的是最重要的服务参数,一般会被保存到 /etc
目录中以软件名称命名的一个文件夹之中,名字为“服务名称.conf
”,例如这里的“ /etc/httpd/conf/httpd.conf
”。
在这个配置文件中,所有以井号(#)开始的行都是注释行,其目的是对 httpd 服务程序的功能或某一行参数进行介绍,不需要逐行研究这些内容。在 httpd 服务程序的主配置文件中,存在 3 种类型的信息:注释行信息、全局配置、区域配置,如下图所示。
全局配置参数就是一种全局性的配置参数,可作用于所有的子站点,既保证了子站点的正常访问,也有效降低了频繁写入重复参数的工作量。区域配置参数则是单独针对每个独立的子站点进行设置的。在 httpd 服务程序主配置文件中,最为常用的参数如下表所示。
参数 | 作用 |
---|---|
ServerRoot | 服务目录 |
RSdmin | 管理员邮箱 |
User | 运行服务的用户 |
Group | 运行服务的用户组 |
ServerName | 网站服务器的域名 |
DocumentRoot | 网站数据目录 |
Listen | 监听的 IP 地址与端口号 |
DirectoryIndex | 默认的索引页页面 |
ErrorLog | 错误日志文件 |
CustomLog | 访问日志文件 |
Timeout | 网页超时时间,默认为 300 秒 |
DocumentRoot 参数用于定义网站数据的保存路径,其参数的默认值是/var/www/html(即把网站数据存放到这个目录中);而当前网站普遍的首页面名称是index.html,因此可以向/var/www/html/index.html 文件中写入一段内容,替换掉 httpd 服务程序的默认首页面。该操作会立即生效。
[RS ~]# echo "Welcome to www.zxbke.cn" > /var/www/html/index.html
默认情况下,网站数据保存在/var/www/html 目录中,如果想把保存网站数据的目录修改为/home/wwwroot 目录呢?
一、建立网站数据的保存目录,并创建首页文件
[RS ~]# mkdir /home/wwwroot
[RS ~]# echo "Hello Welcome To My Web Site www.zxbke.cn" > /home/wwwroot/index.html
二、打开httpd 的服务程序主配置文件,将122行用于定义网站数据保存路径的参数 DocumentRoot 修改为/home/wwwroot。同时将127行与134行用于定义目录权限的参数Directory 后面的路径也修改为/home/wwwroot。配置文件修改完毕后即可保存并退出。
[RS ~]# vim /etc/httpd/conf/httpd.conf
122 DocumentRoot "/home/wwwroot"
127 <Directory "/home/wwwroot">
134 <Directory "/home/wwwroot">
三、重新启动httpd服务并验证效果
[RS ~]# systemctl restart httpd
奇怪!怎么提示权限不足了? 参考下面文章设置 SELinux 解决问题!
个人用户主页功能
如果想在系统中为每位用户建立一个独立的网站,通常的方法是基于虚拟网站主机功能来部署多个网站。但这个工作会让管理员苦不堪言(尤其是用户数量很庞大时),而且在用户自行管理网站时,还会碰到各种权限限制,需要为此做很多额外的工作。
其实,httpd 服务程序提供的个人用户主页功能完全可以胜任这个工作。该功能可以让系统内所有的用户在自己的家目录中管理个人的网站,而且访问起来也非常容易。
第一步:在 httpd 服务程序中,默认没有开启个人用户主页功能。编辑配置文件,在第 17 行的 UserDir disabled 参数前面加上井号(#),表示让 httpd 服务程序开启个人用户主页功能;同时再把第 24 行的 UserDir public_html 参数前面的井号(#)去掉(UserDir 参数表示网站数据在用户家目录中的保存目录名称,即 public_html 目录)。最后修改完毕后保存。
[RS ~]# vim /etc/httpd/conf.d/userdir.conf
17 #UserDir disabled //加#进行注释
24 UserDir public_html //去#进行使能
第二步:在用户家目录中建立用于保存网站数据的目录及首页面文件。另外,还需要把家目录的权限修改为 755,保证其他人也有权限读取里面的内容。
[RS ~]# su - zhangxu //切换至普通用户
[zhangxu@RS ~]$ mkdir public_html //在家目录创建存放网站数据的目录
[zhangxu@RS ~]$ echo "this is www.zxbke.cn - zhangxu" > public_html/index.html
[zhangxu@RS ~]$ chmod -R 755 /home/zhangxu
第三步:重新启动 httpd 服务程序,在浏览器的地址栏中输入网址,其格式为“ 网址/~用户名 ”,并设置防火墙允许http的流量通过。
[root@RS ~]# systemctl restart httpd //服务器重启服务
[root@RS ~]# systemctl enable httpd //加入开机启动项
[root@RS ~]# firewall-cmd --permanent --zone=public --add-service=http //防火墙放行http服务
[root@RS ~]# firewall-cmd --reload //重新加载防火墙
第四步:SELinux 域确保服务程序不能执行违规的操作,只能本本分分地为用户提供服务。httpd 服务中突然开启的这项个人用户主页功能到底没有被 SELinux 域默认允许,使用 getsebool 命令查询并过滤出所有与 HTTP 协议相关的安全策略。
[root@RS ~]# getsebool -a | grep httpd //查询 httpd 服务的相关安全策略
......
httpd_enable_homedirs --> off
......
[root@RS ~]# setsebool -P httpd_enable_homedirS=on //开启相关安全策略
身份验证访问
如网站的拥有者并不希望直接将网页内容显示出来,而只想让通过身份验证的用户看到里面的内容,这时就可以在网站中添加密码功能了。
第一步:先使用 htpasswd 命令生成密码数据库。-c 参数表示第一次生成;后面再分别添加密码数据库的存放文件,以及验证要用到的用户名称(该用户不必是系统中已有的本地账户)
[root@RS ~]# htpasswd -c /etc/httpd/passwd zhangxu
New password: //此处输入用于网页验证的密码
Re-type new password: //再输入一遍进行确认
Adding password for user zhangxu
第二步:继续编辑个人用户主页功能的配置文件。把第 31~37 行的参数信息修改成下列内容,其中以井号(#)开头的内容为添加的注释信息,可将其忽略。随后保存并退出配置文件,重启 httpd 服务程序即可生效。
[root@RS ~]# vim /etc/httpd/conf.d/userdir.conf
<Directory "/home/*/public_html">
#AllowOverride FileInfo AuthConfig Limit Indexes
#Options MultiViews Indexes SymLinksIfOwnerMatch IncludesNoExec
#Require method GET POST OPTIONS
AllowOverride all
authuserfile "/etc/httpd/passwd" //刚刚生成出的密码验证文件保存路径
authname "My privately website" //当用户访问网站时的提示信息
authtype basic //验证方式为密码模式
require user zhangxu //访问网站时需要验证的用户名称
</Directory>
此后,当用户再想访问某个用户的个人网站时,就必须输入账户和密码才能正常访问了。另外,验证时使用的账户和密码是用 htpasswd 命令生成的专门用于网站登录的账户和密码。
虚拟主机功能
利用虚拟主机功能,可以把一台处于运行状态的物理服务器分割成多个“虚拟的服务器”。但是,该技术无法实现目前云主机技术的硬件资源隔离,而只能让这些虚拟的服务器共同使用物理服务器的硬件资源,供应商只能限制硬盘的使用空间大小。出于各种考虑的因素(主要是价格低廉),目前依然有很多企业或个人站长在使用虚拟主机的形式来部署网站。
Apache 的虚拟主机功能是服务器基于用户请求的不同 IP 地址、主机域名或端口号,提供多个网站同时为外部提供访问服务的技术。
基于 IP 地址
如果一台服务器有多个 IP 地址,而且每个 IP 地址与服务器上部署的每个网站一一对应,这样当用户请求访问不同的 IP 地址时,会访问到不同网站的页面资源。而且,每个网站都有一个独立的 IP 地址,这对搜索引擎优化也大有裨益。因此以这种方式提供虚拟网站主机功能不仅最常见,而且也受到了网站站长的欢迎。
需要配置3个 IP 地址,在配置完毕并重启网络服务之后,记得检查网络的连通性,确保 3 个 IP 地址均可正常访问。
[root@RS ~]# vim /etc/sysconfig/network-scripts/ifcfg-ens160
IPADDR1=192.168.8.10
IPADDR2=192.168.8.11
IPADDR3=192.168.8.12
[root@RS ~]# nmcli connection reload ens160 //重新加载网络配置文件
[root@RS ~]# nmcli connection up ens160 //启动网卡
第1步:分别在/home/wwwroot 中创建用于保存不同网站数据的 3 个目录,并向其中分别写入网站的首页文件。每个首页文件中应有明确区分不同网站内容的信息。
[root@RS ~]# mkdir -p /home/wwwroot/10
[root@RS ~]# mkdir -p /home/wwwroot/11
[root@RS ~]# mkdir -p /home/wwwroot/12
[root@RS ~]# echo "IP:192.168.8.10" > /home/wwwroot/10/index.html
[root@RS ~]# echo "IP:192.168.8.11" > /home/wwwroot/11/index.html
[root@RS ~]# echo "IP:192.168.8.12" > /home/wwwroot/12/index.html
第2步:从 httpd 服务的配置文件中大约第 132 行处开始,分别追加写入 3 个基于 IP 地址的虚拟主机网站参数,然后保存并退出。记得需要重启 httpd 服务,这些配置才生效。
[root@RS ~]# vim /etc/httpd/conf/httpd.conf
<VirtualHost 192.168.8.10>
DocumentRoot /home/wwwroot/10
ServerName www.zxbke.cn.com
<Directory /home/wwwroot/10>
AllowOverride None
Require all granted
</Directory>
</VirtualHost>
<VirtualHost 192.168.8.11>
DocumentRoot /home/wwwroot/11
ServerName www.zxbke.cn.com
<Directory /home/wwwroot/11>
AllowOverride None
Require all granted
</Directory>
</VirtualHost>
<VirtualHost 192.168.8.12>
DocumentRoot /home/wwwroot/12
ServerName www.zxbke.cn.com
<Directory /home/wwwroot/12>
AllowOverride None
Require all granted
</Directory>
</VirtualHost>
[root@RS ~]# firewall-cmd --permanent --zone=public --add-service=http //防火墙放行
[root@RS ~]# firewall-cmd --reload //重新加载防火墙
[root@RS ~]# systemctl restart httpd //重启服务
[root@RS ~]# systemctl enable httpd //加入开机启动项
第3步:此时访问网站,则会看到 httpd 服务程序的默认首页面中显示“权限不足”。
由于当前的/home/wwwroot 目录及里面的网站数据目录的 SELinux 安全上下文与网站服务不吻合,因此 httpd 服务程序无法获取到这些网站数据目录。需要手动把新的网站数据目录的 SELinux 安全上下文设置正确,并使用 restorecon 命令让新设置的 SELinux 安全上下文立即生效,这样就可以立即看到网站的访问效果。
[root@RS ~]# semanage fcontext -a -t httpd_sys_content_t /home/wwwroot
[root@RS ~]# semanage fcontext -a -t httpd_sys_content_t /home/wwwroot/10
[root@RS ~]# semanage fcontext -a -t httpd_sys_content_t /home/wwwroot/10/*
[root@RS ~]# semanage fcontext -a -t httpd_sys_content_t /home/wwwroot/11
[root@RS ~]# semanage fcontext -a -t httpd_sys_content_t /home/wwwroot/11/*
[root@RS ~]# semanage fcontext -a -t httpd_sys_content_t /home/wwwroot/12
[root@RS ~]# semanage fcontext -a -t httpd_sys_content_t /home/wwwroot/12/*
[root@RS ~]# restorecon -Rv /home/wwwroot
基于主机域名
当服务器无法为每个网站都分配一个独立 IP 地址的时候,可以尝试让 Apache 自动识别用户请求的域名,从而根据不同的域名请求来传输不同的内容。在这种情况下的配置更加简单,只需要保证位于生产环境中的服务器上有一个可用的 IP 地址(这里以 192.168.8.10 为例)就可以了。由于当前还没有介绍如何配置 DNS 解析服务,因此需要手动定义 IP 地址与域名之间的对应关系。
/etc/hosts 是 Linux 系统中用于强制把某个主机域名解析到指定 IP 地址的配置文件。只要这个文件配置正确,即使网络参数中没有 DNS 信息也依然能够将域名解析为某个 IP 地址。
第1步:手动定义 IP 地址与域名之间对应关系的配置文件,保存并退出后会立即生效。
[root@RS ~]# vim /etc/hosts
192.168.8.10 www.web10.com www.web11.com www.web12.com
第2步:分别在/home/wwwroot 中创建用于保存不同网站数据的 3 个目录,并向其中分别写入网站的首页文件。
[root@RS ~]# mkdir -p /home/wwwroot/10
[root@RS ~]# mkdir -p /home/wwwroot/11
[root@RS ~]# mkdir -p /home/wwwroot/12
[root@RS ~]# echo "www.web10.com" >/home/wwwroot/10/index.html
[root@RS ~]# echo "www.web11.com" >/home/wwwroot/11/index.html
[root@RS ~]# echo "www.web12.com" >/home/wwwroot/12/index.html
第3步:从 httpd 服务的配置文件中大约第 132 行处开始,分别追加写入 3 个基于主机名的虚拟主机网站参数,然后保存并退出。重启 httpd 服务使配置生效。
[root@RS ~]# vim /etc/httpd/conf/httpd.conf
<VirtualHost 192.168.8.10>
DocumentRoot /home/wwwroot/10
ServerName www.web10.com
<Directory /home/wwwroot/10>
AllowOverride None
Require all granted
</Directory>
</VirtualHost>
<VirtualHost 192.168.8.10>
DocumentRoot /home/wwwroot/11
ServerName www.web11.com
<Directory /home/wwwroot/11>
AllowOverride None
Require all granted
</Directory>
</VirtualHost>
<VirtualHost 192.168.8.10>
DocumentRoot /home/wwwroot/12
ServerName www.web12.com
<Directory /home/wwwroot/12>
AllowOverride None
Require all granted
</Directory>
</VirtualHost>
[root@RS ~]# systemctl restart httpd //重启服务
[root@RS ~]# systemctl enable httpd //加入开机启动项
[root@RS ~]# firewall-cmd --permanent --zone=public --add-service=http //防火墙放行
[root@RS ~]# firewall-cmd --reload //重新加载防火墙
第4步:因为当前的网站数据目录还是在/home/wwwroot 目录中,因此还是必须要正确设置网站数据目录文件的 SELinux 安全上下文,使其与网站服务功能相吻合。最后用 restorecon 命令让新配置的 SELinux 安全上下文立即生效。
[root@RS ~]# semanage fcontext -a -t httpd_sys_content_t /home/wwwroot
[root@RS ~]# semanage fcontext -a -t httpd_sys_content_t /home/wwwroot/10
[root@RS ~]# semanage fcontext -a -t httpd_sys_content_t /home/wwwroot/10/*
[root@RS ~]# semanage fcontext -a -t httpd_sys_content_t /home/wwwroot/11
[root@RS ~]# semanage fcontext -a -t httpd_sys_content_t /home/wwwroot/11/*
[root@RS ~]# semanage fcontext -a -t httpd_sys_content_t /home/wwwroot/12
[root@RS ~]# semanage fcontext -a -t httpd_sys_content_t /home/wwwroot/12/*
[root@RS ~]# restorecon -Rv /home/wwwroot
基于端口号
在使用 Apache 配置虚拟网站主机功能时,基于端口号的配置方式是最复杂的。因此不仅要考虑 httpd 服务程序的配置因素,还需要考虑到 SELinux 服务对新开设端口的监控。一般来说,使用 80、443、8080 等端口号来提供网站访问服务是比较合理的,如果使用其他端口号则会受到 SELinux 服务的限制。
第1步:分别在/home/wwwroot 中创建用于保存不同网站数据的 3 个目录,并向其中分别写入网站的首页文件。
[root@RS ~]# mkdir -p /home/wwwroot/6111
[root@RS ~]# mkdir -p /home/wwwroot/6222
[root@RS ~]# mkdir -p /home/wwwroot/6333
[root@RS ~]# echo "port : 6111" > /home/wwwroot/6111/index.html
[root@RS ~]# echo "port : 6222" > /home/wwwroot/6222/index.html
[root@RS ~]# echo "port : 6333" > /home/wwwroot/6333/index.html
第2步:在 httpd 服务配置文件的第 46 行~48 行 分别追加用于监听 6111、6222 和 6333端口的参数。
[root@RS ~]# vim /etc/httpd/conf/httpd.conf
45 Listen 80
46 Listen 6111
47 Listen 6222
48 Listen 6333
第3步:从 httpd 服务的配置文件中大约第 134 行处开始,分别追加写入 3 个基于端口号的虚拟主机网站参数,然后保存并退出。重启 httpd 服务配置生效。
[root@RS ~]# vim /etc/httpd/conf/httpd.conf
<VirtualHost 192.168.8.10:6111>
DocumentRoot /home/wwwroot/6111
ServerName www.zxbke.cn
<Directory /home/wwwroot/6111>
AllowOverride None
Require all granted
</Directory>
</VirtualHost>
<VirtualHost 192.168.8.10:6222>
DocumentRoot /home/wwwroot/6222
ServerName www.zxbke.cn
<Directory /home/wwwroot/6222>
AllowOverride None
Require all granted
</Directory>
</VirtualHost>
<VirtualHost 192.168.8.10:6333>
DocumentRoot /home/wwwroot/6333
ServerName www.zxbke.cn
<Directory /home/wwwroot/6333>
AllowOverride None
Require all granted
</Directory>
</VirtualHost>
第4步:因为把网站数据目录存放在/home/wwwroot 目录中,因此还是必须要正确设置网站数据目录文件的 SELinux 安全上下文,使其与网站服务功能相吻合。最后用 restorecon 命令让新配置的 SELinux 安全上下文立即生效。
[root@RS ~]# semanage fcontext -a -t httpd_sys_content_t /home/wwwroot
[root@RS ~]# semanage fcontext -a -t httpd_sys_content_t /home/wwwroot/6111
[root@RS ~]# semanage fcontext -a -t httpd_sys_content_t /home/wwwroot/6111/*
[root@RS ~]# semanage fcontext -a -t httpd_sys_content_t /home/wwwroot/6222
[root@RS ~]# semanage fcontext -a -t httpd_sys_content_t /home/wwwroot/6222/*
[root@RS ~]# semanage fcontext -a -t httpd_sys_content_t /home/wwwroot/6333
[root@RS ~]# semanage fcontext -a -t httpd_sys_content_t /home/wwwroot/6333/*
[root@RS ~]# restorecon -Rv /home/wwwroot
第5步:重启 httpd 服务后出现报错信息,这是因为 SELinux 服务检测到 6111、6222 和 6333 端口原本不属于 Apache 服务应该需要的资源,但现在却以 httpd 服务程序的名义监听使用了,所以 SELinux 会拒绝使用Apache 服务使用这 3 个端口。可以使用 semanage 命令查询并过滤出所有与 HTTP 协议相关且SELinux 服务允许的端口列表。
[root@RS ~]# semanage port -l | grep http
http_cache_port_t tcp 8080, 8118, 8123, 10001-10010
http_cache_port_t udp 3130
http_port_t tcp 80, 81, 443, 488, 8008, 8009, 8443, 9000
pegasus_http_port_t tcp 5988
pegasus_https_port_t tcp 5989
//将这 3 个端口号手动添加进去。该操作会立即生效,而且在系统重启过后依然有效。设置好后再重启 httpd 服务程序
[root@RS ~]# semanage port -a -t http_port_t -p tcp 6111
[root@RS ~]# semanage port -a -t http_port_t -p tcp 6222
[root@RS ~]# semanage port -a -t http_port_t -p tcp 6333
se[root@RS ~]# semanage port -l | grep http
http_cache_port_t tcp 8080, 8118, 8123, 10001-10010
http_cache_port_t udp 3130
http_port_t tcp 6333, 6222, 6111, 80, 81, 443, 488, 8008, 8009, 8443, 9000
pegasus_http_port_t tcp 5988
pegasus_https_port_t tcp 5989
Apache 的访问控制
Apache 可以基于源主机名、源 IP 地址或源主机上的浏览器特征等信息对网站上的资源进行访问控制。它通过 Allow 指令允许某个主机访问服务器上的网站资源,通过 Deny 指令实现禁止访问。在允许或禁止访问网站资源时,还会用到 Order 指令,这个指令用来定义 Allow或 Deny 指令起作用的顺序,其匹配原则是按照顺序进行匹配,若匹配成功则执行后面的默认指令。比如“Order Allow, Deny”表示先将源主机与允许规则进行匹配,若匹配成功则允许访问请求,反之则拒绝访问请求。
匹配浏览器特征
第一步:先在服务器上的网站数据目录中新建一个子目录,并在这个子目录中创建一个包含 Successful 单词的首页文件。
[root@RS ~]# mkdir /var/www/html/server
[root@RS ~]# echo "Successful" >/var/www/html/server/index.html
第二步:打开 httpd 服务的配置文件,在第 161 行后面添加下述规则来限制源主机的访问。这段规则的含义是允许使用 Firefox 浏览器的主机访问服务器上的首页文件,除此之外的所有请求都将被拒绝。
[root@RS ~]# vim /etc/httpd/conf/httpd.conf
<Directory "/var/www/html/server">
SetEnvIf User-Agent "Firefox" ff=1
Order allow,deny
Allow from env=ff
</Directory>
匹配 IP 地址
例如只允许 IP 地址为 192.168.10.20 的主机访问网站资源,那么就可以在 httpd 服务配置文件的第 161 行后面添加下述规则。这样在重启 httpd 服务程序后再用本机(即服务器,其 IP 地址为 192.168.10.10)来访问网站的首页面时就会提示访问被拒绝了。
Order 指令,这个指令用来定义 Allow或 Deny 指令起作用的顺序,其匹配原则是按照顺序进行匹配,若匹配成功则执行后面的默认指令。比如“Order Allow, Deny”表示先将源主机与允许规则进行匹配,若匹配成功则允许访问请求,反之则拒绝访问请求。
[root@RS ~]# vim /etc/httpd/conf/httpd.conf
<Directory "/var/www/html/server">
Order allow,deny
Allow from 192.168.8.20
</Directory>