第八章 web服务之apache (1)

第八章 web服务之apache(1)

8.1 HTTP简介

说到http协议,其实大家都不陌生,我们日常上网,打开网页,使用的就是http协议,实现web浏览功能。

首先,我们需要明确的是,架设网站主要是有两部分组成:web服务器和网页。我们作为Linux运维人员负责的是web服务器的部署与维护,但是网页制作不是我们的专业,需要找专门的开发公司,制作网页。然后把网页交给我们,由我们把网页发布出来。

在Linux中也会有多种部署http服务器的工具,如:apache、nginx等,下面我们就来介绍一下Linux自带的apache工具部署web服务的细节。

8.2 apache配置

8.2.1 基本配置

首先,我们来安装一下apacche的软件包

yum -y install httpd

安装完毕后系统中会自动新建一个用户叫apache,新建一个组叫apache,作为http服务的属主和属组,即http服务器进程是以apache用户的身份启动起来的。

本章的实验环境如下

服务器:Linux 192.168.10.1 关闭防火墙

客户端:windows 192.168.10.10

其实httpd软件包安装完毕后,即可直接启动服务了,因为httpd已经为我们搭建好了测试页面,可以直接在客户端测试。

systemctl restart httpd ---启动httpd服务

systemctl enable httpd

客户端使用浏览器访问页面,可见到apache的测试页:

有了测试页,可证明apache服务器启动正常。下面我们来分析一下apache的配置文件,做出自己的设置。

vi /etc/httpd/conf/httpd.conf ---编辑配置文件,里面有如下默认项:

listen 80 ---指定本web服务的监听端口,也可自定义,一般不改

ServerAdmin ---指定本服务的管理员邮箱

ServerName ---指定本网站的FQDN

User Apache ---服务进程的所属用户

Group Apache ---服务进程的所属组

Documentroot /var/www/html ---指定网页文件的存放位置

DirectoryIndex index.html ---指定主页文件名

Errorlog logs/error_log ---错误日志

Customlog logs/access_log ---访问日志,绝对路径:/var/log/httpd/下

AddDefaultCharset UTF-8 ---指定页面传输时的编码,一般改成GB2312

其中最为常用的是Documentroot和DirectoryIndex两项,Documentroot指定了本网站的所有网页文件的存放位置,默认都在/var/www/html/目录下,但里面可能会有很多的网页文件(如下图),那么当客户端访问时,以哪个文件作为首页显示给客户端呢?则由DirectoryIndex项指定,默认指定的主页文件名为index.html,如下图:

图中,是我事先手动创建的几个网页文件,当apache相应客户时,会自动把index.html文件发送给客户端浏览器显示,而其他网页文件,可以在index.html页面内通过链接显示(这是网页制作的技术范畴工作,这里不做赘述)。

我们可以手动创建网页,命令很简单:

cd /var/www/html

echo www.rzz.com > index.html

注:这里我们只是为了做实验测试,所以不编写复杂网页,有会html网页制作的读者,可以自行发挥。

制作完毕后,客户端就可以访问了,结果如下:

另外,主配置文件中的Errorlog与Customlog两项,指定了错误日志与客户访问日志文件的位置,但并未指定绝对路径,只写明了文件名,其实日志文件的统一位置都在/var/log/http/目录下,可以看到配置文件汇总指定的文件。

再者,主配置文件中的AddDefaultCharset项容易被忽略,它指定了页面文件在传输过程中的编码格式,尤其是中文页面,编码格式指定不对,客户端显示时很容易出现乱码现象(UTF-8是国际上对中文制定的编码格式,GB2312是我国政府对中文制定的编码格式),在我国大陆地区内的网站服务器,大多使用GB2312编码。关于编码格式,生产环境中我们需要与网页开发人员对接,他们在编写网页时也会指定编码格式,我们与他们的设定保持一致即可。

8.2.2 访问控制管理

下面,我们来对站点做一些管理配置。首先来针对客户端ip做一下限制。

vi /etc/httpd/conf/httpd.conf ---编辑配置文件

大约在130+行,会有<Directory "/var/www/html"> … </Dorectory>一对容器(容器即相当于括号功能的一个封闭小模块),这个容器中是针对网页默认所在目录的配置,其中Require all granted 句表示授权所有用户访问,若我们要对客户端ip做限制需要先把这句注释掉。使用require句也可以限制客户端ip,这里我们使用的是order allow deny方式做的,这种方式更为普遍:

#Require all granted ---注释该句

order deny allow ---制定下面访问控制语句的读取顺序,后读的覆盖先读的

allow from 192.168.10.0/24 ---指定允许的客户端地址

deny from all ---指定拒绝的客户端地址

以上设置,由于order中设定的顺序是deny allow,所以在读取配置时,先读取下面的deny语句,再读取allow语句,后读的覆盖先读的,因此实现的结果是只允许10.0段的客户端访问,其他全部拒绝。当然我们也可以指定单个ip做允许。

