httpd服务的配置及应用
一、httpd服务的配置文件
httpd服务的主配置文件通常为httpd根目录下的conf/httpd.conf文件,通过yum安装的httpd服务的主配置路径通常如下:
httpd-2.2:/etc/httpd/conf/httpd.conf
httpd-2.4:/etc/httpd/conf/httpd.conf
主配置文件的格式大体分为三部分:
Section 1: Global Environment
Section 2: 'Main' server configuration
Section 3: Virtual Hosts
但httpd-2.4版本中删除了相应的描述,不过大体与httpd-2.2相同。
另外除了主配置文件之外,也存在着其他的配置目录路径,通常在主配置文件中会使用Include conf.d/*.conf
、Include conf.modules.d/*.conf
(httpd-2.4)类似的语句去调用对应的目录下的配置文件,其路径格式为相对路径,根目录由主配置文件中的Serverroot决定。
本文案例基于 Centos 7.4 httpd-2.4。
二、httpd服务的基础配置
1、修改监听的IP地址和接口
在主配置文件中,httpd服务监听IP地址和接口的语句格式为:
Listen [IP-address:]portnumber [protocol]
此语句的使用有以下几点注意事项:
- IP-address可省略,表示0.0.0.0匹配全部IP;
- 此指令Listen可重复出现多次监听多个IP地址和端口;
- 修改监听的socket后,需重启服务进程方可生效;
- 若限制其必须通过ssl通信时,protocol需定义为https;
使用案例:
[root@localhost ~]# vim /etc/httpd/conf/httpd.conf
Listen 80
Listen 192.168.0.109:8080 #新增监听端口8080
[root@localhost ~]# systemctl restart httpd
[root@localhost ~]# ss -tnl
State Recv-Q Send-Q Local Address:Port Peer Address:Port
LISTEN 0 128 192.168.0.109:8080 *:*
LISTEN 0 128 *:22 *:*
LISTEN 0 100 127.0.0.1:25 *:*
LISTEN 0 128 :::80 :::*
LISTEN 0 128 :::22 :::*
LISTEN 0 100 ::1:25 :::*
2、使用长连接
长连接指的是tcp链接建立之后,每个资源获取完成后不全断开连接,而是继续等待其他资源请求;但是对于并发访问量较大的服务器,长连接的使用会使得后续某些请求无法得到正常的响应。对于这种情况, 可通过使用较短的长连接超时时长和设置较少的长连接请求数来缓解。
其配置命令为:
keepalive On|off #是否启动长连接
keepAliveTimeout 15 #长连接超时时间
MaxKeepAliveRequests 100 #最多保持多少个长连接请求
使用案例:
[root@localhost ~]# vim /etc/httpd/conf.d/keepalive.conf
KeepAlive on
KeepAliveTimeout 30
MaxKeepAliveRequests 100
[root@localhost ~]# systemctl restart httpd #重启服务
[c:\~]$ telnet 192.168.0.109 80 #在电脑终端用telnet测试连接性
Connecting to 192.168.0.109:80...
Connection established.
To escape to local shell, press 'Ctrl+Alt+]'.
GET /index.html HTTP/1.1
Host:192.168.0.109
HTTP/1.1 200 OK
Date: Tue, 01 May 2018 10:06:06 GMT
Server: Apache/2.4.6 (CentOS)
Last-Modified: Tue, 01 May 2018 10:03:41 GMT
ETag: "d-56b2215c57e7e"
Accept-Ranges: bytes
Content-Length: 13
Content-Type: text/html; charset=UTF-8
hello,world/
GET /index2.html HTTP/1.1 #启动了长连接后,可以再次发起请求,直到到达超时时间;不启动的话,完成一次请求报文后即会退出telnet。
Host:192.168.0.109
HTTP/1.1 200 OK
Date: Tue, 01 May 2018 10:06:39 GMT
Server: Apache/2.4.6 (CentOS)
Last-Modified: Tue, 01 May 2018 10:05:43 GMT
ETag: "15-56b221cfe406e"
Accept-Ranges: bytes
Content-Length: 21
Content-Type: text/html; charset=UTF-8
welcome to my office
3、定义web目录
在httpd服务的主配置文件中,默认情况下DocumentRoot "/var/www/html"
定义了默认web站点目录的路径。
如需自定义默认的目录,需要找如下格式进行添加:
httpd-2.2:
<Directory "/PATH/TO/FILE">
Options Indexes FollowSymLinks
AllowOverride None
Order allow,deny
Allow from all
</Directory>
httpd-2.4:
<Directory "/PATH/TO/FILE">
Options Indexes FollowSymLinks
AllowOverride None
Require all granted
</Directory>
- options 包括以下可选参数:
参数 | 说明 |
---|---|
Indexes | 允许目录浏览,当客户仅指定要访问的目录,但没有指定要访问的文件,且目录下不存在默认文档时,显示该目录中的文件及子目录列表索引 |
MultiViews | 允许内容协商的多重视图,允许返回指定的访问目录下的相关联的文件 |
All | All包含了除MultiViews之外的所有特性,如没有指定options,默认为All |
ExecCGI | 允许在该目录下执行CGI脚本 |
FollowSymLinks | 允许跟踪符号链接到源文件 |
Includes | 允许服务器端包含功能 |
IncludesNoExec | 允许服务器端包含功能,但禁止执行CGI脚本 |
None | 不调用options参数 |
AllowOverride
AllowOverride选项用于定义每个目录下.htaccess文件中的指令类型,但通常设置None。Order
Order选项用于定义缺省的访问权限与Allow和Deny语句的处理顺序。Allow/Deny
Allow和Deny语句可以针对客户机的域名或IP地址进行设置,以决定哪些客户机能够访问服务器。如:Allow from all或者Deny from 172.16.0.0/24等等。Require all granted
此为http-2.4中的允许所有人访问的格式。除此还可以禁止某个IP或域名的访问,如:Require not ip 1.1.1.1
、Require not host host.example.com
或者禁止所有人访问Require all denied
。
使用案例:
新建/data/html目录,编辑修改httpd服务,使其能够web访问/data/html目录下的test.html目录文件:
[root@localhost ~]# mkdir -pv /data/html #创建对应的web目录
mkdir: created directory ‘/data’
mkdir: created directory ‘/data/html’
[root@localhost ~]# vim /data/html/test.html #创建指定html文件
this is a test page.
[root@localhost ~]# chcon -R --reference /var/www/html/ /data/html/ #复制/var/www/html的selinux安全上下文到/data/html
[root@localhost ~]# vim /etc/httpd/conf/httpd.conf #编辑主配置文件
#DocumentRoot "/var/www/html" #注释原先默认的web根目录
DocumentRoot "/data/html" #指定新建的目录为web根目录
<Directory "/data/html"> #定义目录
AllowOverride none
Options none
Require all granted
</Directory>
[root@localhost ~]# systemctl restart httpd #重启httpd服务

三、httpd的访问控制
1、在Directory中基于IP地址实现访问控制
在http-2.2中基于IP地址的访问控制是利用allow和Deny参数来实现的,如下例子:
<Directory "/var/www/html">
Options Indexes FollowSymLinks
AllowOverride None
Order allow,deny
Allow from [IP|NetAddr]
Deny from [IP|NetAddr]
</Directory>
其中NetAddr的格式可类似:172.16、172.16.0.0、172.16.0.0/16、172.16.0.0/255.255.0.0。
而httpd-2.4中基于Ip地址访问的控制是利用Require参数来实现的,其中Require参数可混合使用,如下例子:
<Directory "/data/html">
AllowOverride none
Options none
<RequireAll>
Require ip [IP|NetAddr] #允许访问的IP或网段
Require not ip [IP|NetAddr] #拒绝访问的Ip或网段
</RequireAll>
</Directory>
此外httpd-2.4版本中还可以利用host名来进行访问控制,如:
<Directory "/data/html">
AllowOverride none
Options none
<RequireAll>
Require host google.com #只允许来自域名为google.com的主机访问;
Require not host www.magedu.com #不允许来自域名为www.magedu.com的主机访问;
</RequireAll>
</Directory>
使用案例:
禁止主机IP192.168.0.100和109访问相应的主机页面:
[root@localhost ~]# vim /etc/httpd/conf/httpd.conf
<VirtualHost 192.168.0.108:80>
DocumentRoot "/data/html"
<Directory "/data/html">
AllowOverride none
Options none
<RequireAll>
Require all granted #允许所有主机访问
Require not ip 192.168.0.110 192.168.0.100 #禁止匹配的Ip访问
</RequireAll>
</Directory>
</VirtualHost>
[root@localhost ~]# systemctl restart httpd



2、在Directory中基于用户的访问控制
在Directory中支持的认证方式有两种Basic明文认证和digest消息摘要认证,由于并不是所有浏览器都支持摘要认证,因此一般来说用的较多的是明文认证
首先利用htpasswd命令生成认证的配置文件:
[root@localhost ~]# htpasswd -cb /data/userpasswd charlie 123456
Adding password for user charlie
[root@localhost ~]# htpasswd -b /data/userpasswd wch magedu
Adding password for user wch
[root@localhost ~]# cat /data/userpasswd
charlie:$apr1$1.t1GT7Z$HFMLZT7SR5eF6i51efMo90
wch:$apr1$nzfsSQ4g$qvo8tPvRV5uwnAehOCmr9.
[root@localhost ~]# chcon -R --reference /var/www/ /data/userpasswd #修改userpasswd文件的安全上下文
随后编辑httpd的主配置文件,设置用户认证:
[root@localhost ~]# vim /etc/httpd/conf/httpd.conf
DocumentRoot "/data/html" #修改默认的web目录
<Directory "/data/html">
AllowOverride none
Options none
AuthType Basic #设置认证类型为Basic
AuthName "welcome to my server." #设置认证提示
AuthUserFile "/data/userpasswd" #指定认证文件的路径
Require user charlie wch #指定允许访问的认证用户
</Directory>


3、基于域的用户访问控制
httpd服务除了根据用户做访问控制之外,还能将用户划分为相应的域组,并根据域组来做相应的访问控制。下面为以刚才演示的用户控制为背景做的域组访问控制示列:
首先创建域组文件:
[root@localhost ~]# vim /data/Usergroup
group1:charlie
group2:wch
编辑httpd的主配置文件:
[root@localhost ~]# vim /etc/httpd/conf/httpd.conf
DocumentRoot "/data/html"
<Directory "/data/html">
AllowOverride none
Options none
AuthType Basic
AuthName "welcome to my server"
AuthUserFile "/data/userpasswd"
AuthGroupFile "/data/Usergroup" #添加域组文件
Require group group1 #选择允许认证访问的域组
</Directory>


四、httpd的虚拟主机VirtualHost
学习了如何在定义httpd的web目录后,大家肯定都会跃跃欲试。但是经历实操之后,大家可能就会去想着创建第二个web目录,然后就发现创建的第二个web目录无法被正常读取访问。此时就需要利用到httpd服务的VirtualHost功能来帮助大家完成这个需求。
Apache虚拟主机就是在一个Apache服务器上配置多个虚拟主机,实现一个服务器提供多站点服务,其实就是访问同一个服务器上的不同目录。
虚拟主机支持三种访问方式:
- 基于IP的方式,需为每个虚拟主机准备至少一个Ip地址,其配置方式如下:
<VirtualHost 172.16.100.6:80>
ServerName www.a.com
DocumentRoot "/www/a.com/htdocs" #虚拟主机的web目录
</VirtualHost>
使用案例:
利用virtualhost基于IP的方式实现/var/www/html目录和/data/html目录下的网页文件的同时访问:
[root@localhost ~]# ifconfig ens33:1 192.168.0.108/24 #添加第二个Ip地址
[root@localhost ~]# ifconfig
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.0.109 netmask 255.255.255.0 broadcast 192.168.0.255
inet6 fe80::b2a9:6dff:b894:5e61 prefixlen 64 scopeid 0x20<link>
ether 00:0c:29:74:5b:1f txqueuelen 1000 (Ethernet)
RX packets 28472 bytes 38273549 (36.5 MiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 4913 bytes 588675 (574.8 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
ens33:1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.0.108 netmask 255.255.255.0 broadcast 192.168.0.255
ether 00:0c:29:74:5b:1f txqueuelen 1000 (Ethernet)
[root@localhost ~]# vim /etc/httpd/conf/httpd.conf
<VirtualHost 192.168.0.108:80>
DocumentRoot "/data/html" #设置此虚拟主机的web根目录
<Directory "/data/html">
AllowOverride none
Options none
Require all granted
</Directory>
</VirtualHost>
[root@localhost ~]# systemctl restart httpd

- 基于port的方式,需要为每个虚拟主机使用至少一个独立的port,其配置方式如下:
Listen 8080 #在指定其他端口时,需添加监听语句
<VirtualHost 172.16.100.6:8080> #指定不同的port
ServerName www.a.com
DocumentRoot "/www/a.com/htdocs"
</VirtualHost>
使用案例:
利用不同的端口,分别访问/var/www/html和/data/html目录下的网页文件:
[root@localhost ~]# vim /etc/httpd/conf/httpd.conf
Documentroot /var/www/html
Listen 8080 #监听8080端口
<virtualhost *:8080> 定义8080端口的虚拟主机
Documentroot /data/html #设置虚拟主机的web根目录
<Directory "/data/html"> #设置目录
AllowOverride none
Options none
Require all granted #允许所有人访问
</Directory>
</virtualhost>
[root@localhost ~]# systemctl restart httpd

- 基于FQDN的方式,为每个虚拟主机使用至少一个FQDN,其配置方式如下:
NameVirtualHost 172.16.100.6:80 #如果是httpd-2.2,需要在配置文件中添加此句
<VirtualHost 172.16.100.6:80>
ServerName www.a.com #指定FQDN
DocumentRoot "/www/a.com/htdocs"
</VirtualHost>
<VirtualHost 172.16.100.6:80>
ServerName www.b.net #指定FQDN
DocumentRoot "/www/b.net/htdocs"
</VirtualHost>
使用案例:
根据不同的FQDN显示不同的web页面:
[root@localhost ~]# vim /etc/httpd/conf/httpd.conf
<virtualhost *:80>
Servername www.a.com #设置域名为www.a.com
Documentroot /data/html #此虚拟主机对应/data/html目录
<Directory "/data/html">
AllowOverride none
Options none
Require all granted
</Directory>
</virtualhost>
<virtualhost *:80>
Servername www.b.com #设置域名为www.b.com
Documentroot /data/html2 #此虚拟主机对应/data/html2目录
<Directory "/data/html2">
AllowOverride none
Options none
Require all granted
</Directory>
</virtualhost>
[root@localhost ~]# systemctl restart httpd
在测试的linux主机上编辑/etc/hosts文件:
[root@localhost ~]# vim /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.0.109 www.a.com #添加www.a.com的域名指向192.168.0.109
192.168.0.109 www.b.com #添加www.b.com的域名指向192.168.0.109
telnet 192.168.0.109 的80端口测试结果得:
[root@localhost ~]# telnet 192.168.0.109 80
Trying 192.168.0.109...
Connected to 192.168.0.109.
Escape character is '^]'.
GET /index.html HTTP/1.1
Host:www.a.com #访问的URL为www.a.com
HTTP/1.1 200 OK
Date: Tue, 01 May 2018 09:33:20 GMT
Server: Apache/2.4.6 (CentOS)
Last-Modified: Tue, 01 May 2018 09:08:34 GMT
ETag: "28-56b21509f361c"
Accept-Ranges: bytes
Content-Length: 40
Content-Type: text/html; charset=UTF-8
This is the index.html from /data/html. #显示www.a.com对应的web内容
[root@localhost ~]# telnet 192.168.0.109 80
Trying 192.168.0.109...
Connected to 192.168.0.109.
Escape character is '^]'.
GET /index.html HTTP/1.1
Host:www.b.com #访问的URL为www.b.com
HTTP/1.1 200 OK
Date: Tue, 01 May 2018 09:27:24 GMT
Server: Apache/2.4.6 (CentOS)
Last-Modified: Tue, 01 May 2018 09:21:38 GMT
ETag: "29-56b217f57a00c"
Accept-Ranges: bytes
Content-Length: 41
Content-Type: text/html; charset=UTF-8
This is the index.html from /data/html2. #显示了www.b.com对应的web内容
参考链接:
https://httpd.apache.org/docs/2.4/mod/mod_authz_core.html#require
http://httpd.apache.org/docs/2.4/mod/mod_authz_core.html
httpd服务的配置及应用的更多相关文章
- Httpd服务入门知识-Httpd服务常见配置案例之虚拟主机
Httpd服务入门知识-Httpd服务常见配置案例之虚拟主机 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.虚拟主机实现方案 1>.Apache httpd 有三种实现虚 ...
- Httpd服务入门知识-Httpd服务常见配置案例之Apache的工作做状态status页面
Httpd服务入门知识-Httpd服务常见配置案例之Apache的工作做状态status页面 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.status功能概述 status页 ...
- Httpd服务入门知识-Httpd服务常见配置案例之ServerSignature指令选项
Httpd服务入门知识-Httpd服务常见配置案例之ServerSignature指令选项 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.ServerSignature指令概述 ...
- Httpd服务入门知识-Httpd服务常见配置案例之实现用户家目录的http共享
Httpd服务入门知识-Httpd服务常见配置案例之实现用户家目录的http共享 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.实现用户家目录的http共享前提 在配置家目录共 ...
- Httpd服务入门知识-Httpd服务常见配置案例之定义路径别名
Httpd服务入门知识-Httpd服务常见配置案例之定义路径别名 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.创建测试数据 [root@node101.yinzhengj ...
- Httpd服务入门知识-Httpd服务常见配置案例之设定默认字符集
Httpd服务入门知识-Httpd服务常见配置案例之设定默认字符集 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.查看生产环境中使用的字符集案例 1>.查看腾讯设置的默认 ...
- Httpd服务入门知识-Httpd服务常见配置案例之日志设定
Httpd服务入门知识-Httpd服务常见配置案例之日志设定 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.日志类型 [root@node101.yinzhengjie.org ...
- Httpd服务入门知识-Httpd服务常见配置案例之基于客户端来源地址实现访问控制
Httpd服务入门知识-Httpd服务常见配置案例之基于客户端来源地址实现访问控制 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.Options 1>.OPTIONS指 ...
- Httpd服务入门知识-Httpd服务常见配置案例之基于用户账号实现访问控制
Httpd服务入门知识-Httpd服务常见配置案例之基于用户账号实现访问控制 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.基于用户的访问控制概述 认证质询: WWW-Auth ...
- Httpd服务入门知识-Httpd服务常见配置案例之定义站点主页面及错误页面配置
Httpd服务入门知识-Httpd服务常见配置案例之定义站点主页面及错误页面配置 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.定义站点主页面 [root@node101.yi ...
随机推荐
- fastjson在反序列化时,解析对象中的继承,抽象类处理
LimitActionConfig是ActionConfig的子类,RuleConfig的有个属性是ActionConfig,需要反序列化成LimitActionConfig ParserConfig ...
- js回文数的四种判断方法
目录 1. 字符串的转换 1.1 简单点,使用高阶函数来完成 1.2 从后往前循环字符串数组 1.3 以中间数为节点,判断左右两边首尾是否相等 2. 数字转换 2.1 求模得尾数,除10得整数 判断一 ...
- RNN 权重共享
之前在几篇博客中说到了权重共享,但都觉得不够全面,这里做个专题,以后有新的理解都在此更新. 1. 减少运算只是锦上添花之前说到权重共享可以减少运算,是的,但这样说好像是可有可无,只是运算量大小的问题, ...
- Hash冲突的线性探测开放地址法
在实际应用中,无论如何构造哈希函数,冲突是无法完全避免的. 开放地址法 这个方法的基本思想是:当发生地址冲突时,按照某种方法继续探测哈希表中的其他存储单元,直到找到空位置为止.这个过程可用下式描述: ...
- openssl制作证书全过程 + 部分修改
一:生成CA证书 目前不使用第三方权威机构的CA来认证,自己充当CA的角色. 先决条件:从openssl官网下载www.openssl.org 安装open ...
- aardio调用dll
刚知道aardio这个不错的玩具,可惜作者停更了,贴一个调用dll的例子备用吧 vc代码 extern "C" _declspec(dllexport) int _stdcall ...
- 国内pip源及pip命令
更换PIP源 PIP源在国外,速度慢,可以更换为国内源,以下是国内一些常用的PIP源. 豆瓣(douban) http://pypi.douban.com/simple/ (推荐) 清华大学 http ...
- Docker网络模式介绍
一.概述 docker的网络驱动有很多种方式,按照docker官网给出的网络解决方案就有6种,分别是:bridge.host.overlay.macvlan.none.Network plugins, ...
- EasyDSS高性能RTMP、HLS(m3u8)、HTTP-FLV、RTSP流媒体服务器功能简介---实时数据统计报表、视频文件上传、点播、分享、集成
熟悉EasyDSS流媒体服务器的小伙伴应该都知道,EasyDSS通过将EasyRTMP推流的直播流进行直播转码.智能处理.视频分发,再通过 CDN 分发节点分发到终端播放 SDK为观众播放高清低延时的 ...
- CentOS 7上重新编译安装nginx
CentOS 7的源所提供的nginx几乎不包含任何扩展模块:为了能够使用一些扩展模块,我们需要从源代码重新编译安装nginx. 目前最新版的源代码是1.6.1.下载解压后先不要急着configure ...