httpd2.4配置和常见指令

配置文件

配置文件:
/etc/httpd/conf/httpd.conf
/etc/httpd/conf.d/*.conf

启动文件:
/usr/lib/systemd/system/httpd.service

日志文件:
[root@localhost ~]# ls /var/log/httpd
access_log  error_log  

站点文档:
/var/www/html

模块文件:
/usr/lib64/httpd/modules 

模块相关的配置文件:
/etc/httpd/conf.modules.d/

httpd.conf

[root@localhost ~]# grep -v "#" /etc/httpd/conf/httpd.conf

ServerRoot "/etc/httpd"   # 主配置文件目录
 
Listen 80    #监听的端口

Include conf.modules.d/*.conf   #包含模块文件的配置文件

User apache   #默认运行程序的用户
Group apache   #默认运行程序的组


ServerAdmin root@localhost   #在httpd出现错误时,如何联系管理员,可以使用邮箱地址,也可以使用服务器地址,但是这个服务器应该指向你控制的下一台服务器


<Directory />     
    AllowOverride none
    Require all denied
</Directory>
#Directroy 和 /Directory用于封装一组指令。这些指令仅用于命名的目录以及子目录中的所有文件。Directory后面可以跟完整的路径也可以使用使用通配符来表示,例如:[0-9]{3}、/*/public_html。 而且指令不能嵌套


DocumentRoot "/var/www/html"  # 站点目录

<Directory "/var/www">
    AllowOverride None
    Require all granted
</Directory>

<Directory "/var/www/html">
    Options Indexes FollowSymLinks

    AllowOverride None

    Require all granted
</Directory>



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

# httpd是模块管理的。通过将特定模块存在一个模块中,可以将配置伪指令包括在内<IfModule>。然而, <IfModule> 块不是必需的,并且在某些情况下可能掩盖了您缺少重要模块的事实。




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

#防止用户查看.htaccess和.htpasswd的文件



ErrorLog "logs/error_log"   #错误日志

LogLevel warn    #日志级别

<IfModule log_config_module>   # log模块
    LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
    LogFormat "%h %l %u %t \"%r\" %>s %b" common

    <IfModule logio_module>
      LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %I %O" combinedio
    </IfModule>


    CustomLog "logs/access_log" combined
</IfModule>

<IfModule alias_module>


    ScriptAlias /cgi-bin/ "/var/www/cgi-bin/"

</IfModule>

<Directory "/var/www/cgi-bin">
    AllowOverride None
    Options None
    Require all granted
</Directory>

<IfModule mime_module>
    TypesConfig /etc/mime.types

    AddType application/x-compress .Z
    AddType application/x-gzip .gz .tgz



    AddType text/html .shtml
    AddOutputFilter INCLUDES .shtml
</IfModule>

AddDefaultCharset UTF-8   # 默认字符集

<IfModule mime_magic_module>
    MIMEMagicFile conf/magic
</IfModule>


EnableSendfile on   # sendfile机制

指令

以下所有得指令全部放在了/etc/httpd/conf.d/test.conf中。没有放在httpd.conf中。

1、显示服务器版本信息
在这里插入图片描述
服务器若是显示程序版本,可能会导致系统的不安全。 我们可以屏蔽显示。

ServerTokens 该指令控制server的显示,总共有以下几个选项
ServerTokens Full  示例:Apache/2.4.2

ServerTokens Prod[uctOnly]  示例: Server: Apache

ServerTokens Major  示例:Server: Apache/2

ServerTokens Minor  示例:Server: Apache/2.4

ServerTokens Min[imal]   示例:Server: Apache/2.4.2

ServerTokens OS   示例:Server: Apache/2.4.2 (Unix)

设置要设置不能低于min的。   prod是最好的,只显示web服务程序。

[root@localhost ~]# cat /etc/httpd/conf.d/test.conf 
ServerTokens Prod

在这里插入图片描述

2、持久连接
httpd在回应请求完之后不会立即关闭套接字。而是持续接收客户端发送来的请求。 默认是关闭持久连接的。

启用保持连接:KeepAlive ON
等待客户端持续请求的秒数:KeepAliveTimeout 10
打开时允许允许多少个请求进来:MaxKeepAliveRequests 500 ,0表示无限制,一般建议设大一点。

在这里插入图片描述

3、MPM处理模块
MPM提供来三种工作方式:worker、prefork、event
在这里插入图片描述
worker:httpd生成一个主进程,m个子进程。子进程在生成n个线程。一个线程接收一个请求。总共可以接收m*n个请求。

在这里插入图片描述

