阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

httpd2.2常见配置及功能

157次阅读
没有评论

共计 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 服务的配置文件有哪些功能

  1. 解决启动 httpd 服务时报错的问题

在启动 http 服务时,总会有一些错误,如图:

httpd2.2 常见配置及功能

修改 httpd服务的配置文件

vim /etc/httpd/conf/httpd.conf,进入到配置文件之后搜索ServerName,然后按照格式随便添加一个域名就行了

httpd2.2 常见配置及功能

然后再重启服务,这样就没有报错了

httpd2.2 常见配置及功能

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 可以显示服务器版本信息

httpd2.2 常见配置及功能

修改版本信息(修改配置文件)

vim /etc/httpd/conf/httpd.conf,进入到配置文件后,搜索 ServerTokens, 如图:

httpd2.2 常见配置及功能

改完之后,在重新加载配置文件,service httpd reload, 再次查看服务器版本信息

httpd2.2 常见配置及功能

服务器版本隐藏

3.修改监听的 IPPort

 

Listen [IP:]PORT

(1) 省略 IP 表示为本机所有IP

(2) Listen指令至少一个,可重复出现多次

Listen 80

Listen 8080

在 httpd服务的配置文件当中,监听的端口默认为 80 端口,你也可以人为的修改端口,比如修改成 9527 端口

httpd2.2 常见配置及功能

重新加载 httpd服务service httpd reload,再查看一下端口号ss -ntl

httpd2.2 常见配置及功能

没有 80端口,此时监听 http 服务的是 9527 端口,此时你在访问时就要指定端口号了,不然会访问失败

httpd2.2 常见配置及功能

当然你也可以将改端口号绑定在指定的本机 IP地址上,不指定就默认绑定在本机的所有 IP 地址上,如图:将 80 端口绑定在本机的 192.168.10.135 上,将 9527 端口绑定在 172.17.0.182

httpd2.2 常见配置及功能

然后再重新加载 httpd服务,查看端口号

httpd2.2 常见配置及功能

这样别人访问时就必须指定端口号了,因为 192.168.10.135绑定在 80 端口上,不指定就默认为 80 端口,所以能访问成功,而 172.17.0.182 绑定在 9527 端口上,这时你不指定就不能访问了

httpd2.2 常见配置及功能

示例:

Listen 192.168.1.100:8080

Listen 80

查看服务对应的端口

httpd2.2 常见配置及功能

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服务配置文件的话,默认只能访问一个资源,就断开连接

httpd2.2 常见配置及功能

http 服务配置文件将 KeepAlive off 改为KeepAlive on

httpd2.2 常见配置及功能

再去访问资源时就能够连续访问多个资源,而不断开连接

httpd2.2 常见配置及功能

5、MPM(Multi-Processing Module)多路处理模块

 

prefork, worker, event(试验阶段)

httpd-2.2不支持同时编译多个模块,所以只能编译时选定一个;rpm安装的包提供三个二进制程序文件,分别用于实现对不同 MPM 机制的支持

确认方法:

psaux | grep httpd

默认为 /usr/sbin/httpd, prefork 模式

查看静态编译的模块

httpd -lhttpd.worker -l

httpd2.2 常见配置及功能

查看静态编译及动态装载的模块

httpd –Mhttpd.worker -M

httpd2.2 常见配置及功能

动态模块路径

/usr/lib64/httpd/modules/动态模块路径

httpd2.2 常见配置及功能

 

更换使用的 httpd 程序:

vim /etc/sysconfig/httpd

HTTPD=/usr/sbin/httpd.worker

httpd2.2 常见配置及功能

重启服务生效

pstree -p|grep httpd查看进程和线程

httpd2.2 常见配置及功能

prefork 的默认配置:

<IfModule prefork.c>

StartServers     8 开启的服务器(表现为开启了 http 服务,运行了 8httpd主程序)

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服务就会运行 4httpd.worker程序,每个主程序包含 25 个线程,所以总共有 100 个线程,但是支持最多的空闲线程只有 75 个,所以要杀死一个 httpd.worker 程序,所以当你开启了 http 服务,就只有 3httpd.worker程序运行

httpd2.2 常见配置及功能

测试性能

