共计 15416 个字符,预计需要花费 39 分钟才能阅读完成。
httpd 2.2 常见配置
要配置 http 服务的配置文件,先备份一下,养成良好习惯 , 如果误操作导致 http 服务起不来,就可以将备份的主配置文件重新覆盖一下
httpd配置文件的组成:有三大部分组成,其实配置文件里面的内容放的顺序没有规定,之所以把它划分为三部分是为了查看更加清晰
# grep “Section” /etc/httpd/conf/httpd.conf
### Section 1: Global Environment 全局配置
### Section 2: ‘Main’ server configuration 主服务器配置
### Section 3: Virtual Hosts 虚拟主机
配置格式:directive value
directive: 不区分字符大小写
value: 为路径时,是否区分大小写,取决于文件系统
了解 http 服务的配置文件是学好 http 服务的基础,下面我们就一起来看一下 http 服务的配置文件有哪些功能
解决启动 httpd 服务时报错的问题
在启动 http 服务时,总会有一些错误,如图:
修改 httpd服务的配置文件
vim /etc/httpd/conf/httpd.conf,进入到配置文件之后搜索ServerName,然后按照格式随便添加一个域名就行了
然后再重启服务,这样就没有报错了
2、显示服务器版本信息
ServerTokens Major|Minor|Min[imal]|Prod[uctOnly]|OS|Full
ServerTokens Prod[uctOnly] :Server: Apache
ServerTokens Major: Server: Apache/2
ServerTokens Minor: Server: Apache/2.0
ServerTokens Min[imal]: Server: Apache/2.0.41
ServerTokens OS: Server: Apache/2.0.41 (Unix)
ServerTokens Full (or not specified): Server: Apache/2.0.41 (Unix) PHP/4.2.2 MyMod/1.2
This setting applies to the entire server and cannot be enabled or disabled on a virtualhost-by-virtualhostbasis.
After version 2.0.44, this directive also controls the information presented by the ServerSignaturedirective.
建议使用:ServerTokens Prod,这时因为别人可以通过远程来查看你的服务器版本信息,知道了你的服务器版本信息,就可以针对你的服务器版本来攻击你,使用了Prod,就会隐藏你的服务器版本信息
curl -I 192.168.10.135 可以显示服务器版本信息
修改版本信息(修改配置文件)
vim /etc/httpd/conf/httpd.conf,进入到配置文件后,搜索 ServerTokens, 如图:
改完之后,在重新加载配置文件,service httpd reload, 再次查看服务器版本信息
服务器版本隐藏
3.修改监听的 IP 和Port
Listen [IP:]PORT
(1) 省略 IP 表示为本机所有IP
(2) Listen指令至少一个,可重复出现多次
Listen 80
Listen 8080
在 httpd服务的配置文件当中,监听的端口默认为 80 端口,你也可以人为的修改端口,比如修改成 9527 端口
重新加载 httpd服务service httpd reload,再查看一下端口号ss -ntl
没有 80端口,此时监听 http 服务的是 9527 端口,此时你在访问时就要指定端口号了,不然会访问失败
当然你也可以将改端口号绑定在指定的本机 IP地址上,不指定就默认绑定在本机的所有 IP 地址上,如图:将 80 端口绑定在本机的 192.168.10.135 上,将 9527 端口绑定在 172.17.0.182 上
然后再重新加载 httpd服务,查看端口号
这样别人访问时就必须指定端口号了,因为 192.168.10.135绑定在 80 端口上,不指定就默认为 80 端口,所以能访问成功,而 172.17.0.182 绑定在 9527 端口上,这时你不指定就不能访问了
示例:
Listen 192.168.1.100:8080
Listen 80
查看服务对应的端口
4. 持久连接
Persistent Connection:连接建立,每个资源获取完成后不会断开连接,而是继续等待其它的请求完成,默认关闭持久连接
断开条件:数量限制:100
时间限制:以秒为单位,httpd-2.4 支持毫秒级
副作用:对并发访问量较大的服务器,持久连接功能会使用有些请求得不到响应
折衷:使用较短的持久连接时间
设置:KeepAlive On|Off
KeepAlive Timeout15
MaxKeepAlive Requests100
测试:telnet WEB_SERVER_IP PORT
GET /URL HTTP/1.1
Host: WEB_SERVER_IP
如果不配置 http服务配置文件的话,默认只能访问一个资源,就断开连接
在 http 服务配置文件将 KeepAlive off 改为KeepAlive on
再去访问资源时就能够连续访问多个资源,而不断开连接
5、MPM(Multi-Processing Module)多路处理模块
prefork, worker, event(试验阶段)
httpd-2.2不支持同时编译多个模块,所以只能编译时选定一个;rpm安装的包提供三个二进制程序文件,分别用于实现对不同 MPM 机制的支持
确认方法:
psaux | grep httpd
默认为 /usr/sbin/httpd, 即 prefork 模式
查看静态编译的模块
httpd -l或httpd.worker -l
查看静态编译及动态装载的模块
httpd –M或httpd.worker -M
动态模块路径
/usr/lib64/httpd/modules/动态模块路径
更换使用的 httpd 程序:
vim /etc/sysconfig/httpd
HTTPD=/usr/sbin/httpd.worker
重启服务生效
pstree -p|grep httpd查看进程和线程
prefork 的默认配置:
<IfModule prefork.c>
StartServers 8 开启的服务器(表现为开启了 http 服务,运行了 8 个httpd主程序)
MinSpareServers 5 最小空闲服务器
MaxSpareServers 20 最大空闲服务器
ServerLimit 256 最多进程数 , 最大20000
MaxClients 256 最大并发
MaxRequestsPerChild 4000 子进程最多能处理的请求数量。在处理 MaxRequestsPerChild 个请求之后 , 子进程将会被父进程终止,这时候子进程占用的内存就会释放 ( 为0时永远不释放)
</IfModule>
worker 的默认配置:
<IfModule worker.c>
StartServers 4
MaxClients 300
MinSpareThreads 25
MaxSpareThreads 75
ThreadsPerChild 25
MaxRequestsPerChild 0 无限制
</IfModule>
将来开启了 http服务就会运行 4 个httpd.worker程序,每个主程序包含 25 个线程,所以总共有 100 个线程,但是支持最多的空闲线程只有 75 个,所以要杀死一个 httpd.worker 程序,所以当你开启了 http 服务,就只有 3 个httpd.worker程序运行
测试性能
ab -c 100 -n 1000 http://192.168.10.135/a.jpg总共 1000 个请求访问 a.jpg,并发同时能够访问100 个,注意:访问的页面尽量大一些,不然无法测试性能
ll /var/www/html
1.测prefork,将主程序改为httpd
经过几次测试,prefork每秒能够处理的次数大约为 520 次
2.测试worker,将主程序改为httpd.worker
经过几次测试,worker每秒能够处理的请求次数大约为 512 次
由此可以看出 prefork和 work 的性能差不多
更多详情见请继续阅读下一页的精彩内容:http://www.linuxidc.com/Linux/2017-10/147903p2.htm
6、DSO:Dynamic Shared Object(动态共享对象)
加载动态模块配置
/etc/httpd/conf/httpd.conf
配置指定实现模块加载格式:
LoadModule<mod_name> <mod_path>
模块文件路径可使用相对路径:
相对于 ServerRoot(默认/etc/httpd)
示例:
LoadModuleauth_basic_module
modules/mod_auth_basic.so
http服务要实现一个功能,要看他的模块是否加载,在 http 服务的配置文件中,如果你把某个模块给注释掉,然后再重启 http 服务,那么 http 服务就没有了这个模块所对应的功能,例如:我将 modules/mod_auth_basic.so 这个模块给注释掉,如图:
重启服务,再查看所有的动态和静态模块就查不到了,http服务就没有这个 basic 验证的功能了
7、定义 ’Main’ server 的文档页面路径
DocumentRoot”/path”
文档路径映射:
DocumentRoot指向的路径为 URL 路径的起始位置
示例:
DocumentRoot”/app/data”
http://HOST:PORT/test/index.html
–> /app/data/test/index.html
注意:SELinux和 iptables 的状态
更改 ’Main’ server 的文档页面路径
默认是 /var/www/html,如图我将默认的路径给注释掉,更改为/app/data
然后再 /app/data目录下建一个index.html,再在里面写点东西
vim /app/data/index.html
在重启服务,再来访问,访问的页面就是在 /app/data下编辑的 index.html 的内容,不是 /var/www/index.html 的内容了
8、定义站点主页面
DirectoryIndex index.html index.html.var
在 http服务的配置文件中,定义了站点的主页面
访问站点的主页面先找 index.html,再找 index.html.var 如果都找不到,就会访问一个错误页面
为什么会返回一个错的页面呢,这是因为在另外一个配置文件 /etc/httpd/conf.d/welcome.conf做了配置
vim /etc/httpd/conf.d/welcome.conf
我在根目录下面建一个子目录 bbs,里面创建一个 index.html 文件,并写上内容
接下来我访问这个页面,能访问
如果把 bbs里面的 index.html 文件改个名a.html,再次去访问,竟然显示站点的文件列表,这样是很危险的
再点一下 a.html才能访问
所以应该在 http服务器的根目录下面以及其下面的子目录都建一个 index.html 或者 index.html.tar 文件,以防止这种现象出现
9. 站点访问控制常见机制
可基于两种机制指明对哪些资源进行何种访问控制
访问控制机制有两种:
1.客户端来源地址
2.用户账号
文件系统路径:
<Directory “/path”>目录
…
</Directory>
<File “/path/file”>具体的文件路径
…
</File>
<FileMatch”PATTERN”>正则表达式来匹配
…
</FileMatch>
URL 路径:
<Location “”>
…
</Location>
<LocationMatch””>
…
</LocationMatch>
示例:
<FilesMatch “\.(gif|jpe?g|png)$”>正则表达式
<Files “?at.*”> 通配符,?是任意的一个字符,.就是点,*是任意字符串
<Location /status> URL
<LocationMatch “/(extra|special)/data”> URL
httpd 2.2 常见配置
要配置 http 服务的配置文件,先备份一下,养成良好习惯 , 如果误操作导致 http 服务起不来,就可以将备份的主配置文件重新覆盖一下
httpd配置文件的组成:有三大部分组成,其实配置文件里面的内容放的顺序没有规定,之所以把它划分为三部分是为了查看更加清晰
# grep “Section” /etc/httpd/conf/httpd.conf
### Section 1: Global Environment 全局配置
### Section 2: ‘Main’ server configuration 主服务器配置
### Section 3: Virtual Hosts 虚拟主机
配置格式:directive value
directive: 不区分字符大小写
value: 为路径时,是否区分大小写,取决于文件系统
了解 http 服务的配置文件是学好 http 服务的基础,下面我们就一起来看一下 http 服务的配置文件有哪些功能
解决启动 httpd 服务时报错的问题
在启动 http 服务时,总会有一些错误,如图:
修改 httpd服务的配置文件
vim /etc/httpd/conf/httpd.conf,进入到配置文件之后搜索ServerName,然后按照格式随便添加一个域名就行了
然后再重启服务,这样就没有报错了
2、显示服务器版本信息
ServerTokens Major|Minor|Min[imal]|Prod[uctOnly]|OS|Full
ServerTokens Prod[uctOnly] :Server: Apache
ServerTokens Major: Server: Apache/2
ServerTokens Minor: Server: Apache/2.0
ServerTokens Min[imal]: Server: Apache/2.0.41
ServerTokens OS: Server: Apache/2.0.41 (Unix)
ServerTokens Full (or not specified): Server: Apache/2.0.41 (Unix) PHP/4.2.2 MyMod/1.2
This setting applies to the entire server and cannot be enabled or disabled on a virtualhost-by-virtualhostbasis.
After version 2.0.44, this directive also controls the information presented by the ServerSignaturedirective.
建议使用:ServerTokens Prod,这时因为别人可以通过远程来查看你的服务器版本信息,知道了你的服务器版本信息,就可以针对你的服务器版本来攻击你,使用了Prod,就会隐藏你的服务器版本信息
curl -I 192.168.10.135 可以显示服务器版本信息
修改版本信息(修改配置文件)
vim /etc/httpd/conf/httpd.conf,进入到配置文件后,搜索 ServerTokens, 如图:
改完之后,在重新加载配置文件,service httpd reload, 再次查看服务器版本信息
服务器版本隐藏
3.修改监听的 IP 和Port
Listen [IP:]PORT
(1) 省略 IP 表示为本机所有IP
(2) Listen指令至少一个,可重复出现多次
Listen 80
Listen 8080
在 httpd服务的配置文件当中,监听的端口默认为 80 端口,你也可以人为的修改端口,比如修改成 9527 端口
重新加载 httpd服务service httpd reload,再查看一下端口号ss -ntl
没有 80端口,此时监听 http 服务的是 9527 端口,此时你在访问时就要指定端口号了,不然会访问失败
当然你也可以将改端口号绑定在指定的本机 IP地址上,不指定就默认绑定在本机的所有 IP 地址上,如图:将 80 端口绑定在本机的 192.168.10.135 上,将 9527 端口绑定在 172.17.0.182 上
然后再重新加载 httpd服务,查看端口号
这样别人访问时就必须指定端口号了,因为 192.168.10.135绑定在 80 端口上,不指定就默认为 80 端口,所以能访问成功,而 172.17.0.182 绑定在 9527 端口上,这时你不指定就不能访问了
示例:
Listen 192.168.1.100:8080
Listen 80
查看服务对应的端口
4. 持久连接
Persistent Connection:连接建立,每个资源获取完成后不会断开连接,而是继续等待其它的请求完成,默认关闭持久连接
断开条件:数量限制:100
时间限制:以秒为单位,httpd-2.4 支持毫秒级
副作用:对并发访问量较大的服务器,持久连接功能会使用有些请求得不到响应
折衷:使用较短的持久连接时间
设置:KeepAlive On|Off
KeepAlive Timeout15
MaxKeepAlive Requests100
测试:telnet WEB_SERVER_IP PORT
GET /URL HTTP/1.1
Host: WEB_SERVER_IP
如果不配置 http服务配置文件的话,默认只能访问一个资源,就断开连接
在 http 服务配置文件将 KeepAlive off 改为KeepAlive on
再去访问资源时就能够连续访问多个资源,而不断开连接
5、MPM(Multi-Processing Module)多路处理模块
prefork, worker, event(试验阶段)
httpd-2.2不支持同时编译多个模块,所以只能编译时选定一个;rpm安装的包提供三个二进制程序文件,分别用于实现对不同 MPM 机制的支持
确认方法:
psaux | grep httpd
默认为 /usr/sbin/httpd, 即 prefork 模式
查看静态编译的模块
httpd -l或httpd.worker -l
查看静态编译及动态装载的模块
httpd –M或httpd.worker -M
动态模块路径
/usr/lib64/httpd/modules/动态模块路径
更换使用的 httpd 程序:
vim /etc/sysconfig/httpd
HTTPD=/usr/sbin/httpd.worker
重启服务生效
pstree -p|grep httpd查看进程和线程
prefork 的默认配置:
<IfModule prefork.c>
StartServers 8 开启的服务器(表现为开启了 http 服务,运行了 8 个httpd主程序)
MinSpareServers 5 最小空闲服务器
MaxSpareServers 20 最大空闲服务器
ServerLimit 256 最多进程数 , 最大20000
MaxClients 256 最大并发
MaxRequestsPerChild 4000 子进程最多能处理的请求数量。在处理 MaxRequestsPerChild 个请求之后 , 子进程将会被父进程终止,这时候子进程占用的内存就会释放 ( 为0时永远不释放)
</IfModule>
worker 的默认配置:
<IfModule worker.c>
StartServers 4
MaxClients 300
MinSpareThreads 25
MaxSpareThreads 75
ThreadsPerChild 25
MaxRequestsPerChild 0 无限制
</IfModule>
将来开启了 http服务就会运行 4 个httpd.worker程序,每个主程序包含 25 个线程,所以总共有 100 个线程,但是支持最多的空闲线程只有 75 个,所以要杀死一个 httpd.worker 程序,所以当你开启了 http 服务,就只有 3 个httpd.worker程序运行
测试性能
ab -c 100 -n 1000 http://192.168.10.135/a.jpg总共 1000 个请求访问 a.jpg,并发同时能够访问100 个,注意:访问的页面尽量大一些,不然无法测试性能
ll /var/www/html
1.测prefork,将主程序改为httpd
经过几次测试,prefork每秒能够处理的次数大约为 520 次
2.测试worker,将主程序改为httpd.worker
经过几次测试,worker每秒能够处理的请求次数大约为 512 次
由此可以看出 prefork和 work 的性能差不多
更多详情见请继续阅读下一页的精彩内容:http://www.linuxidc.com/Linux/2017-10/147903p2.htm
10、<Directory> 中 ” 基于源地址 ” 实现访问控制
(1) Options:后跟 1 个或多个以空白字符分隔的选项列表
在选项前的 +,–表示增加或删除指定选项
常见选项:
Indexes:指明的 URL 路径下不存在与定义的主页面资源相符的资源文件时,返回索引列表给用户
FollowSymLinks:允许访问符号链接文件所指向的源文件
None:全部禁用
All:全部允许
1.更改根目录的权限,对某个用户设置 acl 权限,或者设置根目录下文件的权限来实现访问控制
注意:设置 acl权限是对 apache 用户设置,因为访问资源是通过 apache 用户来访问的
2.也可以在主配置文件里配置,也可以在子配置文件中配置,为了方便管理,在子配置文件中配置/etc/httpd/conf.d/*.conf
在 /etc/httpd/conf.d/目录下随便创建一个以 conf 为结尾的配置文件,这就是 http 服务的子配置文件,假如说创建一个 test.conf 文件
vim /etc/httpd/conf.d/test.conf
如果什么都不加,就默认能够访问软链接,和不能子目录下的索引,也就是子目录的文件列表(在子目录下没有 index.html或者 index.html.tar 的情况下)
将根目录改为 /app/data
单独对根目录进行配置,其子目录也会继承根目录的配置
现在我想要拒绝能够访问软链接和拒绝显示子目录下的索引,如图,也可以写成 options none,不加 – 允许
重启服务,这样别人就不能访问你的软链接和子目录的索引了,而且根目录的子目录会继承父目录的配置,所以别人也不能访问子目录里的软链接和子目录下的子目录索引
f1是 fstab 的软链接,不能访问软链接
bbs是根目录下的子目录,bbs目录中没有 index/html 和index.html.tar,也不能访问目录的索引
f2是根目录的子目录下的软链接,也不能访问
bbs1是 bbs 的子目录,并且里面没有 index.html 或者 index.html.tar,也不能访问bbs1 的索引
也可以单独对根目录下的子目录进行配置,让其不继承对根目录的配置
f2是 bbs 目录下的软链接,又能访问了
bbs1是 bbs 的子目录,又能访问其索引了
(2) AllowOverride
与访问控制相关的哪些指令可以放在指定目录下的.htaccess(由 AccessFileName 指定)文件中,覆盖之前的配置指令
只对 <directory>语句有效
AllowOverride All: 所有指令都有效
AllowOverride None:.htaccess 文件无效
AllowOverride AuthConfig Indexes除了 AuthConfig 和Indexes的其它指令都无法覆盖
注意:.htaccess这个文件必须在你所做了访问控制的目录里创建,如图:我对 /app/data 做了访问控制,所以要在 /app/data 下创建 .htaccess 覆盖之前的访问控制指令
vim /app/data/.htaccess在这个文件里设置配置指令来覆盖之前的配置指令,如图:拒绝了访问子目录的索引和访问软链接
如图:不能访问子目录的索引
如图:也不能访问软链接
(3)order 和 allow、deny(HTTP2.4 版本已经取消,使用别的方法代替)
放在 directory, .htaccess中
order:定义生效次序;写在后面的表示默认法则
Order allow,deny
Order deny,allow
Allow from, Deny from
来源地址:
IP
网络:172.16
172.16.0.0
172.16.0.0/16
172.16.0.0/255.255.0.0
还在 http服务的子配置文件来配置
vim /etc/htpd/conf.d/test.conf
<directory /app/data>
配置指令
</directory>
配置指令如下:
示例 1 :
order allow deny
allow from 192.168.10.188
deny from 192.168.10.200
允许和拒绝的毫无关系,所以 order后面的 allow 和deny次序无所谓,允许 192.168.10.188 访问,拒绝 192.168.10.200 访问
示例 2 :
order allow deny
allow from 192.168.10.0/14
deny from 192.168.10.200
允许的包括拒绝的,因为 order后面 deny 在最后,所以拒绝的生效,允许 192.168.10.0/24 这个网段里的所有 IP 地址访问,但除了192.168.10.200
示例 3
order deny allow
allow from 192.168.10.0/14
deny from 192.168.10.200
允许的包括拒绝的,因为 order后面 allow 放在最后,所以允许的生效,允许 192.168.10.0/24 这个网段里的所有 IP 地址访问
11. 日志设定
日志类型:
访问日志
错误日志
错误日志:
ErrorLoglogs/error_log
LogLevelwarn
loglevel可选值:
debug, info, notice, warn,error
crit, alert, emerg
访问日志:
定义日志格式:LogFormatformat strings
LogFormat”%h %l %u %t \”%r\” %>s %b \”%{Referer}i\” \”%{User-Agent}i\”” combined
自定义日志格式:
CustomLog logs/access_log combined
如图:将原本的日志格式注释掉,添加自定义的日志格式
然后再来访问一下,查看日志
参考帮助:http://httpd.apache.org/docs/2.2/mod/mod_log_config.html#formats
%h 客户端 IP 地址
%l 远程用户 , 启用 mod_ident 才有效,通常为减号“-“
%u 验证(basic,digest)远程用户 , 非登录访问时,为一个减号“-“
•%t 服务器收到请求时的时间
•%r First line of request,即表示请求报文的首行;记录了此次请求的 “ 方法 “,“URL” 以及协议版本
•%>s 响应状态码
•%b 响应报文的大小,单位是字节;不包括响应报文 http 首部
•%{Referer}i 请求报文中首部 “referer” 的值;即从哪个页面中的超链接跳转至当前页面的
•%{User-Agent}i 请求报文中首部 “User-Agent” 的值;即发出请求的应用程序
12、设定默认字符集
AddDefaultCharset UTF-8
中文字符集:GBK, GB2312, GB18030
设置指定的字符集(默认是 UTF-8),修改 http 服务的配置文件
查看指定的字符集
12、定义路径别名
格式:Alias /URL/ “/PATH/”
DocumentRoot”/www/htdocs”
http://www.linuxidc.com/download/bash.rpm
==>/www/htdocs/download/bash.rpm
Alias /download/ “/rpms/pub/”
http://www.linuxidc.com/download/bash.rpm
==>/rpms/pub/bash.rpm
http://www.linuxidc.com/images/logo.png
==>/www/htdocs/images/logo.png
定义路径别名:假如我访问根目录下的 bbs 就给你跳转到 /app/bbsdir 下的主页面
1.在 /app 下建一个目录bbsdir,在这个目录下创一个主页面文件index.html
mkdir /app/bbsdir
echo /app/bbdir > /app/bbsdir/index.html
2。改 http 服务的配置文件,我们还是改子配置文件
vim /etc/httpd/conf.d/test.conf
alias /bbs /app/bbsdir (注意这里的 /bbs 是相对路径,相对于/var/www/html)
然后重新加载服务 service httpd reload
3.访问根目录下的 bbs, 如图:确实跳转到了 /app/bbsdir 目录下的主页面
14、基于用户的访问控制
认证质询:WWW-Authenticate:响应码为401,拒绝客户端请求,并说明要求客户端提供账号和密码
认证:Authorization:客户端用户填入账号和密码后再次发送请求报文;认证通过时,则服务器发送响应的资源
认证方式两种:
basic:明文
digest:消息摘要认证 , 兼容性差
安全域:需要用户认证后方能访问的路径;应该通过名称对其进行标识,以便于告知用户认证的原因
用户的账号和密码:
虚拟账号:仅用于访问某服务时用到的认证标识
存储:文本文件,SQL数据库,ldap目录存储,nis等
basic 认证配置示例:
(1) 定义安全域
<Directory “/path”>
Options None
AllowOverride None
AuthType Basic
AuthName “String”
AuthUserFile “/PATH/HTTPD_USER_PASSWD_FILE”
Require user username1 username2 …
</Directory>
允许账号文件中的所有用户登录访问:
Require valid-user
(2)提供账号和密码存储(文本文件)
使用专用命令完成此类文件的创建及用户管理
htpasswd[options] /PATH/HTTPD_PASSWD_FILE username
-c:自动创建文件,仅应该在文件不存在时使用(注意创建第一个用户需要指定 -c,创建第二个用户是就不要指定-c 了,这样会覆盖创建的第一个用户)
-m:md5格式加密,默认方式
-s: sha格式加密
-D:删除指定用户
基于组账号进行认证
(1) 定义安全域
<Directory “/path”>
AuthTypeBasic
AuthName”String”
AuthUserFile”/PATH/HTTPD_USER_PASSWD_FILE”
AuthGroupFile”/PATH/HTTPD_GROUP_FILE”
Require group grpname1 grpname2 …
</Directory>
(2) 创建用户账号和组账号文件;(创建组账号文件不用命令创建,直接用vim,在写入每行的组用户)
组文件:每一行定义一个组
GRP_NAME: username1 username2 …
实验
1. 基于用户账号进行认证
(1)在 http 服务的子配置文件进行配置,如下图:对根目录下的 bbs 进行访问控制(我在 http 服务的主配置文件中定义的根目录是 /app/data),是基于basic 验证的,用户账号目录是 /etc.httpd/conf.d/.httpusers,允许用户http1 和http2访问。
(2)创建账号和密码,如图:创建 http1,http2 和http3这 3 个用户
(3)然后再去访问 web 服务器根目录下的 bbs 目录,如图:这时访问 web 服务根目录下 bbs 目录,就不会直接打开 bbs 目录下的主页面了,需要输入用户和密码
根据我们在 http服务的子配置文件的配置,用户 http1 和http2能够访问,http3不能够访问
先来验证用户 http1,能够访问
再来测试用户 http3,不能访问
2. 基于组账号进行认证
(1)在 http 服务的子配置文件里对根目录下的 bbs 目录进行访问控制,如下图:访问 bbs 目录需要进行 basic 验证,定义一个用户目录,定义一个组用户目录,允许组 group1 里的用户访问 bbs 目录
(2)在定义的用户目录创建用户账号并指定密码
(3)在定义的组用户目录下设置每个组中的用户
(4)测试,访问 web 服务器根目录下的 bbs 目录,根据在子配置文件做的访问控制,允许组 group1 里的用户访问,group1里的用户有 http1 和http2,所以 http1 和http2能够访问 bbs 目录下的主页面,http3不能访问,先测试 http1,如图:成功访问,http1 测试成功了,http2就不用测试了,直接测试http3
测试 http3,不能够访问
远程客户端和用户验证的控制
Satisfy ALL|Any
ALL 客户机 IP 和用户验证都需要通过才可以
Any客户机 IP 和用户验证 , 有一个满足即可
如图:在 http服务的子配置文件中,对根目录下的 bbs 目录做了访问控制,对客户机 ip 和用户进行验证,并且都需要通过才行
每个组中的用户
加载 http服务,然后测试,
15、虚拟主机(在一个虚拟主机上可以建立多个站点)
站点标识:socket
IP相同,但端口不同
IP不同,但端口均为默认端口
FQDN不同;
请求报文中首部
Host: www.linuxidc.com
有三种实现方案:
1.基于 ip:为每个虚拟主机准备至少一个ip 地址
2.基于port:为每个虚拟主机使用至少一个独立的port
3.基于FQDN:为每个虚拟主机使用至少一个FQDN
注意:一般虚拟机不要与 main主机混用;因此,要使用虚拟主机,一般先禁用 main 主机
禁用方法:注释中心主机的 DocumentRoot指令即可
虚拟主机的配置方法:
<VirtualHostIP:PORT>
ServerNameFQDN
DocumentRoot”/path”
</VirtualHost>
建议:上述配置存放在独立的配置文件中
其它可用指令:
ServerAlias:虚拟主机的别名;可多次使用
ErrorLog:错误日志
CustomLog:访问日志
<Directory “/path”>
</Directory>
Alias
(1)配置基于 ip 的虚拟主机
1.在你的一个网卡上添加 3 个地址
2.设置站点
在 /app下建立 3 个目录,将来作为对应 3 个IP地址的站点
3.在 http 服务的子配置文件配置虚拟主机(配置虚拟主机可以参照 http 服务的主配置文件)
cat /etc/httpd/conf/httpd.conf 参照格式在最后面
参照上图的格式来配置虚拟主机
4.重新加载 http 服务,测试
5.在客户端,配置 dns 域名解析,就可以使用域名来访问站点了
编辑 /etc/hosts文件,模拟 dns 解析
接着就可以用域名来访问站点了
(2)配置基于端口的虚拟主机
配置一个虚拟主机就要消耗一个 IP 地址,如果基于 IP 地址来配置虚拟主机就太浪费 IP 地址了,而基于端口来配置虚拟主机,只需要消耗一个 IP 地址,将一个 IP 地址绑定在多个端口上面,这样来配置多台虚拟主机。
1.1.设置站点,参考配置基于 ip 地址的虚拟主机的第二步
2.在 http 服务的子配置文件里配置多台虚拟主机,如图:*代表本机的 IP 地址,本机的 IP 地址绑定不同的端口
3.重新加载 http 服务,通过访问不同的端口就可以访问不同的站点
4. 在客户端,配置 dns 域名解析,就可以使用域名在加上端口来访问站点了
编辑 /etc/hosts文件,模拟 dns 解析
(3)配置基于 FQDN 的虚拟主机
现在我们在访问一个站点都是通过访问域名来访问的,所以前两种方法来配置虚拟主机很少用,通常使用基于域名的方式来配置虚拟主机
如果在在请求报文的首部加上你要访问的站点,web服务器服务器通过分析你的请求报文首部来返回给你结果
1. 设置站点,参考配置基于 ip 地址的虚拟主机的第二步
2. 在 http 服务的子配置文件来配置基于域名的虚拟主机
vim /etc/httpd/con.d/test.conf
3. 在客户端配置 dns 域名解析,来访问站点
编辑 /etc/hosts文件,模拟 dns 域名解析
4. 通过域名来访问不同的站点
5. 查看日志文件,看看是否生成
6. 在 http 服务的子配置文件中,哪个站点排在第一个谁就是默认站点
16、status 页面(可以了解当前 web 服务器的工作的情况)
LoadModule status_module modules/mod_status.so
<Location /server-status>
SetHandler server-status
Order allow,deny
Allow from 172.16
</Location>
ExtendedStatus On 显示扩展信息
了解 web 服务器的工作情况,先查看 status_mdule 模块是否启动,再修改 http 服务的主配置文件
httpd -M|grep status 查看 status_module 模块是否启动,如果没有启动的话,要在 http 服务的主配置文件里添加该模块,如图:已经启动
vim /etc/httpd/conf/httpd.conf 修改 http 服务的主配置文件
重新加载一下 http服务,然后再去访问,如图:就可以查看 web 服务器的工作情况
如果还想显示当前 web服务器更加详细的工作情况,再修改一下 http 服务的主配置文件,如图:
重新加载一下 http服务,再去查看一下当前 web 服务器的工作情况,就更加详细了,如图:
好了,今天的内容就到这里,下期再见。
本文永久更新链接地址:http://www.linuxidc.com/Linux/2017-10/147903.htm