prefork:程序预先生成许多子进程等待用户发来的请求,这样做的好处是为了防止经常进行子进程的生成和销毁。每个子进程只有一个线程,一个线程接收一个请求。最大不能超过1024个。

event:事件驱动模型( worker模型的变种)一个主进程:生成m个子进程,每个进程直接响应n个请求,并发响应请求: m*n,有专门的线程来管理这些keep-alive类型的线程,当有真实请求时, 将请求传递给服务线程,执行完毕后,又允许释放。这样增强了高并发场景下的请求处理能力。跟worker很类似,只不过有来专门的线程来管理keep-alive。

配置文件:/etc/httpd/conf.modules.d/00-mpm.conf

 LoadModule mpm_prefork_module modules/mod_mpm_prefork.so
 #LoadModule mpm_worker_module modules/mod_mpm_worker.so
 #LoadModule mpm_event_module modules/mod_mpm_event.so

三种工作模式,使用哪一种就将哪一种的\#号注释掉. 默认prefork

默认配置

StartServers 8   #server预先生成几个进程。  worker和event默认是3个, prefork为5个

minspareservers 5   #最小空闲进程数,当空闲进程数小于设置的值后,那么系统将自动以1秒的速度按指数形式生成。直到生成32个子进程。  prefork默认为5。只有非常繁忙的站点才会调优此参数。将此数调大是一个很坏的注意

MaxSpareServers 10 #最大空闲进程数,如果空闲进程数量大于来设置的值,那么将主进程将停止多余的进程。同样参数不宜过大。 prefork默认是10

ServerLimit 256 #最多进程数,最大值为20000。 prefork默认256。worker和event默认是16个。  

MaxClients 256  # 最大并发数

MaxRequestsPerChild 4000 #子进程最多能处理的连接请求。  一个子进程最多处理4000个请求之后会关闭,如果此时的进程数小于预设值,会重新开启一个。

4、定义’Main Server’的文档页面路径

DocumentRoot "/var/www/html"

5、定义站点主页面

 DirectoryIndex index.html    #表示输入网址可以直接跳到index.html。

6、站点访问控制常见机制
可基于两种机制指明对哪些资源进行何种访问控制
访问控制机制有两种:客户端来源地址,用户账号

1、文件系统路径:
<Directory PATH>
</Directory>

<File FILENAME>
#对指定的文件进行权限设置
</File>

<FileMatch PATTERN>
</FileMatch>


2、URL路径
<Location "">
#针对某一站点进行权限设置
</Location>
<LocationMatch "">
</LocationMatch>

示例:

 <Location "/">
Require all denied
 </Location>
# 访问根下的站点时将会拒绝访问  

7、<Directroy>中的访问机制

1)

Options:后跟1个或多个空白字符分隔的选项列表。在选项前的+、-表示增加或删除选项。总共有下面三种选项:

  • Indexes:指明的URL路径下不存在与定义的主页面资源相符的资源时,返回索引列表给用户
    在这里插入图片描述

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

在这里插入图片描述

[root@localhost html]# ll
lrwxrwxrwx 1 root root 14 3月  13 22:39 index.html -> test/link.html
#创建软连接后再次访问

在这里插入图片描述

None:全部禁用
All:全部允许

2)Allowoverride
与访问控制相关的哪些指令可以放在目录下的.htaccess(由AccessFileName指定)文件中,覆盖之前的配置指令。只对<Directory>有效
有三种形式:

  • Allowoverride all :所有指令都生效
  • Allowoverride none:忽略.htaccess文件
  • AllowOverride AuthConfig Indexes: 除了AuthConfig和Indexes的其它指令都无法覆盖
    在这里插入图片描述
    主配置文件中是不建议这么做的,为了做实验而做的修改。接下来添加.htaccess文件
[root@localhost httpd]# vim /var/www/html/.htaccess 

  1 require all denied

在配置文件中指定.htaccess文件

[root@localhost httpd]# cat conf.d/test.conf 

AccessFileName ".htaccess"

在这里插入图片描述

将.htacess文件中的denied改为granted

在这里插入图片描述

当然是不建议启用.htaccess文件的。这样一来,无论访问的网页是否用的上此文件,都会去目录里去找一遍。这样无疑是对性能产生一定的影响。所以使用none选项

3)访问控制
使用<RequireAll>来封装一组指令。至少有一个成功才能匹配,失败优先。
使用<RequireAny>来封装一组指令。多个语句有一个成功就能匹配,即成功优先。
可以作用在<Directory>中或者.htaccess中

  • 允许所有主机访问:Require all granted
  • 拒绝所有主机访问:Require all denied
  • 允许指定源ip访问:Require ip IP-ADDR
  • 拒绝特定ip访问: Require not ip IP-ADDR
  • 允许特定主机访问:Require host HOSTNAME
  • 拒绝特定主机访问:Require not host HOSTNAME