ab -c 100 -n 1000 http://192.168.10.135/a.jpg总共 1000 个请求访问 a.jpg,并发同时能够访问100 个,注意:访问的页面尽量大一些,不然无法测试性能

ll /var/www/html

httpd2.2 常见配置及功能

1.prefork,将主程序改为httpd

httpd2.2 常见配置及功能

经过几次测试,prefork每秒能够处理的次数大约为 520

httpd2.2 常见配置及功能

2.测试worker,将主程序改为httpd.worker

httpd2.2 常见配置及功能

经过几次测试,worker每秒能够处理的请求次数大约为 512

httpd2.2 常见配置及功能

由此可以看出 preforkwork 的性能差不多

 

更多详情见请继续阅读下一页的精彩内容: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 这个模块给注释掉,如图:

httpd2.2 常见配置及功能

重启服务,再查看所有的动态和静态模块就查不到了,http服务就没有这个 basic 验证的功能了

httpd2.2 常见配置及功能

7、定义 ’Main’ server 的文档页面路径

 

DocumentRoot”/path”

文档路径映射:

DocumentRoot指向的路径为 URL 路径的起始位置

示例:

DocumentRoot”/app/data”

http://HOST:PORT/test/index.html

–> /app/data/test/index.html

注意:SELinuxiptables 的状态

更改 ’Main’ server 的文档页面路径

默认是 /var/www/html,如图我将默认的路径给注释掉,更改为/app/data

httpd2.2 常见配置及功能

然后再 /app/data目录下建一个index.html,再在里面写点东西

vim /app/data/index.html

httpd2.2 常见配置及功能

在重启服务,再来访问,访问的页面就是在 /app/data下编辑的 index.html 的内容,不是 /var/www/index.html 的内容了

httpd2.2 常见配置及功能

 

8、定义站点主页面

 

DirectoryIndex index.html index.html.var

在 http服务的配置文件中,定义了站点的主页面

httpd2.2 常见配置及功能

访问站点的主页面先找 index.html,再找 index.html.var 如果都找不到,就会访问一个错误页面

httpd2.2 常见配置及功能

为什么会返回一个错的页面呢,这是因为在另外一个配置文件 /etc/httpd/conf.d/welcome.conf做了配置

vim /etc/httpd/conf.d/welcome.conf

httpd2.2 常见配置及功能

 

我在根目录下面建一个子目录 bbs,里面创建一个 index.html 文件,并写上内容

httpd2.2 常见配置及功能

接下来我访问这个页面,能访问

httpd2.2 常见配置及功能

如果把 bbs里面的 index.html 文件改个名a.html,再次去访问,竟然显示站点的文件列表,这样是很危险的

httpd2.2 常见配置及功能

再点一下 a.html才能访问

httpd2.2 常见配置及功能

所以应该在 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 服务的配置文件有哪些功能

  1. 解决启动 httpd 服务时报错的问题

在启动 http 服务时,总会有一些错误,如图:

httpd2.2 常见配置及功能

修改 httpd服务的配置文件

vim /etc/httpd/conf/httpd.conf,进入到配置文件之后搜索ServerName,然后按照格式随便添加一个域名就行了

httpd2.2 常见配置及功能

然后再重启服务,这样就没有报错了

httpd2.2 常见配置及功能

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 可以显示服务器版本信息

httpd2.2 常见配置及功能

修改版本信息(修改配置文件)

vim /etc/httpd/conf/httpd.conf,进入到配置文件后,搜索 ServerTokens, 如图:

httpd2.2 常见配置及功能

改完之后,在重新加载配置文件,service httpd reload, 再次查看服务器版本信息

httpd2.2 常见配置及功能

服务器版本隐藏

3.修改监听的 IPPort

 

Listen [IP:]PORT

(1) 省略 IP 表示为本机所有IP

(2) Listen指令至少一个,可重复出现多次

Listen 80

Listen 8080

在 httpd服务的配置文件当中,监听的端口默认为 80 端口,你也可以人为的修改端口,比如修改成 9527 端口

httpd2.2 常见配置及功能

重新加载 httpd服务service httpd reload,再查看一下端口号ss -ntl

httpd2.2 常见配置及功能

