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

Linux基础教程之HTTP相关配置解读

200次阅读
没有评论

共计 10456 个字符,预计需要花费 27 分钟才能阅读完成。

一次完整的 HTTP 请求处理过程:
1、建立连接:接收或拒绝链接请求
2、接受请求:接收客户端请求报文中对某资源的一次请求的过程
Web 访问响应模型(Web I/O)
单进程 I / O 模型:启动一个进程处理用户请求,而且一次只处理一个,多个请
求被串行响应;
多进程 I / O 模型:并行启动多个进程,每个进程响应一个链接请求;
复用 I / O 结构:启动一个进程,同时响应 N 个链接请求;
实现方法:多线程模型和事件驱动;
多线程模型:一个进程生成 N 个线程,每线程响应一个连接请求;
事件驱动:一个进程处理 N 个请求。
复用的多进程 I / O 模型:启动 M 个进程,每个进程响应 N 个连接请求,同时接收
M*N 个请求。
 

3、处理请求:

服务器对请求报文进行解析,并获取请求的资源及请求方法

等相关信息,根据方法,资源,首部和可选的主体部分对请求进行处理
元数据:请求报文首部
<method> <URL> <VERSION>
HEADERS 格式 name:value
<request body>
示例:
Host : www.magedu.com 请求的主机名称
Server: Apache/2.4.7
HTTP 常用请求方式,Method GET、POST、HEAD、PUT、DELETE、

TRACE、OPTIONS

4、访问资源:
服务器获取请求报文中请求的资源 web 服务器,即存放了 web 资源的服
务器,负责向请求者提供对方请求的静态资源,或 动态运行后生成的资
源。
资源放置于本地文件系统特定的路径:
DocRoot –> /var/www/html
/var/www/html/images/logo.jpg
http://www.magedu.com/images/logo.jpg
web 服务器资源路径映射方式:
(a) docroot
(b) alias
(c) 虚拟主机 docroot
(d) 用户家目录 docroot
 
5、构建响应报文:
一旦 Web 服务器识别除了资源,就执行请求方法中描述的动作,并返回响应报文。响应报文中包含有响应状态码、响应首部,如果生成了响应主体的话,还包括响应主体。
1)响应实体:如果事务处理产生了响应主体,就将内容放在响应报文中回送过去。响应报文中通常包括:描述了响应主体 MIME 类型的 Content-Type 首部描述了响应主体长度的 Content-Length 实际报文的主体内容
2)URL 重定向:web 服务构建的响应并非客户端请求的资源,而是资源另外一个访问路径:
永久重定向:http://www.360buy.com
临时重定向:http://www.taobao.com
3)MIME 类型:
Web 服务器要负责确定响应主体的 MIME 类型。有很多配置服务器的方法可以将 MIME 类型与资源管理起来 ;
魔法分类:Apache web 服务器可以扫描每个资源的内容,并将其与一个已知模式表 (被称为魔法文件) 进行匹配,以决定每个文件的 MIME 类型。这样做可能比较慢,但很方便,尤其是文件没有标准扩展名的时候;
显式分类:可以对 Web 服务器进行配置,使其不考虑文件的扩展名或内容,强制特定文件或目录内容拥有某个 MIME 类型。
类型协商:有些 Web 服务器经过配置,可以以多种文档格 式来存储资源。在这种情况下,可以配置 Web 服务器,使其可 以通过与用户的协商来决定使用哪种格式(及相关的 MIME 类型)”最好”

6、发送响应报文

Web 服务器通过连接发送数据时也会面临与接收数据一 样的问题。服务器可能有很多条到各个客户端的连接,有些是空 闲的,有些在向服务器发送数据,还有一些在向客户端回送响应 数据。服务器要记录连接的状态,还要特别注意对持久连接的处 理。对非持久连接而言,服务器应该在发送了整条报文之后,关 闭自己这一端的连接。对持久连接来说,连接可能仍保持打开状 态,在这种情况下,服务器要正确地计算 Content-Length 首部,不然客户端就无法知道响应什么时候结束了

7、记录日志 

