首页 > 代码库 > http的特性
http的特性
CentOS 6: httpd
配置文件:
/etc/httpd/conf/httpd.conf /etc/httpd/conf.d/*.conf
服务脚本:
/etc/rc.d/init.d/httpd
脚本配置文件:/etc/sysconfig/httpd
模块目录:
/etc/httpd/modules: 链接文件
/usr/lib64/httpd/modules
主程序:
/usr/sbin/httpd: prefork /usr/sbin/httpd.event: event /usr/sbin/httpd.worker: worker
日志文件目录:
/var/log/httpd
access_log: 访问日志
error_log: 错误日志
httpd的配置文件说明:
# grep "Section" httpd.conf 第一部分### Section 1: Global Environment 第二部分### Section 2: ‘Main‘ server configuration 第三部分### Section 3: Virtual Hosts
主服务器和虚拟主机一般不同时使用;默认仅启用了主服务器;
指令参数:不区分字符大小写,但其值有可能会区分大小写
持久连接
KeepAlive {On|Off}
MaxKeepAliveRequests 100
KeepAliveTimeout 15
指定监听的地址和端口
Listen [IP:]PORT
此指令可重复指定多次;
DSO机制装载的模块
显示:
# httpd -D
DUMP_MODULES
LoadModule Module_Name /path/to/Module_File
指定站点根目录
DocumentRoot "/path/to/somewhere"
站点路径访问控制
基于本地文件系统路径:
<Directory "/path/to/somewhere">
</Directory>
基于URL访问路径做访问控制
<Location
"/path/to/URL">
</Location>
于Directory中可用的访问控制
(1) Options
Indexes: 当访问的路径下无默认的主页面,将所有资源以列表形式呈现给用户;危险,慎用;
FollowSymlinks: 跳跃符号链接
(2) AllowOverride
支持在每个页面目录下创建.htaccess用于实现对此目录中资源访问时的访问控制功能。
基于IP做访问控制
Order allow,deny
Deny
from id
Allow from id
定义默认的主页面
DirectoryIndex
配置日志功能
ErrorLog "/path/to/error_log"
LogLevel {debug|info|notice|warn|error|crit|alert|emerg}
LogFormat
CustomLog "/path/to/access_log"
LogFormat_Name
%h: 客户端地址
%l: 远程登录名,通常为-
%u: 认证时输入用户名,没有认证时为-
%t: 服务器收到 用户请求时的时间
%r:请求报名的起始行
%>s: 响应状态码
%b: 响应报文的长度,单位是字节
%{HEADER_NAME}i:
记录指定首部对应的值
路径别名
站点根目录:/www/html
实现URL路径的映射,从而所访问的资源不再依赖于站点根目录;
Alias /URL/ "/path/to/somewhere/"
httpd配置(2)
设定默认字符集
ASCII
字符集:GB2312, GB18030, GBK
UTF
AddDefaultCharset
CGI脚本
CGI脚本路径别名
/var/www/cgi-bin/
http://server/cgi-bin/
bash写CGI脚本:
所有文本都使用命令输出:echo, printf, cat
执行程序:命令引用
Content-Type: text/html
<pre>
</pre>
FastCGI: 协议
基于用户访问控制
用户认证:
基本认证: Basic
摘要认证:digest
虚拟用户:仅用于访问某服务或获取某资源的凭证;
文本文件:.htpasswd
SQL数据库
dbm: 数据库引擎,提供API
ldap:
authentication provider: 账号和密码的存储机制;
authn
authorization provider: 授权
案例:基于文件做访问控制
基于用户进行认证
<Directory "/var/www/html/admin"> Options none AllowOverride AuthConfig AuthType Basic AuthName "Admin Area." #AuthBasicProvider file AuthUserFile /etc/httpd/conf/.htpasswd Require valid-user </Directory> Require valid-user: 文件中所有用户均可访问 Require user USERNAME, ...
提供认证文件
htpasswd
-c:
如果此文件事先不存在,则创建;注意,只能在创建第一个用户时使用;
-m:以md5的格式编码存储用户的密码信息
-D:删除指定用户
组认证
<Directory "/var/www/html/admin"> Options none AllowOverride AuthConfig AuthType Basic AuthName "Admin Area." #AuthBasicProvider file AuthUserFile /etc/httpd/conf/.htpasswd AuthGroupFile /etc/httpd/conf/.htgroup Require group GROUP_NAME </Directory>
组文件:
组名:user1 user2 user3
虚拟主机
虚拟主机:使用不同访问路径
基于端口
基于IP
基于主机名
使用虚拟的前提:取消主服务器
注释主服务器的站点根路径指定:DocumentRoot
定义虚拟主机
NameVirtualHost IP:PORT
<VirtualHost IP:PORT>
ServerName
DocumentRoot
ServerAlias
ErrorLog
CustomLog
</VirtualHost>
配置文件语法检查:
httpd -t
service httpd
configtest
https协议
ssl(安全的套接字层), tls(传输层安全)
http协议:文本编码
验正:使用telnet发请求
httpd: ssl
ssl模块
单独成包
ssl会话基于IP地址创建,所以,每一个IP仅创建一个SSL会话;
ssl握手要完成的工作:
交换协议版本号
选择双方都支持的加密方式
客户端对服务器端实现身份验正
密钥交换
https协议: 基于SSL二进制编码, 443/tcp
openssl s_client
客户端验正服务器端证书:
有效性检测:证书是否仍然在有效期内
CA的可信度检测:
证书的完整性检测:
持有者的身份检测
配置httpd工作于https:
(1) 安装mod_ssl模块
# yum install mod_ssl
(2) 为服务端生成私钥,并为其提供证书;
# mkdir /etc/httpd/ssl && cd /etc/httpd/ssl # (umask 077; openssl genrsa -out httpd.key 1024) # openssl req -new -key httpd.key -out httpd.csr
签署后的证书为:/etc/httpd/ssl/httpd.crt
(3) 配置使用https的虚拟主机;
SSLCertificateFile
SSLCertificateKeyFile
<VirtualHost IP:443>
DocumentRoot
ServerName
</VirtualHost>
(4) 重新装载配置
(5) 测试
# openssl s_client -connect IP:PORT -CAfile /path/to/ca_certificate
httpd程序包自带的工具介绍
httpd:
apache服务器程序
-t: 测试配置文件
-l: 列表静态模块
-D
DUMP_MODULES:列出DSO模块
-M:
-D DUMP_VHOSTS:
列出所有虚拟主机
htpasswd:
为基于文件的basic认证创建和更新用户认证文件
apachectl:
脚本,httpd服务控制工具;
ab: apache benchmark
httpd的基准性能测试工具;
apxs:
httpd得以扩展使用第三方模块的工具;
htcacheclean:
磁盘缓存清理工具;
htdigest:
为digest认证创建和更新用户认证文件
httxt2dbm:
为rewrite map创建dbm格式的文件
rotatelogs:
不关闭httpd而切换其使用日志文件的工具
access_log, access_log.1, access_log.2,
suexec:
User apache
Group apache
当httpd进程需要以另外的用户的身份去访问某些资源时,可以以suexec作临时切换;
23、资源限定
软限定:可临时超出一定时长的上限
硬限定:绝对不可超出的上限
管理员可使用ulimit命令临时性地修改各种资源的软限制;
ulimit -n #:能同时打开的文件数
-u #: 能同时启动的进程数
配置文件:
/etc/security/limits.conf /etc/security/limits.d/*.conf
24、编译安装httpd-2.4
编译安装httpd,httpd程序依赖于apr和apr-util,故下载源码httpd-2.4.9.tar.bz2和apr-1.5.0.tar.bz2 ,apr-util-1.5.3.tar.bz2
先安装apr,解压
# tar xf apr-1.5.0.tar.bz2
cd到apr-1.5.0
执行
# ./configure –prefix=/usr/local/apr
# make && make install;
然后安装apr-util
# tar 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;
编译安装httpd
# 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。
配置http的启动;
# cd /etc/httpd24
为保险备份一份httpd.conf
# cp httpd.conf httpd.conf.bak
编辑httpd.conf
# vim httpd.conf
加入PidFile
编辑
# vim /etc/rc.d/init.d/httpd24
提供SysV服务脚本到/etc/rc.d/init.d/httpd24
#!/bin/bash
#
# httpd Startup script for the Apache HTTP
Server
#
# chkconfig: - 85 15
# description: Apache is a World Wide
Web server. It is used to serve \
# HTML files and CGI.
#
processname: httpd
# config: /etc/httpd/conf/httpd.conf
# config:
/etc/sysconfig/httpd
# pidfile: /var/run/httpd.pid
# Source function library.
. /etc/rc.d/init.d/functions
if [ -f /etc/sysconfig/httpd ]; then
. /etc/sysconfig/httpd
fi
# Start httpd in the C locale by default.
HTTPD_LANG=${HTTPD_LANG-"C"}
# This will prevent initlog from swallowing up a pass-phrase prompt if
#
mod_ssl needs a pass-phrase from the user.
INITLOG_ARGS=""
# Set HTTPD=/usr/sbin/httpd.worker in /etc/sysconfig/httpd to use a server
# with the thread-based "worker" MPM; BE WARNED that some modules may not
# work correctly with a thread-based MPM; notably PHP will refuse to
start.
# Path to the apachectl script, server binary, and short-form for messages.
apachectl=/usr/local/apache/bin/apachectl
httpd=${HTTPD-/usr/local/apache/bin/httpd}
prog=httpd
pidfile=${PIDFILE-/var/run/httpd.pid}
lockfile=${LOCKFILE-/var/lock/subsys/httpd}
RETVAL=0
start() {
echo -n $"Starting $prog: "
LANG=$HTTPD_LANG daemon --pidfile=${pidfile} $httpd $OPTIONS
RETVAL=$?
echo
[ $RETVAL = 0 ] && touch
${lockfile}
return $RETVAL
}
stop() {
echo -n $"Stopping $prog: "
killproc -p ${pidfile} -d 10
$httpd
RETVAL=$?
echo
[ $RETVAL = 0 ] && rm -f
${lockfile} ${pidfile}
}
reload() {
echo -n $"Reloading $prog: "
if ! LANG=$HTTPD_LANG $httpd $OPTIONS -t >&/dev/null; then
RETVAL=$?
echo $"not reloading due to configuration
syntax error"
failure $"not reloading $httpd due to configuration
syntax error"
else
killproc -p ${pidfile} $httpd -HUP
RETVAL=$?
fi
echo
}
# See how we were called.
case "$1" in
start)
start
;;
stop)
stop
;;
status)
status -p ${pidfile}
$httpd
RETVAL=$?
;;
restart)
stop
start
;;
condrestart)
if [ -f ${pidfile} ] ; then
stop
start
fi
;;
reload)
reload
;;
graceful|help|configtest|fullstatus)
$apachectl $@
RETVAL=$?
;;
*)
echo $"Usage: $prog
{start|stop|restart|condrestart|reload|status|fullstatus|graceful|help|configtest}"
exit 1
esac
exit $RETVAL
为其加执行权限
# chmod +x /etc/rc.d/init.d/httpd24
添加至服务列表中
# chkconfig --add httpd24
。
启动
# service http24 start.