httpd知识汇总

一、httpd:俗称Apache,以高度模块化设计的,即core+modules。

1、特性:

a、DSO:Dynamic Shared Object

b、MPM:Multipath Processing Module多道处理模块。

prefork:预先创建进程,即进程池,一个进程一个请求。

需要定义最大空闲数(注意:最大不能超过1024),最小空闲数。

worker:一个进程多个线程,一个线程一个请求。

event:事件驱动模型,一个线程响应多个请求。

enent-driven:事件驱动,主要目的在于实现单线程响应多个请求。

2、httpd版本:

httpd-1.3

httpd-2.0

httpd-2.2

httpd-2.4:从2.4开始才支持event特性。

3、httpd的功能特性

a、路径别名:alias

b、用户认证:authentication

c、虚拟主机:virtual host

d、反向代理:如负载均衡

e、用户站点:

f、CGI:Common Gateway Interface

4、初次启动httpd会报主机名和ip地址不一致的错误,即未配置host

a、查看主机名的命令: #hostname

b、请在/etc/hosts中配置如192.168.1.120 www.test.com

c、主机名配置文件在/etc/sysconfig/network中

NETWORKING=yes

HOSTNAME=主机名

5、安装httpd:

#yum -y install httpd

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

脚本配置文件:/etc/sysconfig/httpd

运行目录:/etc/httpd

配置文件:

主配置文件:/etc/httpd/conf/httpd.conf

全局配置

主机配置:用于仅提供一个站点时

虚拟主机配置:用户提供多个站点时

备注:可见主机配置和虚拟主机配置不能同时启用。

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

配置文件语法测试:#service httpd configtest

#httpd -t

配置文件生效方式:绝大多数修改配置文件后,可执行#service httpd reload来生效,

如果修改了监听的端口或地址必须重启服务才行。

Socket:80

文档跟目录:/var/www/html

CGI目录:/var/www/cgi-bin

6、httpd的主配置文件:/etc/httpd/conf/httpd.conf

执行#grep "Section" httpd.conf可以清楚地看到httpd.conf分为三段,如下:

全局配置(Global Environment)

主机配置(Main Server configuration):用于仅提供一个站点时

虚拟主机配置(Virtual Hosts):用户提供多个站点时

主要的配置介绍如下:

a、监听套接字:

Listen [IP:]port

此命令可以出现多次,用于指定监听多个不同的套接字。

Listen 80

Listen 192.168.127.137:8080

b、配置使用长连接keep alive

KeepAlive {On|Off}

KeepAliveTimeout 2 (长连接时请求超时时间。)

MaxKeepAliveRequests 50 (长连接时最大的请求数。)

c、MPM:

prefork:预先创建进程,即进程池,一个进程一个请求。

需要定义最大空闲数(注意:最大不能超过1024),最小空闲数。

<IfModule prefork.c>

StartServers       8:默认启动的工作进程数

MinSpareServers    5:最少空闲进程数

MaxSpareServers   20:最大空闲进程数

ServerLimit      256:最大活动进程数

MaxClients       256:并发请求的最大数

MaxRequestsPerChild  4000:每个子进程在生命周期内所能服务的最多请求个数。

</IfModule>

worker:一个进程多个线程,一个线程一个请求。

<IfModule worker.c>

StartServers         4:默认启动的子进程数

MinSpareThreads     25:最少空闲线程数

MaxSpareThreads     75:最大空闲线程数

ThreadsPerChild     25:每个子进程可生成的线程数

MaxRequestsPerChild  0:每个子进程在生命周期内所能服务的最多请求个数,0表示不限定。

MaxClients         300:并发请求的最大数

</IfModule>

d、DSO模块的加载方式:LoadModule module_name /path/to/module

如果使用相对路径,则对于ServerRoot所定义的位置而言;

例如 ,绝对路径:

LoadModule php5_module /usr/lib64/httpd/modules/php5.so

让服务重载配置文件方能生效。

httpd -M:列出已经装载的所有DSO以及非DSO模块。

httpd -l:列出支持使用的非DSO模块。

