Apache服务部署静态网站

一、网站服务器

1.安装httpd服务并加载

(1)挂载光盘

#mkdir -p /media/cdrom

#mount /dev/cdrom /media/cdrom

mount: /dev/sr0 is write-protected, mounting read-only

(2)制作yum源文件

#vim /etc/yum.repos.d/rhel7.repo

[rhel7]

name=rhel7

baseurl=file:///media/cdrom

enabled=1

qpgcheck=0

(3)安装Apacke服务程序

#yum install httpd

Loaded plugins: langpacks, product-id, subscription-manager

………………省略部分输出信息………………

Dependencies Resolved

==============================================================

Package Arch Version Repository Size

==============================================================

Installing:

httpd x86_64 2.4.6-17.el7 rhel 1.2 M

Installing for dependencies:

apr x86_64 1.4.8-3.el7 rhel 103 k

apr-util x86_64 1.5.2-6.el7 rhel 92 k

httpd-tools x86_64 2.4.6-17.el7 rhel 77 k

mailcap noarch 2.1.41-2.el7 rhel 31 k

Transaction Summary

==============================================================

Install 1 Package (+4 Dependent packages)

Total download size: 1.5 M

Installed size: 4.3 M

Is this ok [y/d/N]: y

Downloading packages:

………………省略部分输出信息………………

Complete!

(4)启用httpd服务程序并加入到开机启动项中

#systemctl start httpd

#systemctl enabled httpd

Created symlink from /etc/systemd/system/multi-user.target.wants/httpd.service to /usr/lib/systemd/system/httpd.service.

(5)测试服务是否启动

在Firefox浏览器中输入http://127.0.0.1并回车,可以看到httpd服务程序的默认页面。

#firefox

二、配置服务器参数

(1)Linux系统中的配置文件

服务目录:/etc/httpd

主配置文件:/etc/httpd/conf/httpd.conf

网站数据目录:/var/www/html

访问日志:/var/log/httpd/access_log

错误日志:/var/log/httpd/error_log

(2)配置httpd服务程序时最常用的参数以及用途描述

ServerRoot:服务目录

ServerAdmin:管理员邮箱

User:运行服务的用户

Group:运行服务的用户组

ServerName:网站服务器的域名

DocumentRoot:网站数据目录

Directory:网站数据目录的权限

Listen:监听的IP地址与端口号

DirectoryIndex:默认的索引页页面

ErrorLog:错误日志文件

CustomLog:访问日志文件

Timeout:网页超时时间,默认为300秒

在/var/www/html目录中新建index.html文件,替换掉httpd服务程序的默认页面,该操作立即生效。

#echo "Welcome To LinuxProbe.com" > /var/www/html/index.html

#firefox

(3)网站数据默认保存在/var/www/html目录中,而如果想把保存网站数据的目录修改为/home/wwwroot目录,该如何操作呢?

第1步,建立网站数据的保存目录,并创建首页文件

#mkdir /home/wwwroot

#echo "The New Web Directory" > /home/wwwroot/index.html

第2步,打开httpd服务程序的主配置文件,将119行定义网站数据保存路径的参数DocumentRoot修改为/hone/wwwroot,同时将124行定义目录权限的参数Directory后面的路径也修改为/home/wwwroot。修改完后保存并退出。

#vim /etc/httpd/conf/httpd.conf

………………省略部分输出信息………………

113

114 #

115 # DocumentRoot: The directory out of which you will serve your

116 # documents. By default, all requests are taken from this directory, but

117 # symbolic links and aliases may be used to point to other locations.

118 #

119 DocumentRoot "/home/wwwroot"

120

121 #

122 # Relax access to content within /var/www.

123 #

124 <Directory "/home/wwwroot">

125 AllowOverride None

126 # Allow open access:

127 Require all granted

128 </Directory>

………………省略部分输出信息………………

第3步,重新启动httpd服务程序并验证结果

#systemctl restart httpd

#firefox

访问http://127.0.0.1时看到的是httpd服务程序的默认页面,应该看到的是index.html页面才对。尝试访问http:/127.0.0.1/index.html页面时,发现页面中显示"Forbidden,You don't have permission to access/index.html on this server."这一切正百SELinux在捣鬼。

三、SELinux安全子系统

SELinux (Security-Enhanced Linux) 是美国国家安全局在 Linux 开源社区的帮助下开发的一个强制访问控制(MAC, Mandatory Access Control)的安全子系统。 RHEL 7 系统使用 SELinux技术的目的是为了让各个服务进程都受到约束,使其仅获取到本应获取的资源。