没有 80端口,此时监听 http 服务的是 9527 端口,此时你在访问时就要指定端口号了,不然会访问失败

httpd2.2 常见配置及功能

当然你也可以将改端口号绑定在指定的本机 IP地址上,不指定就默认绑定在本机的所有 IP 地址上,如图:将 80 端口绑定在本机的 192.168.10.135 上,将 9527 端口绑定在 172.17.0.182

httpd2.2 常见配置及功能

然后再重新加载 httpd服务,查看端口号

httpd2.2 常见配置及功能

这样别人访问时就必须指定端口号了,因为 192.168.10.135绑定在 80 端口上,不指定就默认为 80 端口,所以能访问成功,而 172.17.0.182 绑定在 9527 端口上,这时你不指定就不能访问了

httpd2.2 常见配置及功能

示例:

Listen 192.168.1.100:8080

Listen 80

查看服务对应的端口

httpd2.2 常见配置及功能

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服务配置文件的话,默认只能访问一个资源,就断开连接

httpd2.2 常见配置及功能

http 服务配置文件将 KeepAlive off 改为KeepAlive on

httpd2.2 常见配置及功能

再去访问资源时就能够连续访问多个资源,而不断开连接

httpd2.2 常见配置及功能

5、MPM(Multi-Processing Module)多路处理模块

 

prefork, worker, event(试验阶段)

httpd-2.2不支持同时编译多个模块,所以只能编译时选定一个;rpm安装的包提供三个二进制程序文件,分别用于实现对不同 MPM 机制的支持

确认方法:

psaux | grep httpd

默认为 /usr/sbin/httpd, prefork 模式

查看静态编译的模块

httpd -lhttpd.worker -l

httpd2.2 常见配置及功能

查看静态编译及动态装载的模块

httpd –Mhttpd.worker -M

httpd2.2 常见配置及功能

动态模块路径

/usr/lib64/httpd/modules/动态模块路径

httpd2.2 常见配置及功能

 

更换使用的 httpd 程序:

vim /etc/sysconfig/httpd

HTTPD=/usr/sbin/httpd.worker

httpd2.2 常见配置及功能

重启服务生效

pstree -p|grep httpd查看进程和线程

httpd2.2 常见配置及功能

prefork 的默认配置:

<IfModule prefork.c>

StartServers     8 开启的服务器(表现为开启了 http 服务,运行了 8httpd主程序)

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服务就会运行 4httpd.worker程序,每个主程序包含 25 个线程,所以总共有 100 个线程,但是支持最多的空闲线程只有 75 个,所以要杀死一个 httpd.worker 程序,所以当你开启了 http 服务,就只有 3httpd.worker程序运行

httpd2.2 常见配置及功能

测试性能

ab -c 100 -n 1000 http://192.168.10.135/a.jpg总共 1000 个请求访问 a.jpg,并发同时能够访问100 个,注意:访问的页面尽量大一些,不然无法测试性能

ll /var/www/html

httpd2.2 常见配置及功能

1.prefork,将主程序改为httpd

httpd2.2 常见配置及功能

经过几次测试,prefork每秒能够处理的次数大约为 520

httpd2.2 常见配置及功能

2.测试worker,将主程序改为httpd.worker

httpd2.2 常见配置及功能

经过几次测试,worker每秒能够处理的请求次数大约为 512

httpd2.2 常见配置及功能

由此可以看出 preforkwork 的性能差不多

 

更多详情见请继续阅读下一页的精彩内容: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 的情况下)

httpd2.2 常见配置及功能

将根目录改为 /app/data

单独对根目录进行配置,其子目录也会继承根目录的配置

httpd2.2 常见配置及功能

现在我想要拒绝能够访问软链接和拒绝显示子目录下的索引,如图,也可以写成 options none,不加 允许

httpd2.2 常见配置及功能

重启服务,这样别人就不能访问你的软链接和子目录的索引了,而且根目录的子目录会继承父目录的配置,所以别人也不能访问子目录里的软链接和子目录下的子目录索引

f1fstab 的软链接,不能访问软链接

httpd2.2 常见配置及功能

bbs是根目录下的子目录,bbs目录中没有 index/htmlindex.html.tar,也不能访问目录的索引