[root@localhost httpd]# cat conf.d/test.conf 
<Directory "/var/www/html">
	<RequireAll>
		Require all granted
		Require not ip 192.168.199.215
	</RequireAll>
</Directory>

在这里插入图片描述

[root@localhost httpd]# cat conf.d/test.conf 
<Directory "/var/www/html">
	<RequireAny>
		Require all denied 
		Require  ip 192.168.199.215
	</RequireAny>
</Directory>

8、设定字符集
在这里插入图片描述

默认是UTF-8。

9、定义路径别名

格式: Alias /URL/ "/PATH/"

[root@localhost httpd]# cat conf.d/test.conf 
alias "/index.html" "/data/html/index.html"
<Directory /data/html/>
	Require all granted
</Directory>

[root@localhost httpd]# cat /data/html/index.html
alias page

在这里插入图片描述
10、基于用户的访问控制
认证质询:响应码为410,拒绝客户请求,并说明要求客户端提供账号和密码

认证:客户填入账号和密码发送请求报文,认证通过时,服务器就会发送响应的资源

认证方式:

  • basic:明文
  • digest:消息摘要认证,兼容性差

安全域:需要用户认证后能访问的路径,应该通过名称对其进行标识,以便于告知用户认证的原因

使用htpasswd生成存放账号和密码的文件

示例:
1)使用htpasswd来生成账户和密码

[root@localhost httpd]# htpasswd -c  conf.d/.htpasswd htuser
New password: 
Re-type new password: 
Adding password for user htuser
[root@localhost httpd]# cat conf.d/.htpasswd
htuser:$apr1$fhgaKKey$GKqB/Xj23gVsOzlHtouT4/

2)准备配置文件

<Directory /var/www/html>
	Authtype Basic
	Authname "pleases input user and password"
	Authuserfile "/etc/httpd/conf.d/.htpasswd"
	Options none
	Allowoverride none
	Require user htuser   # 允许文件中的用户访问,允许所有用户require valid-user 		
</Directory>

3)访问测试
在这里插入图片描述

4)输入账号密码
在这里插入图片描述

基于组的访问控制
1)创建配置文件

<Directory /var/www/html>
	AuthType Basic
	AuthName "pleases input user and password"
	AuthUserFile "/etc/httpd/conf.d/.htpasswd"
	AuthGroupFile "/etc/httpd/conf.d/.htgroup"
	Options none
	Allowoverride none
	Require group ht1
</Directory>

2)使用htpasswd添加用户

[root@localhost httpd]# htpasswd conf.d/.htpasswd htuser2
New password: 
Re-type new password: 
Adding password for user htuser2

3)创建组访问文件

[root@localhost httpd]# cat conf.d/.htgroup 
ht1:htuser
ht2:htuser2

4)测试访问
在这里插入图片描述
在这里插入图片描述

5)使用ht2组内的用户访问
在这里插入图片描述

无法访问,会一致提示输入账号密码

12、实现用户家目录共享
用户家目录依靠mod_userdir.so实现。安装之后配置文件在conf.d/userdir.conf中。

修改配置文件

[root@localhost httpd]# grep -v '#' conf.d/userdir.conf 
<IfModule mod_userdir.c>
   #UserDir disabled   注销此项
   UserDir public_html    #启用这项
</IfModule>

<Directory "/home/*/public_html">
    AllowOverride FileInfo AuthConfig Limit Indexes
    Options MultiViews Indexes SymLinksIfOwnerMatch IncludesNoExec
    Require method GET POST OPTIONS
</Directory>

在用户家目录创建public_html

[root@localhost httpd]# mkdir /home/ydong/public_html

创建默认网页index.html

[root@localhost httpd]# echo 'ydong page'>/home/ydong/public_html/index.html

为apache用户提供该目录的执行权限

[root@localhost httpd]# setfacl -m u:apache:x ~ydong /home/ydong/public_html/

测试访问
在这里插入图片描述
13、status页面

status_modlues提供status的页面,允许服务器查看当前页面的一个状态。2.4默认情况下只要加载了status模块就已经将指令ExtendedStatus on了。所以可以直接定义location进行访问

<location "/server-status">
 	SetHandler server-status
	require all granted
</location>

猜你喜欢

转载自blog.csdn.net/qq_44564366/article/details/104837274