经常会把“SELinux 域”和“SELinux 安全上下文”称为是 Linux 系统中的双保险,系统内的服务程序只能规规矩矩地拿到自己所应该获取的资源,这样即便黑客入侵了系统,也无法利用系统内的服务程序进行越权操作。

SELinux 服务有三种配置模式,具体如下。

➢ enforcing:强制启用安全策略模式,将拦截服务的不合法请求。

➢ permissive:遇到服务越权访问时,只发出警告而不强制拦截。

➢ disabled:对于越权的行为不警告也不拦截。

#vim /etc/selinux/config

# This file controls the state of SELinux on the system.

# SELINUX= can take one of these three values:

# enforcing - SELinux security policy is enforced.

# permissive - SELinux prints warnings instead of enforcing.

# disabled - No SELinux policy is loaded.

SELINUX=enforcing

# SELINUXTYPE= can take one of these two values:

# targeted - Targeted processes are protected,

# minimum - Modification of targeted policy. Only selected processes are protected.

# mls - Multi Level Security protection.

SELINUXTYPE=targeted

获取当前SELinux服务的运行模式:

#getenforce

Enforcing

修改当前SELinux的运行模式(0为禁用,1为启用),这种修改只是临时的,在系统重启后就会失效:

#setenforce 0

#getenforce

Permissive

再次刷新网而,就会看到正常的网而内容了。

我们将网站数据的默认保存目录修改为了/home/wwwroot,而这就产生

问题了。/home 目录是用来存放普通用户的家目录数据的,而现在,httpd提供的网站服务却要去获取普通用户家目录中的数据了, 这显然违反了 SELinux 的监管原则。

现在,我们把 SELinux 服务恢复到强制启用安全策略模式,然后分别查看原始网站数据的保存目录与当前网站数据的保存目录是否拥有不同的 SELinux 安全上下文值:

#setenforce 1

#ls -Zd /var/www/html

drwxr-xr-x. root root system_u:object_r:httpd_sys_content_t:s0 /var/www/html

#ls -Zd /home/wwwroot

drwxr-xr-x. root root unconfined_u:object_r:home_root_t:s0 /home/wwwroot

用semanage命令管理SELinux的策略,格式为"semanage [选项] [文件]"。

使用 semanage 命令时,经常用到的几个

参数及其功能如下所示:

➢ -l 参数用于查询;

➢ -a 参数用于添加;

➢ -m 参数用于修改;

➢ -d 参数用于删除。

向新的网站数据目录中新添加一条 SELinux 安全上下文,让这个目录以及里面的所有文件能够被 httpd 服务程序所访问到:

#semanage fcontext -a -t httpd_sys_content_t /home/wwwroot

#semanage fcontext -a -t httpd_sys_content_t /home/wwwroot/*

注意,执行上述设置之后,还无法立即访问网站,还需要使用 restorecon 命令将设置好的SELinux 安全上下文立即生效。在使用 restorecon 命令时,可以加上-Rv 参数对指定的目录进行递归操作,以及显示 SELinux 安全上下文的修改过程。最后,再次刷新页面,就可以正常看到网页内容了

#restorecon -Rv /home/wwwroot/

restorecon reset /home/wwwroot context unconfined_u:object_r:home_root_t:s0->unconfined_u:object_r:httpd_sys_content_t:s0

restorecon reset /home/wwwroot/index.html context unconfined_u:object_r:home_root_t:s0->unconfined_u:object_r:httpd_sys_content_t:s0

#firefox

四、个人主页功能

(1)在httpd服务程序中,默认没有开启个人主页功能。为此需要编辑下面的配置文件,把17行UserDir disable参数前面加上#号,再在把24行的UserDir public_html参数前面的#号去掉,UserDir参数表示网站数据在用户家目录中的保存目录名称,即public_html目录。

#vim /etc/httpd/conf.d/userdir.conf

1 #

2 # UserDir: The name of the directory that is appended onto a user's home

3 # directory if a ~user request is received.

4 #

5 # The path to the end user account 'public_html' directory must be

6 # accessible to the webserver userid. This usually means that ~userid

7 # must have permissions of 711, ~userid/public_html must have permissions

8 # of 755, and documents contained therein must be world-readable.

9 # Otherwise, the client will only receive a "403 Forbidden" message.

10 #

11 <IfModule mod_userdir.c>

12 #