e、配置站点根目录以及页面访问属性:

站点根目录:DocumentRoot "/path/to/somewhere",如:DocumentRoot "/www/html"

页面访问属性以及控制:

<Directory "/path/to/somewhere">

Options FollowSymLinks

AllowOverride None

</Directory>

如:

<Directory "/www/html">

Options:

Indexes:缺少默认页面时即index页面,允许将站点跟目录中的所有文件以列表形式返回给用户,web站点禁用之。

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

None:所有选项都不启用,web站点使用None

All:所有选项都启用

ExecCGI:允许使用mod_cgi模块执行CGI脚本。

Includes:允许使用mod_include模块实现服务器端包含(SSI)

MultiViews:允许使用mod_negotiation实现内容协商。

AllowOverride :表示下面基于IP的访问控制属性是否被禁用,None不禁用,All禁用

Order allow,deny:允许访问的外的均被拒绝,即白名单。deny,allow黑名单。

Allow from all,基于白名单设置的选项,表示允许所有的IP均可访问此站点。

Deny from 192.1.1.2,基于黑名单设置的选项,表示设置的参数不允许访问此站点。

Deny from 192.1.1.3,基于黑名单设置的选项,表示设置的参数不允许访问此站点。

</Directory>

注意:Allow from和Deny from两个参数的值取最佳匹配:从列表中找出最小的能匹配的访问者的地址的条目为最终生效的。

f、定义默认主页面:依次找主页,直至找到为止。

DirectoryIndex index.php index.html home.html default.html

g、用户目录(目前很少用,一般禁用之):如果期望让每个用户(linux用户)都可以创建个人站点:http://Server_IP/~UserName/

UserDir disabled:禁止

UserDir public_html:是用户家目录下的目录名称,所有位于此目录下的文件均可通过前述的访问路径进行访问。

注意:用户的家目录要赋予运行httpd的用户拥有执行权限。

h、配置日志功能:

/var/log/httpd

access.log:访问日志,其需要记录的内容需要自定义。

CustomLog "/path/to/access_log_file" LogFormat_Name

%h:客户端地址

%l:远程登录名,通常为-

%u:认证是的远程用户名,没认证为-

%t:收到请求时的时间

%r:请求报文的启始行

%b:响应报文的长度,单位为字节

%>s:响应状态码

%{Header_name}i:记录指定请求报文首部的内容。

详情请参考apache官网。

error.log:错误日志,

i、路径别名:

Alias /images/ "/data/imgs/":意味着访问http://server_ip/images时,其页面文件来自于/data/imgs/

j、设置默认字符集:

AddDefaultCharset UTF-8

二、CGI:Common Gateway Interface:

注意:输出必须以Content-type:text/html开头。

如:#!/bin/bash

cat <<EOF

Content-type:text/html

<pre>

The hostname is :`hostname`.

The time is :`date`.

</pre>

EOF

三、基于用户的访问控制-HTTP认证:

1、虚拟用户:

2、认证类型(auth):

basic基本认证:账号、密码明文发送。目前经常用。

digest摘要认证:hash编号之后发送,很多浏览器不支持,很少用。

3、认证提供者(authn):账号、密码的存放位置。

4、授权机制(authz):根据什么进行授权。

5、如何配置基于用户授权:案例-做基本认证

a、  <Directory "/www/html/fin">

Options None

AllowOverride AuthConfig

AuthType Basic

AuthName "Private Area"

AuthUserFile /etc/httpd/conf/.htpasswd

Require valid-user

</Directory>

  注意:.htpasswd为隐藏文件。

b、用命令htpasswd创建认证用户,如下:

#htpasswd -c -m /etc/httpd/conf/.htpasswd tom

#htpasswd  -m /etc/httpd/conf/.htpasswd jerry

6、基于组进行认证:

<Directory "/www/html/fin">

Options None

AllowOverride AuthConfig

AuthType Basic

AuthName "Private Area"

AuthUserFile /etc/httpd/conf/.htpasswd

AuthGroupFile /etc/httpd/conf/.htgroup

Require group GroupName

</Directory>

