首页 > 代码库 > 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

3MPM,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+

 

4DSO

配置指令实现模块加载

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>

...

访问控制机制:

基于来源地址

基于账号;

 

7Directory中“基于来源地址”实现访问控制

(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);

%tTime the request was received (standard englishformat),服务器收到请求的时间;

%rFirst 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_NAMEuser1 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