13 # UserDir is disabled by default since it can confirm the presence

14 # of a username on the system (depending on home directory

15 # permissions).

16 #

17 # UserDir disabled

18

19 #

20 # To enable requests to /~user/ to serve the user's public_html

21 # directory, remove the "UserDir disabled" line above, and uncomment

22 # the following line instead:

23 #

24 UserDir public_html

25 </IfModule>

26

27 #

28 # Control access to UserDir directories. The following is an example

29 # for a site where these directories are restricted to read-only.

30 #

31 <Directory "/home/*/public_html">

32 AllowOverride FileInfo AuthConfig Limit Indexes

33 Options MultiViews Indexes SymLinksIfOwnerMatch IncludesNoExec

34 Require method GET POST OPTIONS

35 </Directory>

(2)在用户家目录中建立用于保存网站数据的目录及首页面文件。另外,还需要把家目录的权限修改为755,保证其他人也有权限读取里面的内容。

#su - linuxprobe

Last login: Sun Aug  4 08:52:42 CST 2019 on :0

$mkdir public_html

$echo "This is linuxprobe's website" > public_html/index.html

$chmod -Rf 755 /home/linuxprobe

(3)重新启动 httpd 服务程序,在浏览器的地址栏中输入网址,其格式为“网址/~用户名” (其中的波浪号是必需的,而且网址、波浪号、用户名之间没有空格) ,从理论上来讲就可以看到用户的个人网站了。但是,报错了。

$su - root

Password:

Last login: Sun Aug  4 08:53:52 CST 2019 from 192.168.1.100 on pts/0

#systemctl restart httpd

#firefox

(4)思考这次报错的原因是什么。httpd 服务程序在提供个人用户主页功能时,该用户的网站数据目录本身就应该是存放到与这位用户对应的家目录中的,所以应该不需要修改家目录的 SELinux 安全上下文。但是,前文还讲到了 Linux 域的概念。Linux 域确保服务程序不能执行违规的操作,只能本本分分地为用户提供服务。httpd 服务中突然开启的这项个人用户主页功能到底有没有被 SELinux 域默认允许呢?

接下来使用 getsebool 命令查询并过滤出所有与 HTTP 协议相关的安全策略。 其中, off 为禁止状态,on 为允许状态。

#getsebool -a | grep http

httpd_anon_write --> off

httpd_builtin_scripting --> on

httpd_can_check_spam --> off

httpd_can_connect_ftp --> off

httpd_can_connect_ldap --> off

httpd_can_connect_mythtv --> off

httpd_can_connect_zabbix --> off

httpd_can_network_connect --> off

httpd_can_network_connect_cobbler --> off

httpd_can_network_connect_db --> off

httpd_can_network_memcache --> off

httpd_can_network_relay --> off

httpd_can_sendmail --> off

httpd_dbus_avahi --> off

httpd_dbus_sssd --> off

httpd_dontaudit_search_dirs --> off

httpd_enable_cgi --> on

httpd_enable_ftp_server --> off

httpd_enable_homedirs --> off

httpd_execmem --> off

httpd_graceful_shutdown --> on

httpd_manage_ipa --> off

httpd_mod_auth_ntlm_winbind --> off

httpd_mod_auth_pam --> off

httpd_read_user_content --> off

httpd_run_stickshift --> off

httpd_serve_cobbler_files --> off

httpd_setrlimit --> off

httpd_ssi_exec --> off

httpd_sys_script_anon_write --> off

httpd_tmp_exec --> off

httpd_tty_comm --> off

httpd_unified --> off

httpd_use_cifs --> off

httpd_use_fusefs --> off

httpd_use_gpg --> off

httpd_use_nfs --> off

httpd_use_openstack --> off

httpd_use_sasl --> off

httpd_verify_dns --> off

named_tcp_bind_http_port --> off

prosody_bind_http_port --> off

#setsebool -P httpd_enable_homedirs=on

#firefox

(5)有时,网站的拥有者并不希望直接将网页内容显示出来,只想让通过身份验证的用户访客看到里面的内容,这时就可以在网站中添加口令功能了。

第1步,先使用htpasswd命令生成密码数据库。-c参数表示第一次生成;后面再分别添加密码数据库的存放文件,以及验证要用到的用户名称(该用户不必是系统中已有的本地帐户)。

#htpasswd -c /etc/httpd/passwd admin

New password: (此处输入用于网页验证的密码,设定为admin)

Re-type new password: (再输入一遍进行确认)

