前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >第八章 web服务之apache (1)

第八章 web服务之apache (1)

作者头像
晓天
发布2019-07-04 14:29:13
5370
发布2019-07-04 14:29:13
举报

第八章 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文件失效了。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-05-27,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 教主小筑 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档