最后,当事务结束时,Web 服务器会在日志文件中添加 一个条目,来描述已执行的事务

 
HTTPD 介绍:
特性:
高度模块化:core+modules
DSO:Dynamic Shared Object 动态加 / 卸载
MPM:multi-processing module 多路处理模块
MPM 工作模式:
prefork:多进程 I / O 模型,每个进程响应一个请求,默认模型。
一个主进程:生成和回收 n 个子进程,创建套接字,不响应请求
多个子进程:工作 work 进程,每个子进程处理一个请求;系统初始 时,预先生成多个空闲进程,等待请求,最大不超过 1024 个。
worker:复用的多进程 I / O 模型, 多进程多线程,IIS 使用此模型。
一个主进程:生成 m 个子进程,每个子进程负责生成 n 个线程,每个 线程响应一个请求,并发响应请求:m*n
event:事件驱动模型(worker 模型的变种)
一个主进程:生成 m 个子进程,每个进程直接响应 n 个请求,并发响 应请求:m*n,有专门的线程来管理这些 keep-alive 类型的线程,当有 真实请求时,将请求传递给服务线程,执行完毕后,又允许释放。这样 增强了高并发场景下的请求处理能力。
httpd-2.2: event 测试版,centos6 默认
httpd-2.4:event 稳定版,centos7 默认
 
