2022
我们一起努力

httpd笔记之理论详解优化配置(Apache)web入门

Linux的爱之初体验web服务~~!!!(之所以这么说我觉得这是进入Linux世界的第一个也是重要的一个服务)

文章叫长,懂的随便看看可能有不对的地方请校正。小白看看也可以理解理解大白话写的!

http 超文本传输协议笔记

传输层:tcp/udp提供进程地址

Port number:

tcp:传输控制协议,面向连接的协议;通信前需要建立虚拟链路;结束后拆除链路;数据流通信协议

0-65535 Linux中端口数

udpUser Datagram Protocol,无连接的协议;无连接的数据报文通信协议

0-65535

 

IANA:

0-1023:众所周知,永久的分配给固定的应用使用,特权端口,22/tcp(ssh), 80/tcp(http), 443/tcp(https)  只有管理员拥有权限注册使用

1024-41951:亦为注册端口,但要求并不是特别严格,分配给程序注册为某应用使用,11211/tcp, 11211/udp (memcached), 3306/tcp(mysql)

41952+:客户端程序随机使用的端口;动态端口,或私有端口;其范围的定义:/proc/sys/net/ipv4/ip_local_port_range

客户端访问服务器端随机生成端口,访问服务器端的某固定端口。

 

套接字Socket: IPC的一种实现,允许位于不同主机(甚至同一主机)上不同进程之间进行通信;从而完成数据交换;也称为Socket API库调用接口, 第一次出现在1983年,4.2 BSD系统上(伯克利系统分发版)。

SOCK_STREAMtcp套接字

SOCK_DGRAMudp套接字

SOCK_RAW: 裸套接字不借助UDP/TCP的接口进行通信

 

IPv4:

分类:

A1-127

B128-191

C192-223

D:组播,224-239

E240-254

 

私有地址:

A10.0.0.0/8

B172.16.0.0/16-172.31.0.0/16

C192.168.0.0/24-192.168.255.0/24

 

TCP协议的特性:

建立连接:三次握手

