httpd的设置 一

httpd的设置

http://httpd.apache.org/docs/2.4/ 官方帮助

1. httpd -t

用于 对配置文件进行语法检查

[root@node1 ~]# httpd -t
AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using fe80::20c:29ff:feb6:7c90. Set the 'ServerName' directive globally to suppress this message
Syntax OK

在 配置文件中加入 ServerName 可以解决无识别主机名的告警

ServerName  node1  
[root@node1 ~]# httpd -t
Syntax OK

2. server token

httpd 默认的 响应头会显示服务器的信息,不安全可以关闭。

Server: Apache/2.4.6 (CentOS)

conf 修改ServerTokens 即可

ServerTokens Prod

Server: Apache

3. listen

修改监听的IP和Port
Listen [IP:]PORT
(1) 省略IP表示为本机所有IP
(2) Listen指令至少一个,可重复出现多次

Listen 80
Listen  192.168.0.3:8080 
oot@node1 ~]# ss -ntl
State      Recv-Q Send-Q                   Local Address:Port                                  Peer Address:Port              
LISTEN     0      128                        192.168.0.3:8080                                             *:*   
LISTEN     0      128                                 :::80                                              :::*   

4. 持久连接

​ Persistent Connection:连接建立,每个资源获取完成后不会断开连接,而是继续等待其它的请求完成,默认关闭持久连接

​ 断开条件:时间限制:以秒为单位, 默认5s,httpd-2.4 支持毫秒级

​ 副作用:对并发访问量大的服务器,持久连接会使有些请求得不到响应

​ 折衷:使用较短的持久连接时间

设置:

KeepAlive   On|Off (打开或关闭)
KeepAliveTimeout  15 (超时时长)
MaxKeepAliveRequests 80 #长连接最多接受多少个请求。请求数量大于改值则自动断开

默认值:

使用谷歌浏览器查看 Reponse Headers

Keep-Alive: timeout=5, max=100

修改之后

Keep-Alive: timeout=15, max=80

5、DSO: Dynamic Shared Object

加载动态模块配置,不需重启即生效