HTTPD 安装
版本:centos6:2.2
centos7:2.4
安装方式:
rpm:centos 发行版,稳定,建议使用
编译:定制或特殊需求
Centos 6 程序环境:httpd-2.2
配置文件:
/etc/httpd/conf/httpd.conf
/etc/httpd/conf.d/*.conf
检查配置语法:

            httpd -t

            service httpd configtest

      进行语法检测时,会报错,虽然没有影响,但是也不好看;解决方法:

            方法一:

                       Linux 基础教程之 HTTP 相关配置解读

Linux 基础教程之 HTTP 相关配置解读

方法二:vim /etc/hosts  进行本地地址解析

     

服务脚本:/etc/rc.d/init.d/httpd

脚本配置文件:/etc/sysconfig/httpd
服务控制和启动:
chkconfig httpd on|off
service {start|stop|restart|status|configtest|reload} httpd
站点网页文档根目录:/var/www/html

模块文件路径:

/etc/httpd/modules

/usr/lib64/httpd/modules
 
主程序文件:
/usr/sbin/httpd
/usr/sbin/httpd.worker
/usr/sbin/httpd.event
主进程文件:/etc/httpd/run/httpd.pid
/var/run/httpd/httpd.pid
日志文件目录:
/var/log/httpd
access_log: 访问日志
error_log:错误 日志

帮助文档包:

            httpd-manual

      如果上不了网时,可以手动安装文档包,进行查看

Httpd 2.2 常见配置
模块文件路径:
/usr/lib64/httpd/modules
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: 为路径时,是否区分大小写,取决于文件系统

下面先介绍一个小实验,再介绍 HTTPD 的基本配置:

  

在客户端机器连接服务器时,显示出 Apache 版本信息,不安全。

       编辑 HTTPD 主配置文件,加上下面一行就可以了

      #vim /etc/httpd/conf/httpd.conf

       ServerTokens productonly(可以简写 prod)

          service restart httpd

 

HTTPD 基本配置及用法:

1、切换工作模式:
vim /etc/sysconfig/httpd
HTTPD=/usr/sbin/httpd.worker
2、修改监听的 IP 和 Port
Listen [IP:]PORT

(1) 省略 IP 表示为 0.0.0.0;表示监听本机所有 IP;
(2) Listen 指令可重复出现多次
Listen 80
Listen 8080
(3) 修改监听 socket,重启服务进程方可生效
4、MPM(Multi-Processing Module)多路处理模块:
prefork, worker, event(试验阶段)

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

分别用于实现对不同 MPM 机制的支持

确认方法:
ps aux | grep httpd
默认为 /usr/sbin/httpd, 即 prefork 模式
查看静态编译的模块:httpd -l
查看静态编译及动态装载的模块:httpd –M
动态模块加载:不需重启即生效
动态模块路径:/usr/lib64/httpd/modules/
更换使用的 httpd 程序:
vim /etc/sysconfig/httpd
HTTPD=/usr/sbin/httpd.worker
重启服务生效
httpd.worker -l 查看
pstree -p |grep httpd 查看进程和线程
测试:yum install httpd-tools
ab -c 1000 -n 10000 http://192.168.164.129/
 
 

prefork 的默认配置:

<IfModule prefork.c>
StartServers 8 开机启动时,默认开启 8 个进程
MinSpareServers 5 最小空闲进程
MaxSpareServers 20 最大空闲进程
ServerLimit 256 最多进程数, 最大 20000
MaxClients 256 最大并发

MaxRequestsPerChild 4000 子进程最多能处理的请求 数量。在处理 MaxRequestsPerChild 个请求之后,

子进程将 会被父进程终止,这时候子进程占用的内存就会释放(为 0 时 永远不释放)

</IfModule>
 
worker 的默认配置:
<IfModule worker.c>
StartServers 4 开机启动时,默认开启 4 个进程
MaxClients 300 最大支持多少客户端并发访问
MinSpareThreads 25 最小的空闲线程
MaxSpareThreads 75 最大的空闲线程
ThreadsPerChild 25 每个子进程生成的线程数量
MaxRequestsPerChild 0 无限制
</IfModule>
5、DSO:Dynamic Shared Object 动态共享对象
加载动态模块配置:
/etc/httpd/conf/httpd.conf
配置指令实现模块加载格式:
LoadModule <mod_name> <mod_path>
模块文件路径可使用相对路径:
相对于 ServerRoot(默认 /etc/httpd)指向的路径而言:
/etc/httpd/modules/

示例:要使用某个某块,需按照下面格式,加载到主配置文件里即可:

   LoadModule auth_basic_module modules/mod_auth_basic.so

6、定义’Main’server 的文档页面路径 :
DocumentRoot“/path”网站主页目录
文档路径映射:
DocumentRoot 指向的路径为 URL 路径的起始位置

下面先介绍一下,什么是 URL:

URL 组成
<scheme>://<user>:<password>@<host>:<port>/<path>;<params> ?<query>#<frag>
schame: 方案,访问服务器以获取资源时要使用哪种协议
user: 用户,某些方案访问资源时需要的用户名
password: 密码,用户对应的密码,中间用:分隔
Host: 主机,资源宿主服务器的主机名或 IP 地址
port: 端口, 资源宿主服务器正在监听的端口号,很多方案有默认端口号
path: 路径, 服务器资源的本地名,由一个 / 将其与前面的 URL 组件分隔
params: 参数,某些方案用这个组件来指定输入的参数,参数为名 / 值对,
URL 中可多含多个参数,用; 分隔 .
query: 查询,某些方案会用这个组件传递参数以激活程序,如数据库,用
?分隔, 多个查询用 & 分隔
frag: 片段, 一小片或一部分资源的名字,此组件在客户端使用,用 #分隔

好了,通过以上已经了解了什么事 URL 了,下面介绍怎么设置主页等相关操作:

实验:更改 HTTPD 主页;实验环境在 centos6.9 主机上搭建的 HTTPD 服务,

(主机 IP:192.168.164.129)

        首先自定义一个主页目录以及文件:

#vim /etc/httpd/conf/httpd.conf
DocumentRoot“/app/website1”
#service httpd reload

访问测试:

         如果以上自定义的主页文件不存在时,会出现以下情景:

默认情况下, 会在 /var/www/html 目录下找 index.html 这个主页文件,如果找不到,则显示下图主页。
DirectoryIndex index.html index.html.var
Include conf.d/*.conf
下图主页文件:/etc/httpd/conf.d/welcome.conf

  如果 welcome.conf 这个文件也找不到,会出现下图的情景:

 cd /etc/httpd/conf.d

         mv welcome.conf welcome.conf.bak

如果把主配置文件里的主页目录再改回去,

cd /var/www/html/
mv index.html b.html

下图把主页目录下的文件都列出来了,不安全
vim /etc/httpd/conf/httpd.conf
Option -Indexes FollowSymLinks
service httpd reload
 

下图中,再次访问网站时,主目录下的文件就显示不了,变得安全点。

注意:SELinux 和 iptables 的状态
7、站点访问控制常见机制
可基于两种类型的路径指明对哪些资源进行何种访问控制
访问控制机制有两种:客户端来源地址,用户账号
文件系统路径:
<Directory“/path“>
</Directory>
<File“/path/file”>
</File>
<FileMatch“PATTERN”>
</FileMatch>
URL 路径:
<Location””>
</Location>
<LocationMatch”“>
….
</LocationMatch>
示例:
<FilesMatch“.(gif|jpe?g|png)$”>
<Files“?at.*”> 通配符
<Location /status>
<LocationMatch“/(extra|special)/data”>
访问控制机制:
基于来源地址
基于账号
Directory 中“基于来源地址”实现访问控制
(1)Options:后跟 1 个或多个以空白字符分隔的选项列表 在选项前的
+,- 表示增加或删除指定选项
所有可用特性:Indexes Includes FollowSymLinks
SymLinksifOwnerMatch ExecCGI MultiViews
常见选项:
Indexes:指明的 URL 路径下不存在与定义的主页面资源相符的资源
文件时,返回索引列表给用户。没写时默认是不开启的。

 
FollowSymLinks:允许访问主页目录下的符号链接文件所指向的源文
件 ; 没写时默认是开启的。
None:全部禁用
All:全部允许

(2) AllowOverride

与访问控制相关的哪些指令可以放在指定目录下的 .htaccess(由
AccessFileName 指定)文件中,覆盖之前的配置指令
只对 <directory> 语句有效
AllowOverride All: 所有指令都有效
AllowOverride None:.htaccess 文件里定义的策略无效
AllowOverride AuthConfig Indexes 除了 AuthConfig 和
Indexes 的其它指令都无法覆盖

  示例:实现 AllowOverride , 基于指定目录.htaccess, 以及 FollowSymlinks 的用法

         # vim /etc/httpd/conf/httpd.conf

 

touch /app/website1/.htaccess

  访问测试,访问软链接,直接指向源文件的内容。

 
Linux 基础教程之 HTTP 相关配置解读
 
Linux 基础教程之 HTTP 相关配置解读
 
Linux 基础教程之 HTTP 相关配置解读
 
Linux 基础教程之 HTTP 相关配置解读
 
(3)基于来源地址的访问控制机制
Order:定义生效次序;写在最后面的表示默认法则
Order allow,deny:默认拒绝
Order deny,allow:默认允许

Allow from 

 Deny from

来源地址:IP
NetAddr: 172.16
172.16.0.0

172.16.0.0/16

具体用法:下图中定义了 order allow,deny 先允许,后拒绝;根据法则后定义的生效

    #curl  http://192.168.164.29   是被拒绝访问的

     

8、定义默认主页面
DirectoryIndex index.html inex.html.var
9、日志设定
日志类型:
访问日志 错误日志
错误日志:
ErrorLog logs/error_log
LogLevel warn 定义日志级别,默认值 warn
loglevel 可选值: debug, info, notice, warn,error crit, alert, emerg
访问日志:/var/log/httpd/access_log
定义日志格式:LogFormat format 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”的值;即 发出请求的应
用程序
 
 
10、定义路径别名
格式:Alias /URL/“/PATH/”
DocumentRoot“/www/htdocs”
http://www.magedu.com/download/bash.rpm
==>/www/htdocs/download/bash.rpm

Alias /download/“/rpms/pub/”

http://www.magedu.com/download/bash.rpm
==>/rpms/pub/bash.rpm

http://www.magedu.com/images/logo.png

==>/www/htdocs/images/logo.png

注意:以上红色字体标识,是一一对应的,注意 / 路径和别名的区分。

 
11、设定默认字符集
AddDefaultCharset UTF-8
中文字符集:GBK, GB2312, GB18030
 
12、基于用户的访问控制
认证质询:WWW-Authenticate: 响应码为 401,拒绝客户端请求,并说明要求客户端提供账号和密码
认证:Authorization:客户端用户填入账号和密码后再次发送请求报文;认证通过时,则服务器发送响应的资源
认证法式两种:
basic:明文–不安全,可以基于 https 访问
digest:消息摘要认证,兼容性差
安全域:需要用户认证后方能访问的路径;应该通过名称对其进行标识,
以便告知用户认证的原因
用户的账号和密码
虚拟账号:仅用于访问某服务时用到的认证标识
存储:文本文件,SQL 数据库,ldap 目录存储,nis 等
 
basic 认证配置示例:
(1) 定义安全域
<Directory“/path”>
Options None
AllowOverride None 是否允许验证.htaccess 文件
AuthType Basic 认证类型
AuthName“String”管理目录提示语句
AuthUserFile“/PATH/HTTPD_USER_PASSWD_FILE”
验证配置文件
Require user username1 username2 …
指定用户
</Directory>
允许账号文件中的所有用户登录访问:Require valid-user
(2) 提供账号和密码存储(文本文件)
使用专用命令完成此类文件的创建及用户管理
htpasswd 命令来源于 httpd-tools 包
htpasswd [options] /PATH/HTTPD_PASSWD_FILE username
-c:自动创建文件,仅应该在文件不存在时使用
-m:md5 格式加密
-s:sha 格式加密
-D:删除指定用户
 

实验:基于用户账号密码认证的访问控制;

实验环境在 centos6.9 上搭建 httpd 服务,(192.168.8.128)

基于安全考虑可以设置严格的权限:
chmod 600 /etc/httpd/conf.d/.husers
setfacl -m u:apache:r /etc/httpd/conf.d/.husers
针对主页目录进行配置:

Linux 基础教程之 HTTP 相关配置解读

Linux 基础教程之 HTTP 相关配置解读

也可以定义在.htaccess 文件里:

vim /etc/httpd/conf/httpd.conf

Linux 基础教程之 HTTP 相关配置解读

# cd /app/website1/admin
vim .htaccess

Linux 基础教程之 HTTP 相关配置解读

基于组账号进行认证
(1) 定义安全域
<Directory“/path”>
AuthType Basic
AuthName“String“
AuthUserFile“/PATH/HTTPD_USER_PASSWD_FILE”
AuthGroupFile“/PATH/HTTPD_GROUP_FILE
Require group grpname1 grpname2 …
</Directory>
(2) 创建用户账号和组账号文件;
组文件:每一行定义一个组
GRP_NAME: username1 username2 …

实验:基于用户组的安全认证, 在上个实验基础上实现

 
1、创建组文件
#vim /etc/httpd/conf.d/.htgroups
g1:httpuser1 httpuser2
g2:httpuser3
2、定义安全域
cd /app/website1/admin
vim .htaccess

Linux 基础教程之 HTTP 相关配置解读

字符浏览器测试:在另一台机器上测试
links 192.168.8.128/admin
远程客户端和用户验证的控制
Satisfy ALL|Any
ALL 客户机 IP 和用户验证都需要通过才可以
Any 客户机 IP 和用户验证, 有一个满足即可

示例:

Require valid-user

Order allow,deny
Allow from 192.168.1
Satisfy Any
14、虚拟主机
站点标识:socket
IP 相同,但端口不同
IP 不同,但端口均为默认端口
FQDN 不同;
请求报文中首部
Host: www.magedu.com
有三种实现方案:
基于 ip:为每个虚拟主机准备至少一个 ip 地址;
基于 port:为每个虚拟主机使用至少一个独立的 port;
基于 FQDN:为每个虚拟主机使用至少一个 FQDN
注意:一般虚拟机不要与 main 主机混用;因此,要使用虚拟主机,一般
先禁用 main 主机
禁用方法:注释中心主机的 DocumentRoot 指令即可
虚拟主机的配置方法:
<VirtualHost IP:PORT>
ServerName FQDN
DocumentRoot“/path”
</VirtualHost>
建议:上述配置存放在独立的配置文件中
其它可用指令:
ServerAlias:虚拟主机的别名;可多次使用
ErrorLog:错误日志
CustomLog:访问日志
<Directory“/path”> </Directory>
Alias
 
实验 1:基于 IP 的虚拟主机
a、准备环境,创建多个主页文件,并为网卡配置多个 IP 地址
          ip addr add 192.168.8.130/24 dev eth0 label eth0:1

Linux 基础教程之 HTTP 相关配置解读

b、虚拟主机配置文件设置:
cd /etc/httpd/conf.d
vim vhosts.conf

Linux 基础教程之 HTTP 相关配置解读

c、在另一台客户端机器上进行验证
2、基于端口的虚拟主机:

Linux 基础教程之 HTTP 相关配置解读

Linux 基础教程之 HTTP 相关配置解读

3、基于 FQDN 的虚拟主机

Linux 基础教程之 HTTP 相关配置解读

Linux 基础教程之 HTTP 相关配置解读

Linux 基础教程之 HTTP 相关配置解读

15、status 页面
帮助我们实现 http 服务器的一些功能状态的查看, 以页面的方式查看他的工作情况:进程编号,负载状态。
vim /etc/httpd/conf/httpd.conf
LoadModule status_module modules/mod_status.so

要想实现 status 功能, 模块必须加载。

可以在虚拟机设置里面定义,也可以单独定义在 conf.d 目录下。

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