Adding password for user admin

第2步,编辑个人用户主页功能的配置文件。把31~35行的参数信息修改成下列内容,其中#号开头的内容是添加的注释信息,可将其忽略。保存退出,重启http服务程序即可生效。

#vim /etc/httpd/conf.d/userdir.conf

27 #

28 # Control access to UserDir directories. The following is an example

29 # for a site where these directories are restricted to read-only.

30 #

31 <Directory "/home/*/public_html">

32 AllowOverride all

#刚刚生成出来的密码验证文件保存路径

33 authuserfile "/etc/httpd/passwd"

#当用户尝试访问个人用户网站时的提示信息

34 authname "My privately website"

35 authtype basic

#用户进行账户密码登录时需要验证的用户名称

36 require user linuxprobe

37 </Directory>

#systemctl restart httpd

此后,当用户再想访问某个用户的个人网站时,就必须要输入账户和密码才能正常访问了。 另外, 验证时使用的账户和密码是用 htpasswd 命令生成的专门用于网站登录的口令密码,而不是系统中的用户密码,请不要搞错了。

五、虚拟主机功能(最好将实验的虚拟机还原到最初,以免造成冲突)

Apache 的虚拟主机功能是服务器基于用户请求的不同 IP 地址、主机域名或端口号,实现提供多个网站同时为外部提供访问服务的技。

1.基于IP地址

我们给一块网卡配置三个IP地址,分别是:192.168.1.145,192.168.1.146,192.168.1.147

(1)重启网络服务并保证三个IP可以被ping通

#systemctl restart network

#ping 192.168.1.145

#ping 192.168.1.146

#ping 192.168.1.147

分别在/home/wwwroot中创建用于保存不同网站数据的3个目录,并向其中分别写入网站的首页文件。每个首页文件中应有明确区分不同网站内容的信息,方便直观地检查效果。

#mkdir -p /home/wwwroot/145

#mkdir -p /home/wwwroot/146

#mkdir -p /home/wwwroot/147

#echo "IP:192.168.1.145" > /home/wwwroot/145/index.html

#echo "IP:192.168.1.146" > /home/wwwroot/146/index.html

#echo "IP:192.168.1.147" > /home/wwwroot/147/index.html

(2)在httpd服务的配置文件中大约113行处开始,分别追加写入三个基于IP地址的虚拟主机网站参数,然后保存并退出。重启httpd服务,使配置生效。

#vim /etc/httpd/conf/httpd.conf

………………省略部分输出信息………………

113 <VirtualHost 192.168.1.145>

114 DocumentRoot /home/wwwroot/145

115 ServerName www.linuxprobe.com

116 <Directory /home/wwwroot/145 >

117 AllowOverride None

118 Require all granted

119 </Directory>

120 </VirtualHost>

121 <VirtualHost 192.168.1.146>

122 DocumentRoot /home/wwwroot/146

123 ServerName bbs.linuxprobe.com

124 <Directory /home/wwwroot/146 >

125 AllowOverride None

126 Require all granted

127 </Directory>

128 </VirtualHost>

129 <VirtualHost 192.168.1.147>

130 DocumentRoot /home/wwwroot/147

131 ServerName tech.linuxprobe.com

132 <Directory /home/wwwroot/147 >

133 AllowOverride None

134 Require all granted

135 </Directory>

136 </VirtualHost>

………………省略部分输出信息………………

# systemctl restart httpd

# semanage fcontext -a -t httpd_sys_content_t /home/wwwroot

# semanage  fcontext -a -t httpd_sys_content_t /home/wwwroot/www

# semanage  fcontext -a -t httpd_sys_content_t /home/wwwroot/www/*

# semanage fcontext -a -t httpd_sys_content_t /home/wwwroot/bbs

# semanage fcontext -a -t httpd_sys_content_t /home/wwwroot/bbs/*

# semanage fcontext -a -t httpd_sys_content_t /home/wwwroot/tech

# semanage fcontext -a -t httpd_sys_content_t /home/wwwroot/tech/*

# restorecon -Rv /home/wwwroot

2.基于主机域名

当服务器无法为每个网站都分配一个独立 IP 地址的时候,可以尝试让 Apache 自动识别用户请求的域名,从而根据不同的域名请求来传输不同的内容。在这种情况下的配置更加简单,只需要保证位于生产环境中的服务器上有一个可用的 IP 地址(这里以 192.168.1.145 为例)就可以了。由于当前还没有介绍如何配置 DNS 解析服务,因此需要手工定义 IP 地址与