DSO配置文件的相对位置 Include conf.modules.d/*.conf

格式:

LoadModule		<mod_name> <mod_path>

模块文件路径可使用相对路径:相对于ServerRoot(默认/etc/httpd)

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

示例:

httpd –M 查看所有装载的模块

[root@node1 ~]# httpd -M |grep mod_auth_basic
[root@node1 ~]# vim /etc/httpd/conf.modules.d/00-base.conf 

LoadModule auth_basic_module modules/mod_auth_basic.so  (添加这一行)

修改之后发现已经加载

[root@node1 ~]# httpd -M |grep mod_auth_basic
[Thu Feb 20 19:55:46.175434 2020] [so:warn] [pid 7734] AH01574: module auth_basic_module is already loaded, skipping
[root@node1 ~]# 

6. MPM( Multi-Processing Module)多路处理模块

切换使用的MPM

/etc/httpd/conf.modules.d/00-mpm.conf

启用要启用的MPM相关的LoadModule指令即可( 取消注释即可)

例子:

默认的prefork的模式,是一个父进程带多个子进程

[root@node1 ~]# pstree -p |grep httpd
           |-httpd(7575)-+-httpd(7576)
           |             |-httpd(7577)
           |             |-httpd(7578)
           |             |-httpd(7579)
           |             |-httpd(7580)
           |             `-httpd(7581)

修改为event 之后

#LoadModule mpm_prefork_module modules/mod_mpm_prefork.so    (当前使用的prework 注释了)
LoadModule mpm_event_module modules/mod_mpm_event.so (启用event)

重启httpd ,发现一个子进程带了多个子线程

[root@node1 ~]# pstree -p |grep httpd
           |-httpd(7786)-+-httpd(7787)
           |             |-httpd(7788)-+-{httpd}(7820)
           |             |             |-{httpd}(7821)
           |             |             |-{httpd}(7822)
           |             |             |-{httpd}(7823)
           |             |             |-{httpd}(7824)
           |             |             |-{httpd}(7825)
           |             |             |-{httpd}(7826)
           |             |             |-{httpd}(7827)
           |             |             |-{httpd}(7828)
           |             |             |-{httpd}(7829)
           |             |             |-{httpd}(7830)
           |             |             |-{httpd}(7831)

prefork的配置:
StartServers

8
MinSpareServers

5
MaxSpareServers

20
ServerLimit

256 最多进程数,最大值 20000
MaxClients 256 最大的并发连接数
MaxRequestsPerChild 4000 子进程最多能处理的请求数量。在处理
MaxRequestsPerChild 个请求之后,子进程将会被父进程终止,这时候子进
程占用的内存就会释放(为0时永远不释放)

MPM的具体设置
prefork的配置:

StartServers 8 (httpd 服务启动时,开启的子进程)

MinSpareServers 5 (最小空闲子进程数)

MaxSpareServers 20 (最大空闲子进程数)

ServerLimit 256 最多进程数,最大值 20000

MaxClients 256 最大的并发连接数

MaxRequestsPerChild 4000

​ 子进程最多能处理的请求数量。在处理MaxRequestsPerChild 个请求之后,子进程将会被父进程终止,这时候子进程占用的内存就会释放(为0时永远不释放)

worker的配置:

ServerLimit 16 允许最大的子进程数

StartServers 2 启动时的进程数

MaxRequestWorkers 150 允许最大的并发请求数

MinSpareThreads 25 空闲时最小的子线程数

MaxSpareThreads 75 空闲时最大的子线程数

ThreadsPerChild 25 每个子线程最多处理的请求次数,超过重生

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

格式 DocumentRoot “/path”

文档路径映射:
例子

创建站点首页文件

[root@node1 ~]# mkdir /apps/data -p
[root@node1 ~]# echo "this is 103 main page" >/apps/data/ index.html

修改配置 记得同时要授权

DocumentRoot "/apps/data/"
<directory "/apps/data">  
Require all granted
</directory>  

测试

[root@node1 ~]# curl 192.168.0.3
this is 103 main page

8. 定义站点主页面

访问网址路径时,web 服务器默认的是把index.html 返回给用户。可以自定义

默认设置

<IfModule dir_module>
    DirectoryIndex   index.html                                                                       
</IfModule>

修改后,首先找a.txt ,找不到就再找index.html

<IfModule dir_module>
    DirectoryIndex   a.txt index.html                                                     </IfModule>

测试

[root@node1 data]# ls
a.txt  index.html
[root@node1 data]# curl 192.168.0.3
this is 103 main page

9 . 站点访问控制常见机制

访问控制机制:客户端来源地址,用户账号.特定的访问资源文件

9.1 <Directory>中“基于源地址”实现访问控制
  • Options:后跟1个或多个以空白字符分隔的选项列表

    在选项前的+ -,表示增加或删除指定选项

    常见选项:

    • Indexes:指明的URL路径下不存在与定义的主页面资源相符的资源文件时,返回索引列表给用户(会显示请求路径下的子目录文件夹,用户可以点那个,访问哪个)

      例子:

      DocumentRoot "/apps/data/"
      <directory "/apps/data">
      Require all granted
      options Indexes
      </directory>
      

      当你访问不存在的资源时

      mark

      但是可以看到上一级的目录

      mark

    • FollowSymLinks:允许访问符号链接文件所指向的源文件

      例子:

      没有设置之前 是默认可以访问软连接的

      [root@node1 data]# ll  -t
      lrwxrwxrwx 1 root root 11 Feb 20 22:47 xx -> /dd/123.txt
      
      [root@node1 ~]# curl 192.168.0.3/xx
      233
      

      设置之后

      <directory "/apps/data">
      Require all granted
      options -FollowSymLinks                                                                                                                     
      </directory>              
      
      root@node1 ~]# curl 192.168.0.3/xx
      <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
      <html><head>
      <title>403 Forbidden</title>
      </head><body>
      <h1>Forbidden</h1>
      <p>You don't have permission to access /xx
      on this server.</p>
      </body></html>
      
      
    • None:全部禁用

      例子:

      <directory "/apps/data">
      Require all granted
      options none                                                                                                                                
      </directory>                 
      
      [root@node1 ~]# curl 192.168.0.3/xx
      <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
      <html><head>
      <title>403 Forbidden</title>
      </head><body>
      <h1>Forbidden</h1>
      <p>You don't have permission to access /xx
      on this server.</p>
      </body></html>
      
    • All: 全部允许

9.1.5 AllowOverride

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

相关参数:

  • All: .htaccess中所有指令都有效
  • AllowOverride None: .htaccess 文件无效
  • AllowOverride AuthConfig .htaccess 文件中,除了AuthConfig 其它指令都无法生效

作用:把写在dircotry中的设置放在一个单独的配置文件中

例子:

[root@node1 data]# ls -a
.  ..  asite  bsite  .htaccess  index.html  xx
[root@node1 data]# cat .htaccess 
options Indexes FollowSymLinks

conf:

<directory "/apps/data">  
Require all granted
AllowOverride  All                                                                                                                          
</directory>

效果与它一样

<directory "/apps/data">  
Require all granted
options Indexes FollowSymLinks                                 
</directory
9.2 基于IP的访问控制:
授权的方式
  • 无明确授权的目录,默认拒绝
  • 允许所有主机访问:Require all granted
  • 拒绝所有主机访问:Require all denied
  • 控制特定的IP访问:Require ip
例子:
<directory "/data/html/">                                                                  	<requireall>
	require all granted
	require not  ip 192.168.37.6
 </requireall>
</directory>
  • IPADDR:授权指定来源的IP访问
    Require not ip

  • IPADDR:拒绝特定的IP访问
    控制特定的主机访问:
    Require host HOSTNAME:授权特定主机访问
    Require not host HOSTNAME:拒绝 特定主机访问

    HOSTNAME:

    • FQDN:特定主机
    • domin.tld:指定域名下的所有主机
匹配规则
  • 不能有失败,至少有一个成功匹配才成功,即失败优先

    <RequireAll> 
    Require all granted
    Require not ip 172.16.1.1 拒绝特定IP
    </RequireAll>
    
  • 多个语句有一个成功,则成功,即成功优先

    <RequireAny>
    Require all denied
    require ip
    172.16.1.1 允许特定IP
    </RequireAny>
    
9.3 文件系统路径:
  • 指令提供了基于文件名的访问控制,类似于和指令。它将配对一个指令。在此配置段中定义的指令将作用于其基本名称(不是完整的路径)与指定的文件名相符的对象。段将根据它们在配置文件中出现的顺序被处理:在段和.htaccess文件被处理之后,但在段之前。请注意:能嵌入到段中以限制它们作用的文件系统范围
<Directory “/path">
...
</Directory>
<File “/path/file”> 
...
</File>
<FileMatch	"PATTERN">
...
</FileMatch>

例子: 拒绝所有 .ht * 文件的访问(这就.htaccess不能被访问的原因)

<Files ".ht*">                                                                                
    Require all denied
</Files>

9.4 URL路径:
  • 提供了基于URL的访问控制。与指令类似,它也会启用一个以结尾的配置段。配置段的处理位于, .htaccess, 之后,并依照在配置文件中出现的顺序进行处理。

  • Location>配置段完全独立于文件系统之外操作。这有几个重要的后果。最重要的是<Location>不能用于针对文件系统的访问控制。因为可能会有几个不同的URL指向文件系统中的同一个文件,所以这样的控制常常会被很容易的绕过。

  • 和指令相同,提供了基于URL的访问控制。但它使用正则表达式作为参数,而不是简单字符串。比如:

<Location "">
...
</Location>
<LocationMatch "">
...
</LocationMatch>

例子 访问不存在的资源跳转403页面

<LocationMatch "^/+$">
    Options -Indexes
   ErrorDocument 403 /.noindex.html                                                                                                       
</LocationMatch>

Alias /.noindex.html /usr/share/httpd/noindex/index.html
9.5 基于的用户和组访问控制

见我下一篇

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

Satisfy ALL|Any

  • ALL 客户机IP和用户验证都需要通过才可以
  • Any客户机IP和用户验证,有一个满足即可

示例:

地址段为172.16.1.0/21 不可访问,不在male 用户组的不能访问。

这样写觉得配置太长了 ?当然也可以放在.htacees 文件中

<Directory “/data/html/rz2">
AuthType Basic
AuthName "String“
AuthUserFile	"/etc/httpd/conf.d/.huser"
AuthGroupFile 	"/etc/httpd/conf.d/.hgroup"
Require group  male 
<RequireAll> 
Require all granted
Require not ip 172.16.1.0/21

</RequireAll>
Satisfy Any

</Directory>
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值