一、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版本。
原文:http://8757576.blog.51cto.com/8747576/1657251