域名之间的对应关系。/etc/hosts 是 Linux 系统中用于强制把某个主机域名解析到指定 IP 地址的配置文件。简单来说,只要这个文件配置正确,即使网卡参数中没有 DNS 信息也依然能够将域名解析为某个 IP 地址。

(1)手工定义 IP 地址与域名之间对应关系的配置文件

#vim /etc/hosts

127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4

::1 localhost localhost.localdomain localhost6 localhost6.localdomain6

192.168.10.10 www.linuxprobe.com bbs.linuxprobe.com tech.linuxprobe.com

#ping -c 4 www.linuxprobe.com

(2) 在 httpd 服务的配置文件中大约 113 行处开始, 分别追加写入三个基于主机名的虚拟主机网站参数,然后保存并退出。记得需要重启 httpd 服务,这些配置才生效。

#vim /etc/httpd/conf/httpd.conf

………………省略部分输出信息………………

113 <VirtualHost 192.168.1.145>

114 DocumentRoot "/home/wwwroot/www"

115 ServerName "www.linuxprobe.com"

116 <Directory "/home/wwwroot/www">

117 AllowOverride None

118 Require all granted

119 </Directory>

120 </VirtualHost>

121 <VirtualHost 192.168.1.145>

122 DocumentRoot "/home/wwwroot/bbs"

123 ServerName "bbs.linuxprobe.com"

124 <Directory "/home/wwwroot/bbs">

125 AllowOverride None

126 Require all granted

127 </Directory>

128 </VirtualHost>

129 <VirtualHost 192.168.1.145>

130 DocumentRoot "/home/wwwroot/tech"

131 ServerName "tech.linuxprobe.com"

132 <Directory "/home/wwwroot/tech">

133 AllowOverride None

134 Require all granted

135 </Directory>

136 </VirtualHost>

………………省略部分输出信息………………

#systemctl restart httpd

# semanage fcontext -a -t httpd_sys_content_t /home/wwwroot

# semanage  fcontext -a -t httpd_sys_content_t /home/wwwroot/www

# semanage  fcontext -a -t httpd_sys_content_t /home/wwwroot/www/*

# semanage fcontext -a -t httpd_sys_content_t /home/wwwroot/bbs

# semanage fcontext -a -t httpd_sys_content_t /home/wwwroot/bbs/*

# semanage fcontext -a -t httpd_sys_content_t /home/wwwroot/tech

# semanage fcontext -a -t httpd_sys_content_t /home/wwwroot/tech/*

# restorecon -Rv /home/wwwroot

#firefox

3.基于端口号

基于端口号的虚拟主机功能可以让用户通过指定的端口号来访问服务器上的网站资源。在使用 Apache 配置虚拟网站主机功能时,基于端口号的配置方式是最复杂的。因此我们不仅要考虑 httpd 服务程序的配置因素,还需要考虑到 SELinux 服务对新开设端口的监控。一般来说,使用 80、443、8080 等端口号来提供网站访问服务是比较合理的,如果使用其他端口号

则会受到 SELinux 服务的限制。

在接下来的实验中,我们不但要考虑到目录上应用的 SELinux 安全上下文的限制,还需要考虑 SELinux 域对 httpd 服务程序的管控。

(1)分别在/home/wwwroot中创建用于保存不同网站数据的两个目录

#mkdir -p /home/wwwroot/6111

#mkdir -p /home/wwwroot/6222

#echo "port:6111" > /home/wwwroot/6111/index.html

#echo "port:6222" > /home/wwwroot/6222/index.html

(2)在httpd服务配置文件的第43行和第44行分别添加用于监听6111和6222端口的参数。

#vim /etc/httpd/conf/httpd.conf

………………省略部分输出信息………………

33 #

34 # Listen: Allows you to bind Apache to specific IP addresses and/or

35 # ports, instead of the default. See also the <VirtualHost>

36 # directive.

37 #

38 # Change this to Listen on specific IP addresses as shown below to

39 # prevent Apache from glomming onto all bound IP addresses.

40 #

41 #Listen 12.34.56.78:80

42 Listen 80

43 Listen 6111

44 Listen 6222

………………省略部分输出信息………………

(3)在httpd服务的配置文件中大约113行处开始,分别追加写入两个基于端口号的虚拟主机网站参数,然后保存并退出。重启httpd服务。

#vim /etc/httpd/conf/httpd.conf