httpd2.2 常见配置及功能

f2是根目录的子目录下的软链接,也不能访问

httpd2.2 常见配置及功能

bbs1bbs 的子目录,并且里面没有 index.html 或者 index.html.tar,也不能访问bbs1 的索引

httpd2.2 常见配置及功能

也可以单独对根目录下的子目录进行配置,让其不继承对根目录的配置

httpd2.2 常见配置及功能

f2bbs 目录下的软链接,又能访问了

httpd2.2 常见配置及功能

bbs1bbs 的子目录,又能访问其索引了

httpd2.2 常见配置及功能

(2) AllowOverride

与访问控制相关的哪些指令可以放在指定目录下的.htaccess(由 AccessFileName 指定)文件中,覆盖之前的配置指令

只对 <directory>语句有效

AllowOverride All: 所有指令都有效

AllowOverride None.htaccess 文件无效

AllowOverride AuthConfig Indexes除了 AuthConfig Indexes的其它指令都无法覆盖

注意:.htaccess这个文件必须在你所做了访问控制的目录里创建,如图:我对 /app/data 做了访问控制,所以要在 /app/data 下创建 .htaccess 覆盖之前的访问控制指令

httpd2.2 常见配置及功能

vim /app/data/.htaccess在这个文件里设置配置指令来覆盖之前的配置指令,如图:拒绝了访问子目录的索引和访问软链接

httpd2.2 常见配置及功能

如图:不能访问子目录的索引

httpd2.2 常见配置及功能

如图:也不能访问软链接

httpd2.2 常见配置及功能

 

(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后面的 allowdeny次序无所谓,允许 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

如图:将原本的日志格式注释掉,添加自定义的日志格式

httpd2.2 常见配置及功能

然后再来访问一下,查看日志

httpd2.2 常见配置及功能

参考帮助:http://httpd.apache.org/docs/2.2/mod/mod_log_config.html#formats

%h 客户端 IP 地址

%l 远程用户 , 启用 mod_ident 才有效,通常为减号“-“

%u 验证(basicdigest)远程用户 , 非登录访问时,为一个减号“-“

•%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 服务的配置文件

httpd2.2 常见配置及功能

查看指定的字符集

httpd2.2 常见配置及功能

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 目录下的主页面

httpd2.2 常见配置及功能

 

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 了,这样会覆盖创建的第一个用户)

-mmd5格式加密,默认方式

-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,允许用户http1http2访问。

httpd2.2 常见配置及功能

(2)创建账号和密码,如图:创建 http1,http2http33 个用户

httpd2.2 常见配置及功能

(3)然后再去访问 web 服务器根目录下的 bbs 目录,如图:这时访问 web 服务根目录下 bbs 目录,就不会直接打开 bbs 目录下的主页面了,需要输入用户和密码

httpd2.2 常见配置及功能

根据我们在 http服务的子配置文件的配置,用户 http1http2能够访问,http3不能够访问

先来验证用户 http1,能够访问

httpd2.2 常见配置及功能

 

httpd2.2 常见配置及功能

再来测试用户 http3,不能访问

httpd2.2 常见配置及功能

 

httpd2.2 常见配置及功能

2. 基于组账号进行认证

(1)在 http 服务的子配置文件里对根目录下的 bbs 目录进行访问控制,如下图:访问 bbs 目录需要进行 basic 验证,定义一个用户目录,定义一个组用户目录,允许组 group1 里的用户访问 bbs 目录

httpd2.2 常见配置及功能

(2)在定义的用户目录创建用户账号并指定密码

httpd2.2 常见配置及功能

(3)在定义的组用户目录下设置每个组中的用户

httpd2.2 常见配置及功能

(4)测试,访问 web 服务器根目录下的 bbs 目录,根据在子配置文件做的访问控制,允许组 group1 里的用户访问,group1里的用户有 http1http2,所以 http1http2能够访问 bbs 目录下的主页面,http3不能访问,先测试 http1,如图:成功访问,http1 测试成功了,http2就不用测试了,直接测试http3

httpd2.2 常见配置及功能

 

httpd2.2 常见配置及功能

 

测试 http3,不能够访问

httpd2.2 常见配置及功能

 

httpd2.2 常见配置及功能