systemctl restart httpd

重启服务后,可从客户端验证设置的生效

8.2.3 身份验证管理

除了可以限制客户端ip外,还可以要求客户端访问时必须使用账户、密码登录后才能打开网站,具体操作如下:

<directory "/var/www/html"> </directory>容器中写入:

authtype basic ---开启基本的身份验证功能

authname 163.com ---指定弹出对话窗口上显示的提示文字

authuserfile /etc/httpd/userList ---指定用户、密码文件

require valid-user ---用户文件中的所有用户,都允许访问

---require user pp qq ---仅允许文件中的指定用户

保存退出

以上,在配置文件中设置了路径访问时需要经过身份验证,并指定了验证文件的绝对路径,但是该用户文件需要手动创建,命令如下:

cd /etc/httpd

htpasswd -c userList pp ---创建用户文件,并加入用户, -c 创建

htpasswd userList qq ---加入用户,因为已创建,所以无需再用-c参数

htpasswd userList kk

chown apache.apache userList ---某些版本Linux,用户文件默认权限

不足,需要更改其所属信息

注:http设定的账号,无需是系统用户,可随意定义。

做完以上操作,即可重启服务,在客户端做验证了

systemctl restart httpd

客户端访问web时的登录页面如下:

如图可见,提示信息显示163.com即是配置文件中authname项指定的文字。输入正确的用户名、密码后即可打开页面。

有了访问控制和身份验证的设置后,我们可能会问了,客户端访问页面时,这二者是必须同时满足还是可以仅满足一项就可以打开页面了呢?其实,默认情况下是要求二者同时满足,客户端才可以打开页面。我们也可以在配置文件中写入satisfy any设置为二者满足其一就允许访问。具体如下:

vi /etc/httpd/conf/httpd.conf

<directory "/var/www/html"> </directory>容器中写入:

satisfy any ---设置二者满足其一即可访问

注:若设置为satisfy all 表示二者都必须满足,不该句,默认是all

systemctl restart httpd ---重启后客户端访问,以验证功能

8.2.4 其他参数解释

在配置文件的<directory "/var/www/html"></directory>容器中,还有很多默认的设置,我们未做解释,下面就来说明其功能:

options indexes ---开启本目录的浏览功能。当目录下没有指定的主页文件时,显示目录下内容,支持下载, -indexes表示关闭

options followsymlinks ---表示允许使用软链接,建立虚拟目录指向

注:-followsymlinks表示关闭

allowoverride none ---访问控制、身份验证以本配置文件中的设置为准

注:若设置为allowoverride all 则表示本配置文件中的设置失效,以目录下.htaccess 文件中的设置为准,称为访问控制文件

有了以上解释,我们来逐一验证:

首先,indexes表示浏览权限,即当目录下没有指定的主页文件(index.html)时,是否允许给客户端显示目录下的内容。我们可以cd到/var/www/html下,给index.html改名,然后在客户端查看效果。命令、效果如下:

cd /var/www/html

mv index.html inn

ls

客户端访问会发现显示的是apache默认的测试页,这是因为/var/www/html目录下没有主页时,apache会自动显示默认测试页,为了验证indexes浏览权限,我们现在把默认测试页去除:

cd /etc/httpd/conf.d

mv welcome.conf welcome.conf.old ---给默认主页配置文件改名,即失效了

注:/etc/httpd/conf.d/welcome.conf是测试页的配置文件,并非测试页本身,该文件里面指定了测试页的实际位置。

systemctl restart httpd

重启服务后,客户端再次访问页面即会显示目录下的内容了:

总结可知,indexes表示当目录下没有主页文件时,显示目录下的所有文件。我们也可以冲着某个文件点击右键,选择另存为,即下载该文件,所以说indexes也支持下载。

再来介绍一下followsymlinks,表示允许目录下使用软链接,指向其他位置内的目录。案例如下:

cd /var/www/html

ln -s /var movie ---建立软链接

客户端访问: http://192.168.10.1/movie ---访问软链接,查看到/var下内容。由此可证明软链接功能的生效。

最后,来看一下allowoverride的功能,当设置为allowoverride all时,说明配置文件中关于访问控制、身份验证的语句失效,转而遵守目录下的.access文件中的设置。我们可以操作以下实验来验证:

cd /var/www/html

vi .access ---写入

orderdeny,allow

allow from 192.168.10.10

deny from all

authtype basic

authname 163

authuserfile /etc/httpd/userList

require user pp qq ---仅允许pp、qq访问

satisfy all

vi /etc/httpd/conf/httpd.conf

<directory "/var/www/html"> </directory>容器中设置:

allowoverride all

systemctl restart httpd

重启服务后,客户端访问可验证是.access文件中的设置生效了。

服务器端改回allowoverride none后,重启服务,可证明.access文件失效了。

原文发布于微信公众号 - 教主小筑(gh_e0879483602d)

原文发表时间:2019-05-27

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

扫码关注云+社区

领取腾讯云代金券