………………省略部分输出信息………………

113 <VirtualHost 192.168.1.145:6111>

114 DocumentRoot "/home/wwwroot/6111"

115 ServerName www.linuxprobe.com

116 <Directory "/home/wwwroot/6111">

117 AllowOverride None

118 Require all granted

119 </Directory>

120 </VirtualHost>

121 <VirtualHost 192.168.1.145:6222>

122 DocumentRoot "/home/wwwroot/6222"

123 ServerName bbs.linuxprobe.com

124 <Directory "/home/wwwroot/6222">

125 AllowOverride None

126 Require all granted

127 </Directory>

128 </VirtualHost>

………………省略部分输出信息………………

(4)设置网站数据目录存放在/home/wwwroot目录中的SELinux安全上下文。

# semanage fcontext -a -t httpd_sys_content_t /home/wwwroot

# semanage  fcontext -a -t httpd_sys_content_t /home/wwwroot/6111

# semanage  fcontext -a -t httpd_sys_content_t /home/wwwroot/6111/*

# semanage fcontext -a -t httpd_sys_content_t /home/wwwroot/6222

# semanage fcontext -a -t httpd_sys_content_t /home/wwwroot/6222/*

# restorecon -Rv /home/wwwroot

此时重启httpd服务一定报错。因为端口为被SELinux认可。

# 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

(5)SELinux允许的与HTTP协议相关的端口号中默认没有包含6111和6222,需要手工添加。该操作立即生效,而且在系统重启后依然有效。

# semanage port -a -t http_port_t -p tcp 6111

# semanage port -a -t http_port_t -p tcp 6222

# 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      6222, 6111, 80, 81, 443, 488, 8008, 8009, 8443, 9000

pegasus_http_port_t            tcp      5988

pegasus_https_port_t          tcp      5989

# systemctl restart httpd

# firefox

# systemctl restart httpd

六、Apache的访问控制

Apache 可以基于源主机名、源 IP 地址或源主机上的浏览器特征等信息对网站上的资源进行访问控制。它通过 Allow 指令允许某个主机访问服务器上的网站资源, 通过 Deny 指令实现禁止访问。在允许或禁止访问网站资源时,还会用到 Order 指令,这个指令用来定义 Allow或 Deny 指令起作用的顺序,其匹配原则是按照顺序进行匹配,若匹配成功则执行后面的默认指令。比如“Order Allow, Deny”表示先将源主机与允许规则进行匹配,若匹配成功则允许访问请求,反之则拒绝访问请求。

(1)先在服务器上的网站数据目录中新建一个子目录,并在这个子目录中创建一个包含Successful单词的首页文件。

# mkdir /var/www/html/server

# echo "Successful" > /var/www/html/server/index.html

(2)打开httpd服务的配置文件,在第129行后面添加下述规则来限制源主机的访问。这段规则的含义是允许使用 Firefox 浏览器的主机访问服务器上的首页文件,除此之外的所有请求都将被拒绝。

# vim /etc/httpd/conf/httpd.conf

………………省略部分输出信息………………

129 <Directory "/var/www/html/server">

130 SetEnvIf User-Agent "Firefox" ff=1

131 Order allow,deny

132 Allow from env=ff

133 </Directory>

………………省略部分输出信息………………

# systemctl restart httpd

# firefox

在浏览器中输入http://192.168.1.145/server/,将会显示Successfull。

(3)除了匹配源主机的浏览器特征之外,还可以通过匹配源主机的 IP 地址进行访问控制。例如,我们只允许 IP 地址为 192.168.1.155 的主机访问网站资源,那么就可以在 httpd 服务配置文件的第 129 行后面添加下述规则。这样在重启 httpd 服务程序后再用本机(即服务器,其 IP地址为192.168.1.145)来访问网站的首页面时就会提示访问被拒绝。

# vim /etc/httpd/conf/httpd.conf

………………省略部分输出信息………………

129 <Directory "/var/www/html/server">

130 Order allow,deny

131 Allow from 192.168.1.155

132 Order allow,deny

133 </Directory>

………………省略部分输出信息………………

# systemctl restart httpd

# firefox

此文章参考刘遄老师所著的《linux就该这么学》,经过逐步调试,并验证后形成的。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,684评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,143评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,214评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,788评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,796评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,665评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,027评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,679评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 41,346评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,664评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,766评论 1 331
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,412评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,015评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,974评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,203评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,073评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,501评论 2 343

推荐阅读更多精彩内容