千家信息网

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

发表于:2025-01-23 作者:千家信息网编辑
千家信息网最后更新 2025年01月23日,Linux的爱之初体验web服务~~!!!(之所以这么说我觉得这是进入Linux世界的第一个也是重要的一个服务)文章叫长,懂的随便看看可能有不对的地方请校正。小白看看也可以理解理解大白话写的!http
千家信息网最后更新 2025年01月23日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: 编程语言,超文本标记语言;

TITLE

blabla... blabal

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) 处理请求:对请求报文进行解析,并获取请求的资源及请求方法等相关信息

元数据:请求报文首部

//请求的方法 //资源 //版本

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程序:

/etc/sysconfig/httpd

HTTPD=

重启服务生效;

prefork的配置:

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

MinSpareServers 5 //最小空闲进程数

MaxSpareServers 20 //最大空闲进程数

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

MaxClients 256 ///最大并发数

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


worker的配置:

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

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

MinSpareThreads 25 //最少空闲线程

MaxSpareThreads 75 //最大空闲线程

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

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

PV, UV

PV: Page View 页面访问量

UV: User View 用户数量

独立IP有效访问量;

4DSO

配置指令实现模块加载

LoadModule

模块路径可使用相对地址

相对于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、站点访问控制

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

文件系统路径:


访问控制机制:

基于来源地址;

基于账号;

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) 定义安全域

//指明路径

Options None

AllowOverride None

AuthType Basic

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

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

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

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

Require valid-user

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

使用htpasswd命令进行管理

htpasswd [options] passwordfile username

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

-m: md5加密用户密码;

-s: sha1加密用户密码;

-D: 删除指定用户

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

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 ...

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

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

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

示例:

Options None

AllowOverride None

AuthType Basic

AuthName "Administator private"

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

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

Require group webadmin

13、虚拟主机

有三种实现方案:

基于ip

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

基于port

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

基于hostname

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

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

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

禁用中心主机:注释DocumentRoot

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

SeverName

DocumentRoot ""

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

ErrorLog

CustomLog

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

Ip addr list //查看

示例1:基于ip

ServerName web1.magedu.com

DocumentRoot "/vhosts/web1/htdocs"

ServerName web2.magedu.com

DocumentRoot "/vhosts/web2/htdocs"

示例2:基于port

ServerName web2.magedu.com

DocumentRoot "/vhosts/web2/htdocs"

ServerName web3.magedu.com

DocumentRoot "/vhosts/web3/htdocs"

示例3:基于hostname

ServerName web1.magedu.com

DocumentRoot "/vhosts/web1/htdocs"

ServerName web2.magedu.com

DocumentRoot "/vhosts/web2/htdocs"

ServerName web3.magedu.com

DocumentRoot "/vhosts/web3/htdocs"

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

SetHandler server-status

Order deny,allow

Deny from all

Allow from 172.16

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


进程 服务 文件 资源 用户 主机 服务器 路径 配置 线程 报文 模块 客户 认证 虚拟主机 控制 地址 多个 账号 处理 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 丰南区信息网络技术创造辉煌 网络安全渗透实训总结 信息化和软件开发区别 数据库作业转换成sql语句 谁才是炸服务器的凶手 网络安全研究生专业学校排名 广播台网络技术部的面试内容 合肥坐标软件开发有限公司 DNF黑白网络安全教育 黄药师软件开发 华为云企业购买云服务器流程 arcgis导入数据库软件崩溃 中国网络技术行业专家 网络安全教育活动设计 云服务器如何配置安全模式 哪里有服务好的数据库研发 知名电脑服务器租用公司 gta线上与服务器同步 网络技术培训学院北京 陕西网络安全非标机箱上哪找 福州辰方网络技术有限公司 软件开发需求前期沟通流程 厦门昊铭网络技术有限公司 四川大学网络安全考研 如何同步内网服务器 安卓怎么管理linux服务器 安全数据库讲的是啥 荒野乱斗怎么转服务器 9月网络安全日 计算机网络技术不好
0