组文件:组名 用户1 用户2 用户3

四、虚拟主机Virtualhost:一个物理服务器服务多个站点。

1、实现虚拟主机的方法如下:

a、基于不同IP实现不同的虚拟主机,IPV4已基本用完,并且多个IP浪费资源。-->变化IP

<Virtualhost 192.168.1.101:80>

ServerName www.a.com

DocumentRoot "/web/a/html"

</Virtualhost>

<Virtualhost 192.168.1.102:80>

ServerName  www.b.org

DocumentRoot "/web/b/html"

</Virtualhost>

b、基于不同port实现不同的虚拟主机,Web站点默认端口为80,如果用不同Port则不太合适。--变化Port

<Virtualhost 192.168.1.101:80>

ServerName  www.a.com

DocumentRoot "/web/a/html"

</Virtualhost>

<Virtualhost 192.168.1.101:8080>

ServerName  www.b.com

DocumentRoot "/web/b/html"

</Virtualhost>

c、基于不同FQDN实现不同的虚拟主机,最节省资源。-->变化ServerName,需要配置host文件

<Virtualhost *:80>

ServerName  www.a.com

DocumentRoot "/web/a/html"

</Virtualhost>

<Virtualhost *:80>

ServerName  www.b.com

DocumentRoot "/web/b/html"

</Virtualhost>

2、实现虚拟主机步骤:

a、要实现"虚拟主机",必须取消“中心主机”,即注释掉 #DocumentRoot "/www/html/"

b、配置Virtualhost:

<Virtualhost IP:port>

ServerName  ...

DocumentRoot ...

<Directory "">

...

</Directory>

</Virtualhost>

 c、注意:http2.2实现虚拟主机需要启用NameVirtualHost *:80,下面的<Virtualhost *:80>也要是 *:80

七、https的实现:网上银行、支付宝、财付通,基于ssl/tls

ssl:Secure Socket Layer,常用的版本为sslv3

tls:Transport Layer Security,常用的版本为tls1

1、X509.3证书格式:

证书格式的版本号

证书序列号

证书签名算法

证书颁发者

有效期

持有者名称

持有者公钥

其他扩展信息:基本约束、使用策略、密钥使用的限制

CA签名

2、PKI:Public Key Infrastructure

签证机构(CA)

证书撤销列表(CRL)发布机构

端实体(申请者)

注册机构(RC)

证书存取库

3、SSL握手要完成的工作:

交换协议版本号

选择双方都支持的加密方式

对两端实现身份验证

进行密钥交换

4、http:文本协议,80/tcp

https:二进制格式的协议,443/tcp

SSL会话基于IP地址实现:不支持在基于FQDN的虚拟主机上实现。

5、客户端验证服务端证书,验证的内容:

日期检测:证书是否在有效期内

证书颁发者的可信度

证书的签名检测

持有者的身份检测

5、httpd实现https:

a、基于mod_ssl模块实现对ssl的支持。

b、CA:自建(学习或者测试需要自建)或者申请。

五、curl命令:

命令选项

-I/--head:只显示响应报文首部信息。如:curl -I http://www.baidu.com

-e/--referer <URL>:来源网址。

如:curl -e http://www.google.com.hk/index.html http://www.baidu.com,即通过www.google.com.hk/index.html访问www.baidu.com。

六、使用mod_deflate模块压缩页面优化传输速度。

1、通常只压缩纯文本文件,如html/css/js/plain等,对于二进制文件如mp3,jpg等压缩效果不明显。

2、配置mod_deflate:

a、启用:SetOutputFilter DEFLATE

b、配置:

<IfModule mod_deflate.c>

#指定对哪些格式的文件进行压缩

AddOutputFilterByType DEFLATE text/plain

AddOutputFilterByType DEFLATE text/html

AddOutputFilterByType DEFLATE text/css

AddOutputFilterByType DEFLATE text/javascript

AddOutputFilterByType DEFLATE text/xml

AddOutputFilterByType DEFLATE application/xml

AddOutputFilterByType DEFLATE application/xhtml+xml

AddOutputFilterByType DEFLATE application/x-javascript

