首页 > 代码库 > httpd学习:linux web server
httpd学习:linux web server
httpd:
安装方式:
rpm包安装,光盘
]# rpm -q httpd
httpd-2.2.15-60.el6.centos.4.x86_64
编译
centos6:
配置文件/etc/httpd/conf/httpd.conf
/etc/httpd/ 根目录
conf.d/*.conf作为httpd.conf的补充文件
服务脚本/etc/rc.d/init.d/httpd
配置文件/etc/sysconfig/httpd
主程序文件/
# rpm -ql httpd | grep "bin"
/usr/sbin/apachectl
/usr/sbin/htcacheclean
/usr/sbin/httpd
/usr/sbin/httpd.event
/usr/sbin/httpd.worker
。。。。。。
日志文件/var/log/httpd
access_log:访问日志
error_log:错误日志
站点文档目录/var/www/html
配置文件组成
~]# grep ‘section‘ /etc/httpd/conf/httpd.conf
# The configuration directives are grouped into three basic sections:
# The directives in this section affect the overall operation of Apache,
# The directives in this section set up the values used by the ‘main‘
# WebDAV module configuration section.
# The first VirtualHost section is used for requests without a known
配置格式:directivevalue
directive: 不区分字符大小写;
value: 为路径时,取决于文件系统;
常用修改配置
~# cp/etc/httpd/conf/httpd.conf{,.bak}
1、修改端口Listen 12.34.56.78:80省略ip表示监听所有端口,listen可以多次
~# ss -tnl |grep ‘80‘
2、持久连接,获取资源后不断开等待请求
persisten connection
如何断开:数量、时间,httpd2.4支持毫秒级持久时间
非持久连接,打开一个资源获取后立即断开
KeepAliveOff|ON选择打开或者关闭持久连接
MaxKeepAliveRequests最大连接数
KeepAliveTimeout15保持时间
请求连接:$ telnet 192.168.5.11 83
GET /URL HTTP1/.1
HOST:HOSTNAME OR IP
3、MPM,multipathprocess module多路处理模块
prefork、worker、event
httpd-2.2不支持同时编译多个模块,所以只能编译时选定一个;rpm安装的包提供三个二进制程序文件,分别用于实现对不同MPM机制的支持,# ps-ax | grep httpd默认为/usr/sbin/httpd,prefork
#httpd -h帮助
#httpd -l查看静态编译模块 -M查看所有模块
Compiled in modules:
core.c
prefork.c
http_core.c
mod_so.c
更换http程序/etc/sysconfig/httpd
#HTTPD=/usr/sbin/httpd.worker|prefork|event
重启服务
httpd.worker -l
Compiled in modules:
core.c
worker.c
http_core.c
mod_so.c
prefork的配置:
<IfModule prefork.c>
StartServers 8
MinSpareServers 5
MaxSpareServers 20
ServerLimit 256
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量;
300*86400=40W+
4、DSO
配置指令实现模块加载
LoadModule<mod_name> <mod_path>
模块路径可使用相对地址
相对于ServerRoot(/etc/httpd)指向的路径而言;
#/etc/httpd/modules/
5、定义‘Main‘ server的文档页面路径,根路径
DocumentRoot
文档路径映射:
DocumentRoot指向的路径为URL路径的起始位置;
# vi /etc/httpd/conf/httpd.conf
DocumentRoot "/var/www/html"
6、站点访问控制
可基于两种类型的路径指明对哪些资源进行访问控制
文件系统路径:
<Directory ""> </Direcotry>针对目录所有文件
<File ""> </File>针对单个文件
<FileMatch ""> </FileMatch>正则表达式,效率低
URL路径:
<Location ""> </Location>
...
访问控制机制:
基于来源地址;
基于账号;
7、Directory中“基于来源地址”实现访问控制
(1)Options
所有可用特性:Indexes Includes FollowSymLinks SymLinksifOwnerMatch ExecCGI MultiViews多视图
None, All,include
Indexes: 索引;
Options Indexes FollowSymLinks比较危险,一般禁止
FollowSymlinks:允许跟踪符号链接文;
AllowOverride:是否允许覆盖 None
(2) 基于来源地址的访问控制机制
Order:检查次序,后面默认机制
Order allow,deny白名单
Order deny,allow黑名单
Allow from 来源
Deny from 来源
来源地址:
IP NetAddr:172.16.0.0/16 or172.16.0.0/255.255.0.0
8、定义默认主页面
DirecotryIndexindex.html index.html.var
9、日志设定
错误日志:
ErrorLoglogs/error_log
LogLevelwarn
debug,info, notice, warn, error, crit, alert, emerg
访问日志:
CustomLoglogs/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 ifreturn status (%s) is 401);
%t:Time the request was received (standard englishformat),服务器收到请求的时间;
%r:First line of request,请求报文的道行信息(methodurl 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"
--> /www/htdocs/download/bash-4.4.2-3.el6.x86_64.rpm
Alias/URL/"/PATH/TO/SOMEDIR/"
Alias/bbs/ "/forum/htdocs"
--> /forum/htdocs/bbs/
11、设定默认字符集
AddDefaultCharsetUTF-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>
允许账号文件中的所有用户登录访问:
Requirevalid-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_NAME:user1 user2 user3 ...
示例:
<Directory "/www/htdocs/admin">
Options None
AllowOverride None
AuthType Basic
AuthName "Administatorprivate"
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>
14、内置的status页面
<Location /server-status>
SetHandler server-status
Order deny,allow
Deny from all
Allow from 172.16
</Location>
实现:基于账号实现访问控制
本文出自 “勤能补拙” 博客,请务必保留此出处http://echoroot.blog.51cto.com/11804540/1948335
httpd学习:linux web server