将数据打包成段:校验和(CRC-32循环冗余检验

确认、重传以及超时:

报文排序:逻辑序号

流量控制:滑动窗口算法有接收缓存控制,快满时暂停接收发送方流量小的情况下

拥塞控制:慢启动和拥塞避免算法

 

Socket Domain(根据其所使用的地址):socket又分为三类

AF_INETAddress FamilyIPv4

AF_INET6IPv6

AF_UNIX:同一主机上不同进程之间通信时使用;

 

每类套接字都至少提供了两种socket:流,数据报

流:可靠地传递、面向连接、无边界;

数据报:不可靠地传递、有边界、无连接;比如寄信,有信封,封装多封就需要多个

 

套接字相关的系统调用:

socket(): 创建一个套接字;

bind():绑定

listen():监听

accept():接收请求

connect():请求连接建立

write():发送

read():接收

send(), recv(), 发接

               sendto(), recvfrom() 发接

HTTP协议

http: hyper text transfer protocol, 80/tcp

html: 编程语言,超文本标记语言;

 

<html>

<head>

<title>TITLE</title>

</head>

<body>

<h2></h2>

<p> blabla… <a href=”http://www.magedu.com/logo.jpg”> blabal </a> </p>

<h3></h3>

</body>

</html>

 

CSS: Cascading Style Sheet  级联样式表

js: javascript

 

MIME: Multipurpose Internet Mail Extesion多用途Internet邮件扩展

 

工作机制:

http请求

http响应

 

被请求的内容称为:Web资源:web resource

静态文件:.jpg, .gif, .html, .txt, .js, .css, .mp3, .avi

动态文件:.php, .jsp,   (客户端请求时不是直接反馈给客户端而是先在服务器端执行一次)

比如:Windows浏览器需要借助外部插件来工作,浏览器本身不具备打开图片或视频等而且根据文件的后缀名来决定借助由客户端的某个插件来打开

媒体:决定了客户端的浏览器如何打开借助那个插件

媒体类型(MIME类型):major/minor主类型/次类型

text/html  超文本文档

text/plain  纯文本文档

p_w_picpath/jpeg  

p_w_picpath/gif

 

URI: Uniform Resource Identifier统一资源标识符

URL: Uniform Resorce Locator,用于描述某服务器某特定资源的位置;

Scheme://Server:Port/path/to/resource

http://www.magedu.com/p_w_picpaths/logo.jpg

URN: Uniform Resource Naming统一资源命名

 

http协议版本:

HTTP/0.9:原型版本,功能简陋

HTTP/1.0:第一个广泛使用的版本,支持MIME

HTTP/1.1: 增强了缓存功能

Spdy 

HTTP/2.0

 

rfc文档读一读有助于了解 1.1 2.0

一次完整的http请求处理过程:

(1) 建立或处理连接:接收请求或拒绝请求

(2) 接收请求:

接收来自于网络的请求报文中对某资源的一次请求的过程;

 

并发访问响应模型(Web I/O):

单进程I/O结构:启动一个进程处理用户请求,而且一次只处理一个;多个请求被串行响应;多个请求到来排队,依次处理

多进程I/O结构:并行启动多个进程,每个进程响应一个请求;

复用I/O结构:一个进程响应n个请求;借用一个复用I/O 处理器基于事件驱动机制

多线程模型:一个进程生成N个线程,每个线程响应一个用户请求;

事件驱动:event-driven一个进程内部维持一个类似事件监控器,能够监控着多个I/O使得一个服务器进程能够同时连接多个请求针对怎么知道每一个请求的连接与结束,在服务器编程时在内部基于事件回调的机制来完成连接状态(i/o)的追踪,并基于回调的状态来完成连接与结束的响应。

 

复用的多进程/线程I/O结构:启动多个(m)进程,每个进程响应n个请求;

 

 

(3) 处理请求:对请求报文进行解析,并获取请求的资源及请求方法等相关信息

 

元数据:请求报文首部

<method>//请求的方法 <URL>//资源 <VERSION>//版本

Host: www.magedu.com   请求的主机名称

Connection//指明此次连接使用的方式

 

(4) 访问资源:获取请求报文中请求的资源

 

web服务器,即存放了web资源的服务器,负责向请求者提供对方请求的静态资源,或动态运行后生成的资源;这些资源放置于本地文件系统某路径下,此路径通常称为DocRoot

 

/var/www/html/

p_w_picpaths/1.jpg

 

http://www.magedu.com/p_w_picpaths/1.jpg

 

web服务器资源路径映射方式:

(a) docroot

(b) alias

(c) 虚拟主机docroot

(d) 用户家目录docroot

 

(5) 构建响应报文

 

资源的MIME类型:标记的方法

显式分类

魔法分类

协商分类

 

URL重定向:

web服务构建的响应并非客户端请求的资源,而是资源另外一个访问路径;

 

(6) 发送响应报文

 

 

(7) 记录日志

 

http服务器程序:

httpd (apache)

nginx

Lighttpd  //德国人研发轻量级类似Nginx

 

应用程序服务器容器类动静都能解析

IIS

tomcat, jetty, jboss, resin

webshpere, weblogic, oc4j

 

www.netcraft.com  //查看一些web服务器占用市场的份额

 

httpd的安装配置和使用:

httpd: apache

a  patchy server = apache

ASF: apache software foundation  //软件基金会

 

httpd的特性:

高度模块化:core + modules

DSO: Dynamic Shared Object  动态模块机制

MPMMultipath Processing Modules  实现多种不同I/O模型机制

prefork:多进程模型,每个进程响应一个请求;每个主进程只负责监听套接字,接收请求交给子进程处理请求。

一个主进程:负责生成n个子进程,子进程也称为工作进程,每个子进程处理一个用户请求;即便没有用户请求,也会预先生成多个空闲进程,随时等待请求到达;最大不会超过1024个;

worker:多线程模型,每个线程响应一个请求;

一个主进程:生成多个子进程,每个子进程负责生个多个线程,每个线程响应一个请求;

event:事件驱动模型,每个线程响应n个请求;

一个主进程:生成m个子进程,每个进程直接n个请求;

m进程,n线程:m*n

httpd-2.2: event为测试使用

httpd-.24event可生产使用

 

CentOS 6:

 

程序环境

配置文件:

/etc/httpd/conf/httpd.conf

/etc/httpd/conf.d/*.conf  //补充性配置文件

服务脚本:

/etc/rc.d/init.d/httpd

服务脚本自己的配置文件:/etc/sysconfig/httpd

主程序文件:

/usr/sbin/httpd       //prefork 默认使用的

/usr/sbin/httpd.event   //event

/usr/sbin/httpd.worker  //worker

日志文件目录:

/var/log/httpd

access_log: 访问日志

error_log:错误日志  //启动停止访问错误等信息

站点文档目录:

/var/www/html

模块文件路径:

/usr/lib64/httpd/modules

 

配置文件的组成:

 ~]# grep ”Section” /etc/httpd/conf/httpd.conf

### Section 1: Global Environment   //全局环境配置

### Section 2: ’Main’ server configuration  //主服务器配置

### Section 3: Virtual Hosts   ///虚拟主机配置

 

配置格式:directive value  指令对应的值来完成 比如listen 80

directive: 不区分字符大小写;

value: 为路径时,取决于文件系统;

 

常用配置:修改完配置文件 httpd -t 或者 service httpd configtest 测试语法

1、修改监听的IPPort  //修改监听端口需要restart

Listen [IP:]PORT

 

省略ip表示监听本机所有IP; Listen可重复出现多次;

2、持久连接

Persistent Connection长连接):连接建立,每个资源获取完成后不会断开连接,而是继续等待其它的请求完成;

如何断开?

数量限制:100 资源请求默认100

时间限制:可配置   

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

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

httpd-2.4 支持毫秒级持久时间;

非持久连接

 

KeepAlive On|Off  //是否开启

MaxKeepAliveRequests # //最大连接请求数量

KeepAliveTimeout #   //连接超时

 

测试:

telnet HOST PORT

GET /URL HTTP/1.1

Host: HOSTNAME or IP

3MPM

Multipath Process Module:多道处理模块

prefork, worker, event

 

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

# ps aux  | grep httpd

默认为/usr/sbin/httpd, 其使用prefork

查看模块列表:

查看静态编译的模块

# httpd -l   ///httpd.worker  -l///httpd.event -l

Compiled in modules:

  Core.c   //核心模块

  Prefork.c   /已经使用的

  http_core.c  //功能核心模块

  mod_so.c   //支持模块动态装卸载的功能

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

# httpd -M   

 

更换使用的httpd程序:

httpd笔记之理论详解优化配置(Apache)web入门

/etc/sysconfig/httpd

HTTPD=

重启服务生效;

 

prefork的配置:

<IfModule prefork.c>

StartServers       8  //服务启动时启动多少服务子进程

MinSpareServers    5  //最小空闲进程数

MaxSpareServers   20  //最大空闲进程数

ServerLimit      256   ///在服务器声明周期内为MaxClients生成数量

MaxClients       256   ///最大并发数

MaxRequestsPerChild  4000  //一个进程最多能够响应多少次请求然后死掉

</IfModule> 

worker的配置:

<IfModule worker.c>

StartServers         4    //服务启动时启动多少服务子进程

 

MaxClients         300  ///最大并发数,最大启动的线程数

 

MinSpareThreads     25  //最少空闲线程

MaxSpareThreads     75  //最大空闲线程

ThreadsPerChild     25   //每个进程能够启动的线程数

MaxRequestsPerChild  0   //每个线程最大响应的请求数

</IfModule> 

PV, UV

PV: Page View  页面访问量

UV: User View  用户数量

独立IP有效访问量;

4DSO

配置指令实现模块加载

 

LoadModule <mod_name> <mod_path>

 

模块路径可使用相对地址

相对于ServerRoot(/etc/httpd)指向的路径而言;

/etc/httpd/modules/

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

DocumentRoot

文档路径映射:

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

DocumentRoot ”/var/www/html”

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

 

6、站点访问控制

可基于两种类型的路径指明对哪些资源进行访问控制

文件系统路径:

<Directory ””> </Direcotry>

<File ””> 

</File>

访问控制机制:

基于来源地址;

基于账号;

7Directory中“基于来源地址”实现访问控制

(1) Options  建议关闭(如果是下载网站打开不指定默认网页可以打开网站上资源,非下载网站是不安全的在没有定义默认页的情况下同事http的也没有做测试页客户端打开网站会获取服务器端的所有网站资源)

比如默认根目录下存放的没有默认定义的主页面(index.html)就会索引到根目录下其他的文档。

所有可用特性:Indexes Includes FollowSymLinks SymLinksifOwnerMatch ExecCGI MultiViews

  None, All

Indexes: 索引;//当访问网站目录下默认主页面

FollowSymlinks:允许跟踪符号链接文件;允许访问网站中根目录下作链接的文件

SymLinksifOwnerMatch 允许追踪链接文件和源文件为同一属主就允许(使用少)

MultiViews  是否允许多视图(不开启)(使用少)

 

(2) 基于来源地址的访问控制机制

Order:检查次序

Order allow,deny

Order deny,allow

Allow from

Deny from

来源地址:

IP

NetAddr:

172.16

172.16.0.0

172.16.0.0/16

172.16.0.0/255.255.0.0

 

8、定义默认主页面  访问没有指明自左向右访问

DirecotryIndex  index.html  index.html.var  index.php

 

9、日志设定

 

错误日志:

ErrorLog logs/error_log

LogLevel warn

debug, info, notice, warn,  error, crit, alert, emerg

                        调试信息、通知、警告、 错误、暴击、警报、紧急

定义warn那么比warn高的级别都将记录。

访问日志:

CustomLog logs/access_log combined

LogFormat ”%h %l %u %t \”%r\” %>s %b \”%{Referer}i\” \”%{User-Agent}i\”” combined

%h:客户端IP地址;

%l: Remote logname (from identd, if supplied). –表示为空;远程登录名大多数为空

%u: Remote user,  (from auth; may be bogus if return status (%s) is 401);用户认证时的用户名  大多数无需认证表示为空

%tTime the request was received (standard english format),服务器收到请求的时间;默认为英文格式

%rFirst line of request,请求报文的行信息请求的URL以及协议版本等(method url version)

%>s: 响应状态码;

%b: 响应报文的大小,单位是字节,不包括响应报文首部;

%{Referer}i:请求报文当中”referer”首部的值;当前资源的访问入口,即从哪个页面中的超链接跳转而来;

%{User-Agent}i:请求报文当中”User-Agent”首部的值;即发出请求用到的应用程序;

详情:http://httpd.apache.org/docs/2.2/mod/mod_log_config.html#formats

 

10、路径别名

 

DocumentRoot ”/www/htocs”

http://www.magedu.com/download/bash-4.4.2-3.el6.x86_64.rpm

–> /www/htdocs/download/bash-4.4.2-3.el6.x86_64.rpm

 

Alias /URL/ ”/PATH/TO/SOMEDIR/”

 

Alias /3/ ”/1/2

http://www.magedu.com/3/index.html

–> /1/2/3/

 

Alias /bbs/ ”/forum/htdocs”

http://www.magedu.com/bbs/index.html

–> /forum/htdocs/bbs/

 

11、设定默认字符集

AddDefaultCharset UTF-8

 

GBK, GB2312, GB18030 中文字符

 

12、基于用户的访问控制

 

认证质询:

WWW-Authenticate:响应码为401,拒绝客户端请求,并说明要求客户提供账号和密码;

 

认证:

Authorization:客户端用户填入账号和密码后再次发送请求报文;认证通过,则服务器发送响应的资源;

 

认证类型:

basic:明文

digest:消息摘要

 

安全域:需要用户认证后方能访问的路径;

应该通过名称对其进行标识,并用于告知用户认证的原因;

 

用户的账号和密码存储于何处?

虚拟账号:仅用于访问某服务时用到的认证标识;

 

存储:

文本文件

SQL数据库

ldap

nis

 

basic认证:

(1) 定义安全域

<Directory ””> //指明路径

Options None  

AllowOverride None  

AuthType Basic

AuthName ”STRING”  ///安全域名称

AuthUserFile ”/PATH/TO/HTTPD_USER_PASSWD_FILE” //认证时使用的账号文件

Require user username1 username2 …   //所有合法(允许)账号都行

</Directory>

 

允许账号文件中的所有用户登录访问:

Require valid-user

(2) 提供账号和密码存储(文本文件)

使用htpasswd命令进行管理

htpasswd [options] passwordfile username

-c: 自动创建passwordfile,因此,仅应该在添加第一个用户时使用;

-m: md5加密用户密码;

-s: sha1加密用户密码;

-D: 删除指定用户

(3) 实现基于组进行认证

<Directory ””>

Options None

AllowOverride None

AuthType Basic

AuthName ”STRING”

AuthUserFile ”/PATH/TO/HTTPD_USER_PASSWD_FILE”

AuthGroupFile ”/PATH/TO/HTTPD_GROUP_FILE”

Require group GROUP1 GROUP2 …

</Directory>

 

要提供:用户账号文件和组文件;

 

组文件:每一行定义一个组

GRP_NAMEuser1 user2 user3 … 组名 冒号 用户名用空格分隔

 

 

示例:

<Directory ”/www/htdocs/admin”>

    Options None

    AllowOverride None

    AuthType Basic

    AuthName ”Administator private”

    AuthUserFile ”/etc/httpd/conf.d/.htpasswd”

    AuthGroupFile ”/etc/httpd/conf.d/.htgroup”

    Require group webadmin

</Directory>

13、虚拟主机

 

有三种实现方案:

基于ip

为每个虚拟主机准备至少一个ip地址;

基于port

为每个虚拟主机准备至少一个专用port;实践中很少使用;

基于hostname

为每个虚拟主机准备至少一个专用hostname

 

可混合使用上述三种方式中任意方式;

 

注意:一般虚拟主机莫与中心主机混用,所以,要使用虚拟主机,先禁用中心主机;

禁用中心主机:注释DocumentRoot

 

每个虚拟主机都有专用配置:

<VirtualHost ”IP:PORT”>

SeverName

DocumentRoot ””

</VirtualHost>

 

ServerAlias: 虚拟主机的别名;以下这些都可以定义在虚拟主机中

ErrorLog   

CustomLog

<Directory ””>

</Directory>

               ip addr add [ip/mask] dev eth0  /添加新的IP

Ip addr list //查看

示例1:基于ip

<VirtualHost 172.16.100.6:80>

    ServerName web1.magedu.com

    DocumentRoot ”/vhosts/web1/htdocs”

</VirtualHost>

 

<VirtualHost 172.16.100.7:80>

    ServerName web2.magedu.com

    DocumentRoot ”/vhosts/web2/htdocs”

</VirtualHost>

 

示例2:基于port

<VirtualHost 172.16.100.7:80>

    ServerName web2.magedu.com

    DocumentRoot ”/vhosts/web2/htdocs”

</VirtualHost>

 

<VirtualHost 172.16.100.7:8080>

    ServerName web3.magedu.com

    DocumentRoot ”/vhosts/web3/htdocs”

</VirtualHost>

示例3:基于hostname

<VirtualHost 172.16.100.6:80>

    ServerName web1.magedu.com

    DocumentRoot ”/vhosts/web1/htdocs”

</VirtualHost>

 

<VirtualHost 172.16.100.6:80>

    ServerName web2.magedu.com

    DocumentRoot ”/vhosts/web2/htdocs”

</VirtualHost>

 

<VirtualHost 172.16.100.6:80>

    ServerName web3.magedu.com

    DocumentRoot ”/vhosts/web3/htdocs”

</VirtualHost>

 

14、内置的status页面  //内置状态页面

<Location /server-status>

    SetHandler server-status

    Order deny,allow

    Deny from all

    Allow from 172.16

</Location>

实现:基于账号实现访问控制

赞(0)
文章名称:《httpd笔记之理论详解优化配置(Apache)web入门》
文章链接:https://www.fzvps.com/46543.html
本站文章来源于互联网,如有侵权,请联系管理删除,本站资源仅供个人学习交流,请于下载后24小时内删除,不允许用于商业用途,否则法律问题自行承担。
图片版权归属各自创作者所有,图片水印出于防止被无耻之徒盗取劳动成果的目的。

评论 抢沙发

评论前必须登录!