#压缩级别 Level of compression (1-9,Highest 9)

DeflateCommpressionLevel 9

#有些浏览器不支持压缩,通常如下:

BrowserMatch ^Mozilla/4 gzip-only-text/html

BrowserMatch ^Mozilla/4\.0[678] no-gzip

BrowserMatch \bMSI[E] !no-gzip !gzip-only-text/html

</IfModule mod_deflate.c>

七、压力模拟测试工具ab,测试结果只能作为参考:

-c :模拟的并发数

-n :总请求数

注意:-c的值小于等于-n的值才有效。

如:ab -c 100 -n 5000 http://www.baidu.com/index.html

八、httpd-2.4:依赖于更高版本的apr和apr-util,需要1.4以及以上版本。

apr:apache portable runtime 是apache实现跨平台的工具。

1、 httpd-2.4的新特性:

a、 MPM支持在运行时装载。

如:--enable-mpms-shared=all --with-mpm=event

b、支持event mpm

c、支持异步读写

d、在每模块以及每个目录上指定日志级别。

f、每请求配置<If>,<Elseif>

g、增强的表达式分析器

h、毫秒级的keepalive timeout

i、基于FQDN的虚拟主机不再需要NameVirtualHost命令

j、支持使用自定义变量。

k、新增了一些特性模块:mod_proxy_fcgi,mod_ratelimit,mod_request,mod_remoteip

l、对于基于IP的访问控制做了修改,不再支持使用order ,allow,deny这些配置,而统一使用require进行

2、编译安装httpd-2.4步骤:

a、使apache支持正则表达式,需要安装:

#yum -y install pcre-devel

#yum -y groupinstall

b、编译安装apr:

#tar xf apr-1.5.0.tar.bz2

#cd apr-1.5.0

#./configure --prefix=/usr/local/apr

#make && make install

c、编译安装apr-util:

#tar xf apr-util-1.5.3.tar.bz2

#cd apr-util-1.5.3

#./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr

#make && make install

d、编译安装httpd-2.4:

#tar xf httpd-2.4.9.tar.bz2

#cd httpd-2.4.9

#./configure --prefix=/usr/local/apache --sysconfdir=/etc/httpd24 --enable-so --enable-ssl

--enable-cgi --enable-rewrite --with-zlib --with-pcre --with-apr=/usr/local/apr

--with-apr-util=/usr/local/apr-util -enable-modules=most --enable-mpms-shared=all

--with-mpm=event

#make && make install

3、httpd-2.4:编译安装后的后续配置:

a、导出头文件,目的是要基于apache进行二次开发或者后续编译php要用到:

#ln -sv /usr/local/apache/include /usr/include/httpd

b、导出库文件:没有库文件,如果有

#vi /etc/ld.so.conf.d/httpd.conf

c、导出帮助手册:

#vi /etc/man.config中加MANPATH /usr/local/apache/man

d、输出二进制程序,即安装服务:

#vi /etc/profile.d/httpd.sh

内容为:

export PATH=/usr/local/apache/bin:$PATH

运行httpd -V 查看安装的apache版本。

时间: 2024-08-01 22:43:29

httpd知识汇总的相关文章

高负载、高并发网站架构知识汇总-大流量网站架构的几点认识

:硬架构 1:机房的选择: 在 选择机房的时候,根据网站用户的地域分布,可以选择网通或电信机房,但更多时候,可能双线机房才是合适的.越大的城市,机房价格越贵,从成本的角度看可以 在一些中小城市托管服务器,比如说广州的公司可以考虑把服务器托管在东莞,佛山等地,不是特别远,但是价格会便宜很多. 2:带宽的大小: 通常老板花钱请我们架构网站的时候,会给我们提出一些目标,诸如网站每天要能承受100万PV的访问量等等.这时我们要预算一下大概需要多大的带宽,计算带宽大小主要涉及两个指标(峰值流量和页面大小)

【转】ACM博弈知识汇总