远程客户端和用户验证的控制

Satisfy ALL|Any

ALL 客户机 IP 和用户验证都需要通过才可以

Any客户机 IP 和用户验证 , 有一个满足即可

如图:在 http服务的子配置文件中,对根目录下的 bbs 目录做了访问控制,对客户机 ip 和用户进行验证,并且都需要通过才行

httpd2.2 常见配置及功能

每个组中的用户

httpd2.2 常见配置及功能

加载 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 个地址

httpd2.2 常见配置及功能

2.设置站点

在 /app下建立 3 个目录,将来作为对应 3IP地址的站点

httpd2.2 常见配置及功能

3.http 服务的子配置文件配置虚拟主机(配置虚拟主机可以参照 http 服务的主配置文件)

cat /etc/httpd/conf/httpd.conf 参照格式在最后面

httpd2.2 常见配置及功能

参照上图的格式来配置虚拟主机

httpd2.2 常见配置及功能

4.重新加载 http 服务,测试

httpd2.2 常见配置及功能

5.在客户端,配置 dns 域名解析,就可以使用域名来访问站点了

编辑 /etc/hosts文件,模拟 dns 解析

httpd2.2 常见配置及功能

接着就可以用域名来访问站点了

httpd2.2 常见配置及功能

(2)配置基于端口的虚拟主机

配置一个虚拟主机就要消耗一个 IP 地址,如果基于 IP 地址来配置虚拟主机就太浪费 IP 地址了,而基于端口来配置虚拟主机,只需要消耗一个 IP 地址,将一个 IP 地址绑定在多个端口上面,这样来配置多台虚拟主机。

1.1.设置站点,参考配置基于 ip 地址的虚拟主机的第二步

2.http 服务的子配置文件里配置多台虚拟主机,如图:*代表本机的 IP 地址,本机的 IP 地址绑定不同的端口

httpd2.2 常见配置及功能

3.重新加载 http 服务,通过访问不同的端口就可以访问不同的站点

httpd2.2 常见配置及功能

4. 在客户端,配置 dns 域名解析,就可以使用域名在加上端口来访问站点了

编辑 /etc/hosts文件,模拟 dns 解析

httpd2.2 常见配置及功能

 

httpd2.2 常见配置及功能

(3)配置基于 FQDN 的虚拟主机

现在我们在访问一个站点都是通过访问域名来访问的,所以前两种方法来配置虚拟主机很少用,通常使用基于域名的方式来配置虚拟主机

如果在在请求报文的首部加上你要访问的站点,web服务器服务器通过分析你的请求报文首部来返回给你结果

httpd2.2 常见配置及功能

1. 设置站点,参考配置基于 ip 地址的虚拟主机的第二步

2. 在 http 服务的子配置文件来配置基于域名的虚拟主机

vim /etc/httpd/con.d/test.conf

httpd2.2 常见配置及功能

3. 在客户端配置 dns 域名解析,来访问站点

编辑 /etc/hosts文件,模拟 dns 域名解析

httpd2.2 常见配置及功能

4. 通过域名来访问不同的站点

httpd2.2 常见配置及功能

5. 查看日志文件,看看是否生成

httpd2.2 常见配置及功能

6. 在 http 服务的子配置文件中,哪个站点排在第一个谁就是默认站点

httpd2.2 常见配置及功能

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 服务的主配置文件里添加该模块,如图:已经启动

httpd2.2 常见配置及功能

vim /etc/httpd/conf/httpd.conf 修改 http 服务的主配置文件

httpd2.2 常见配置及功能

重新加载一下 http服务,然后再去访问,如图:就可以查看 web 服务器的工作情况

httpd2.2 常见配置及功能

如果还想显示当前 web服务器更加详细的工作情况,再修改一下 http 服务的主配置文件,如图:

httpd2.2 常见配置及功能

重新加载一下 http服务,再去查看一下当前 web 服务器的工作情况,就更加详细了,如图:

httpd2.2 常见配置及功能

 

好了,今天的内容就到这里,下期再见。

本文永久更新链接地址:http://www.linuxidc.com/Linux/2017-10/147903.htm

正文完
星哥说事-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2022-01-21发表,共计15416字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中