博弈知识汇总 转自:http://www.cnblogs.com/kuangbin/archive/2011/08/28/2156426.html 有一种很有意思的游戏,就是有物体若干堆,可以是火柴棍或是围棋子等等均可.两个人轮流从堆中取物体若干,规定最后取光物体者取胜.这是我国民间很古老的一个游戏,别看这游戏极其简单,却蕴含着深刻的数学原理.下面我们来分析一下要如何才能够取胜. (一)巴什博奕(Bash Game):只有一堆n个物品,两个人轮流从这堆物品中取物,规定每次至少取一个,最多取m个.

JavaScript正則表達式知识汇总

Js 正則表達式知识汇总 正則表達式: 1.什么是RegExp?RegExp是正則表達式的缩写.RegExp 对象用于规定在文本中检索的内容. 2.定义RegExp:var +变量名=new RegExp(); 3.RegExp 对象有 3 个方法: 1)test()检索字符串中的指定值,返回值是true或false. var p1=new Reg("e"); document.write(Reg.test("welcome to China!")); 2)exec

Delphi基础知识汇总

☆Delphi基础数据类型 分类 范围 字节 备注 简单类型 序数 整数 Integer -2147483648 .. 2147483647 4 有符号32位 Cardinal 0 .. 4294967295 4 无符号32位 Shortint -128 .. 127 1 有符号8位 Smallint -32768 .. 32767 2 有符号16位 Longint -2147483648 .. 2147483647 4 有符号32位 Int64 -263 .. 263 8 有符号64位 Byt

动态规划 知识汇总

 Dp状态设计与方程总结 不完全状态记录 <1>青蛙过河问题 <2>利用区间 dp 背包类问题 <1> 0-1 背包,经典问题 <2>无限背包,经典问题 <3>判定性背包问题 <4>带附属关系的背包问题 <5> + -1 背包问题 <6>双背包求最优值 <7>构造三角形问题 <8>带上下界限制的背包问题(012背包) 线性的动态规划问题 <1>积木游戏问题 <2&g

Guava库学习:学习Guava Cache知识汇总

原文地址:Guava库学习:学习Guava Cache知识汇总 至此,我们结束了对Guava Cache 缓存机制的学习,在学习过程中,我们学习了如何简单的通过MapMaker创建最简单的ConcurrentMap缓存,我们也了解了缓存的高级特性,以及强大的LoadingCache,我们也探索和学习了CacheBuilder.CacheLoader这些核心的API,以及CacheStats.RemovalLitener等,下面对这些文章做一些汇总,方便以后的查阅和复习.     Guava库学习

PB编程基础知识汇总

PB编程基础知识汇总 第一章      1.  程序的开始,application的open事件. 退出程序例程:halt为退出函数 int SureQuit SureQuit = 2 SureQuit=Messagebox("退出系统","退出前请确认已保存好数据",Question!,OKCancel!, 2) if SureQuit = 1 then halt 2.  变量定义有效范围: ◎     declare-globe 全局变量,整个程序均有效 ◎  

ACM博弈知识汇总(转)

博弈知识汇总 有一种很有意思的游戏,就是有物体若干堆,可以是火柴棍或是围棋子等等均可.两个人轮流从堆中取物体若干,规定最后取光物体者取胜.这是我国民间很古老的一个游戏,别看这游戏极其简单,却蕴含着深刻的数学原理.下面我们来分析一下要如何才能够取胜. (一)巴什博奕(Bash Game):只有一堆n个物品,两个人轮流从这堆物品中取物,规定每次至少取一个,最多取m个.最后取光者得胜. 显然,如果n=m+1,那么由于一次最多只能取m个,所以,无论先取者拿走多少个,后取者都能够一次拿走剩余的物品,后者取

JavaScript正则表达式知识汇总

Js 正则表达式知识汇总 正则表达式: 1.什么是RegExp?RegExp是正则表达式的缩写.RegExp 对象用于规定在文本中检索的内容. 2.定义RegExp:var +变量名=new RegExp(); 3.RegExp 对象有 3 个方法: 1)test()检索字符串中的指定值,返回值是true或false. var p1=new Reg("e"); document.write(Reg.test("welcome to China!")); 2)exec