Httpd学习笔记

Httpd默认提供的安装包在CentOS 6上是 2.2版本,在CentOS 7上是
2.4版本。

CentOS 6:

程序环境

配置文件:

/etc/httpd/conf/httpd.conf

/etc/httpd/conf.d/*.conf

服务脚本:

/etc/rc.d/init.d/httpd

配置文件:/etc/sysconfig/httpd

主程序文件:

/usr/sbin/httpd

/usr/sbin/httpd.event

/usr/sbin/httpd.worker

日志文件目录:

/var/log/httpd

access_log:
访问日志

error_log:错误日志

站点文档目录:

/var/www/html

模块文件路径:

/usr/lib64/httpd/modules

配置文件的组成:

~]# grep "Section"
/etc/httpd/conf/httpd.conf

### Section 1: Global Environment            //全局配置,定义工作特性,定义日志(主要是错误日志)

### Section 2: ‘Main‘ server
configuration           //主服务器配置

### Section 3: Virtual Hosts       
//虚拟主机配置

配置格式:directive
value

directive:
不区分字符大小写;

value:
为路径时,取决于文件系统;

常用配置

自加:cd
/etc/httpd/conf

cp httpd.conf{,.bak}       做备份

vim httpd.conf

1、修改监听的IP和Port

Listen
[IP:]PORT

省略ip表示监听本机所有IP;Listen可重复出现多次;

自加:在修改服务的配置文件后,reload即可,不用重启服务;例如,修改/etc/httpd/conf/httpd.conf,增加一条Listen
192.168.1.103:8080使用8080端口监听该地址;之后输入命令]# service httpd reload   即可;查看用]# ss -tunl  命令;同时在浏览器输入192.168.1.103:8080会出现欢迎页面

2、持久连接

Persistent
Connection:连接建立,每个资源获取完成后不会断开连接,而是继续等待其它的请求完成;

如何断开?有两种控制机制,进行断开

数量限制:默认100个

时间限制:可配置

副作用:对并发访问量较大的服务器,持久连接功能会使用有些请求得不到响应;

折衷方案:使用较短的持久连接时间;

httpd-2.4
支持毫秒级持久时间;

非持久连接

自加:打开/etc/httpd/conf/httpd.conf

KeepAlive On|Off        如果是Off,则为短连接;如果为On则为长连接

MaxKeepAliveRequests #  最大持久连接数量,当KeepAlive为On此项有用

KeepAliveTimeout #  持久连接超时时间,默认15秒

测试:

telnet
HOST PORT

GET
/URL HTTP/1.1

Host:
HOSTNAME or IP

自加:测试过程

~]# telnet 192.168.1.103 80

GET / HTTP/1.1

Host:192.168.1.103  此时按下两次回车,即可显示文本格式的欢迎页面

3、MPM

Multipath
Process Module:多道处理模块

prefork,
worker, event

httpd-2.2不支持同时编译多个模块,所以只能编译时选定一个;rpm安装的包提供三个二进制程序文件,分别用于实现对不同MPM机制的支持;确认方法:

#
ps aux  | grep httpd

如果使用的是prefork则执行上面一条命令后,结果是/usr/sbin/httpd

如果使用的是worker则执行上面一条命令后,结果是/usr/sbin/worker

如果使用的是event则执行上面一条命令后,结果是/usr/sbin/event

默认为/usr/sbin/httpd,
其使用prefork

查看模块列表的方法:

查看静态编译的模块

[[email protected] ~]# httpd -l

Compiled in modules:

core.c

prefork.c

http_core.c

mod_so.c

查看静态编译及动态装载的模块

# httpd -M

更换使用的httpd程序:

编辑/etc/sysconfig/httpd

HTTPD=

重启服务生效;

自加:~]# vim /etc/sysconfig/httpd

启动HTTPD=/usr/sbin/httpd.worker这一项

~]# service httpd restart

使用]# ps aux | grep httpd会显示 /usr/sbin/httpd.worker

prefork的配置:vim /etc/httpd/conf/httpd.conf 可以看到下面内容

<IfModule prefork.c>    如果你装载的模块是prefork.c模块,则包含以下内容

StartServers       8  
服务启动时启动多少个服务器进程

MinSpareServers    5  
最小空闲进程数

MaxSpareServers   20  
最大空闲进程数

ServerLimit      256

MaxClients       256  
定义最多256个客户端请求该服务器资源

MaxRequestsPerChild  4000

</IfModule>

worker的配置:

<IfModule
worker.c>

StartServers         4      服务器启动时启动的进程数

MaxClients         300      服务器端启动的最大线程数

MinSpareThreads     25      最小空闲线程数

MaxSpareThreads     75      最大空闲线程数

ThreadsPerChild     25      每个进程所能启动的线程数

MaxRequestsPerChild  0      每个线程所能响应的最大请求数量,0表示不作限制

</IfModule>

PV,
UV

PV:
Page View

UV:
User View

独立IP量;

300*86400=40W+

4、DSO

在 ]# vim /etc/httpd/conf/httpd.conf 启用或停用模块,之后重载一下,service httpd reload

配置指令实现模块加载

LoadModule
<mod_name> <mod_path>

模块路径可使用相对地址

相对于ServerRoot(/etc/httpd)指向的路径而言;

/etc/httpd/modules/

自加:/etc/httpd/modules是一个连接文件

~]# ls -l /etc/httpd/modules

lrwxrwxrwx 1 root root 29 Sep 14 17:28 /etc/httpd/modules ->
../../usr/lib64/httpd/modules

5、定义‘Main‘
server的文档页面路径

DocumentRoot  文档根路径

文档路径映射:

DocumentRoot指向的路径为URL路径的起始位置;

DocumentRoot
"/var/www/html"

test/index.html --> http://HOST:PORT/test/index.html   其中,/test/index.html中标红的部分,相当于/var/www/html

注意:通过getenforce 查看SELinux是否关闭

小实验:

1.mkdir /www/htdocs -pv

在htdocs下建立index.html文件

2.~]# vim /etc/httpd/conf/httpd.conf

修改DocumentRoot
"/var/www/html"为DocumentRoot
"/www/htdocs"

3.重载   ~]# service httpd
reload

4.在浏览器中输入http://192.168.1.103:8080/  则会显示index.html中的内容

6、站点访问控制

可基于两种类型的路径指明对哪些资源进行访问控制

文件系统路径:

<Directory
""> </Direcotry>

<File
""> </File>

<FileMatch
""> </FileMatch> 正则表达式匹配,尽量不要用

URL路径:

<Location
""> </Location>

...

访问控制机制:基于来源地址IP(风险较大);基于账号(账号密码)

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

自加:打开/etc/httpd/conf/httpd.conf

(1)
Options

所有可用特性:Indexes Includes FollowSymLinksSymLinksifOwnerMatch ExecCGI MultiViews

None,
All

Indexes:
索引;

FollowSymlinks:允许跟踪符号链接文件;

(2)
基于来源地址的访问控制机制

Order:检查次序

Order allow,deny    这是做白名单,默认是deny,只有allow的才可以访问

Order deny,allow    这是做黑名单

Allow
from

Deny
from

来源地址:

IP

NetAddr:

172.16

172.16.0.0

172.16.0.0/16

172.16.0.0/255.255.0.0

8、定义默认主页面

DirecotryIndex
index.html index.html.var

9、日志设定

自加:打开/etc/httpd/conf/httpd.conf

错误日志:

ErrorLog logs/error_log

LogLevel
warn

debug,
info, notice, warn, error, crit, alert, emerg

访问日志:

CustomLog logs/access_log combined  自加:(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 if return status
(%s) is 401),-表示为空;用户认证时的用户名

%t:Time
the request was received (standard english format),服务器收到请求的时间;

%r:First
line of request,请求报文的道行信息(method url 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"

例如:http://www.magedu.com/download/bash-4.4.2-3.el6.x86_64.rpm

-->
/www/htdocs/download/bash-4.4.2-3.el6.x86_64.rpm

Alias
/URL/
"/PATH/TO/SOMEDIR/"

Alias
/bbs/ "/forum/htdocs"

http://www.magedu.com/bbs/index.html

-->
/forum/htdocs/bbs/

11、设定默认字符集

AddDefaultCharset
UTF-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>

允许账号文件中的所有用户登录访问:Require
valid-user

自加:我有开了一台MageCentos3  地址为192.168.1.105

vim /etc/httpd/conf/httpd.conf之后加入如下内容:

<Directory "/www/htdocs/admin">

Options None

AllowOverride None

AuthType Basic

AuthName "Adimistator
private"

AuthUserFile
"/etc/httpd/conf.d/.htpasswd"

Require valid-user

</Directory>

重启服务   ]# service httpd restart

之后再浏览器上输入192.168.1.105/admin/会显示如图的内容

(2)
提供账号和密码存储(文本文件)

使用htpasswd命令进行管理

htpasswd
[options] passwordfile username

-c: 自动创建passwordfile,因此,仅应该在添加第一个用户时使用;

-m:
md5加密用户密码;

-s:
sha1加密用户密码;

-D:
删除指定用户

自加:添加用户tom 和密码123456

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

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

重载一下 ]# service
httpd reload

在浏览器里输入192.168.1.105/admin/然后在上图中输入用户名和密码即可登录

(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 "Administator private"

AuthUserFile
"/etc/httpd/conf.d/.htpasswd"

AuthGroupFile
"/etc/httpd/conf.d/.htgroup"

Require group webadmin

</Directory>

自加:在增加一个用户,密码123456

]# htpasswd -m /etc/httpd/conf.d/.htpasswd obama

定义一个组文件]# vim /etc/httpd/conf.d/.htgroup 内容 webadmin:  jerry obamba

vim /etc/httpd/conf/httpd.conf之后加入如下内容:

<Directory "/www/htdocs/admin">

Options None

AllowOverride None

AuthType Basic

AuthName "Adimistator
private"

AuthUserFile
"/etc/httpd/conf.d/.htpasswd"

AuthGroupFile
"/etc/httpd/conf.d/.htgroup"

Require group webadmin

</Directory>

问题:为什么obama登录不了

13、虚拟主机

有三种实现方案:

基于ip:为每个虚拟主机准备至少一个ip地址;

基于port:为每个虚拟主机准备至少一个专用port;实践中很少使用;

基于hostname:为每个虚拟主机准备至少一个专用hostname;

可混合使用上述三种方式中任意方式;

注意:一般虚拟主机莫与中心主机混用,所以,要使用虚拟主机,先禁用中心主机;

禁用中心主机:注释DocumentRoot

每个虚拟主机都有专用配置:

<VirtualHost
"IP:PORT">

SeverName

DocumentRoot
""

</VirtualHost>

ServerAlias:
虚拟主机的别名;

ErrorLog
错误日志

CustomLog
访问日志

<Directory
"">

</Directory>

示例1:基于ip

<VirtualHost
172.16.100.6:80>

ServerName
web1.magedu.com

DocumentRoot
"/vhosts/web1/htdocs"

</VirtualHost>

<VirtualHost
172.16.100.7:80>

ServerName
web2.magedu.com

DocumentRoot
"/vhosts/web2/htdocs"

</VirtualHost>

自加:在MageCentos3上做的实验,地址192.168.1.105

1.注释中心主机  vim /etc/httpd/conf/httpd.conf

#DocumentRoot "/www/htdocs"

然后 在文件最后加上如下内容

<VirtualHost 192.168.1.105:80>

Servername
web1.magedu.com

DocumentRoot
"/vhosts/web1/htdocs"

</VirtualHost>

<VirtualHost 192.168.1.106:80>

Servername
web2.magedu.com

DocumentRoot
"/vhosts/web2/htdocs"

</VirtualHost>

2. 使用]# service httpd
configtest来测试配置文件是否有语法错误,用http -t也可以

3.创建虚拟主机文件   ]# mkdir -p /vhosts/{web1,web2,web3,web4}/htdocs

]# vim /vhosts/web1/htdocs/index.html    里面的内容随便写

]# vim /vhosts/web2/htdocs/index.html

4.添加一个IP地址

]# ip addr add 192.168.1.106/24 dev eth0

5.在浏览器中输入192.168.1.105显示如图

在浏览器中输入192.168.1.106

示例2:基于port

<VirtualHost
172.16.100.7:80>

ServerName
web2.magedu.com

DocumentRoot
"/vhosts/web2/htdocs"

</VirtualHost>

<VirtualHost
172.16.100.7:8080>

ServerName
web3.magedu.com

DocumentRoot
"/vhosts/web3/htdocs"

</VirtualHost>

自加:在MageCentos3上做的实验,地址192.168.1.105  接着示例1的实验

1.vim /etc/httpd/conf/httpd.conf 在后面加入如下内容

<VirtualHost
192.168.1.106:8080>

Servername web3.magedu.com

DocumentRoot
"/vhosts/web3/htdocs"

</VirtualHost>

同时增加一条 Listen 8080

2.为web3提供页面   ]# vim
/vhosts/web3/htdocs/index.html

3.]# service httpd restart

4.在浏览器输入192.168.1.106:8080 则出现如图

示例3:基于hostname

<VirtualHost
172.16.100.6:80>

ServerName
web1.magedu.com

DocumentRoot
"/vhosts/web1/htdocs"

</VirtualHost>

<VirtualHost
172.16.100.6:80>

ServerName
web2.magedu.com

DocumentRoot
"/vhosts/web2/htdocs"

</VirtualHost>

<VirtualHost
172.16.100.6:80>

ServerName
web3.magedu.com

DocumentRoot
"/vhosts/web3/htdocs"

</VirtualHost>

自加:1.要想使用基于hostname的认证方式,则要启用/etc/httpd/conf/httpd.conf中的 NameVirtualHost
*:80    (在http2.2中要这样改)

并改为NameVirtualHost 192.168.1.105:80

2.  将前两个示例中的配置修改为

<VirtualHost 192.168.1.105:80>

Servername web1.magedu.com

DocumentRoot
"/vhosts/web1/htdocs"

</VirtualHost>

<VirtualHost 192.168.1.105:80>

Servername web2.magedu.com

DocumentRoot
"/vhosts/web2/htdocs"

</VirtualHost>

<VirtualHost 192.168.1.105:80>

Servername web3.magedu.com

DocumentRoot
"/vhosts/web3/htdocs"

</VirtualHost>

检查语法   ]# httpd -t

重载服务   ]# service httpd
reload

3.在Centos7上 地址 192.168.1.104上]# vim /etc/hosts

写入如下内容192.168.1.105
web1.magedu.com web2.magedu.com web3.magedu.com

加入专用日志文件:

]# vim /etc/httpd/conf/httpd.conf   红框中为加入内容

之后检查语法]# httpd -t  然后重载 ]# service httpd reload

在Centos7上执行如下命令

查看产生的日志文件

14、内置的status页面

<Location
/server-status>

SetHandler
server-status

Order
deny,allow

Deny
from all

Allow
from 172.16

</Location>

时间: 2024-11-07 00:19:53

Httpd学习笔记的相关文章

httpd 学习笔记

一 什么是Apache  Apache 是一种高度可配置的软件.它具有大量特性,但每一种都代价高昂.从某种程度上来说,调优Apache 来说就是以恰当的方式分配资源,还涉及到将配置简化为仅包含必要内容. 二 http 官方主要维护的版本: httpd 2.0 2.2 .2. 4 主要官方还在维护这几个版本 2.2 主流 2.0 以稳定著称 2.4 加入了很多新的特性 三  http 的特征 事先创建进程: 空闲进程不够,继续创建新的进程: 按需维护适当的进程: 模块化设计的,核心比较小,各种功能

[原创] linux课堂-学习笔记-目录及概况

本学习笔记基于:网易云课堂-linux课堂 课时1Centos 6.4安装讲解46:14 课时2Centos 6.4桌面环境介绍与网络连接04:30 课时3 Linux目录结构介绍及内核与shell分析37:19 课时4 Linux获得帮助_网络配置_合理关机64:23 课时5 Linux文件权限详解45:47 课时6Linux文件权限详解45:47 课时7目录显示个性操作与全局环境变量的使用与注意···43:25 课时8复制与远程复制_文件查找实例_文件内容查看的··57:49 课时9Linu

Linux shell脚本-基础学习笔记

Linux脚本能力不是太强,最近再补习下,毕竟linux shell在日常工作中还是很普遍的, 用起来更方便.省时省力. 以下是学习笔记,偏理论,后面有几个例子,供参考. shell脚本组成元素系统命令.文本处理工具(grep\sed等).变量.条件判断.循环结构和函数 -------------------------------------------- 三剑客:grep,sed,awk,还有wc,sort,head等 ------------------------------------

Linux 程序设计学习笔记----进程管理与程序开发(下)

转载请注明出处:http://blog.csdn.net/suool/article/details/38419983,谢谢! 进程管理及其控制 创建进程 fork()函数 函数说明具体参见:http://pubs.opengroup.org/onlinepubs/009695399/functions/fork.html 返回值:Upon successful completion, fork() shall return 0 to the child process and shall re

【转】TCP/IP详解学习笔记(二)

TCP/IP详解学习笔记(5)-IP选路,动态选路,和一些细节 1.静态IP选路 1.1.一个简单的路由表 选路是IP层最重要的一个功能之一.前面的部分已经简单的讲过路由器是通过何种规则来根据IP数据包的IP地址来选择路由.这里就不重复了.首先来看看一个简单的系统路由表. Destination     Gateway         Genmask         Flags Metric Ref    Use Iface192.168.11.0    *               255.

Puppet学习笔记(CentOS6.3+Puppet3.01)

Puppet学习笔记(CentOS6.3+Puppet3.01) 技术 Add comments Oct262012 下了决心,好好学习puppet,周末专门去参加一个puppet的培训,难得朋友那么热心,组织大家一起去学习.我就提前做一下功课. 2012年10月29日:参加完两天的培训,深刻体会到puppet的强悍,当然讲Puppet的朋友,还是非常有经验,不只是puppet经验,还有讲课的经验,学习一个新东西的经验.一个最大的收获:官方的文档非常好,把puppet读完,你就差不多. Cont

Linux学习笔记033_11进程

ps:(process information,静态的) 显示进程信息,不加参数显示当前终端的进程 a:包括所有终端的进程 x:不属于任何终端的进程,和任何用户无关系的进程 u:显示出进程的拥有人 f:显示进程的附属关系(依赖关系,父子进程) USER:进程的拥有人 PID:进程ID,默认用进程ID排序 VSZ:程序在运行时调用多少虚拟内存 RSS:真实内存 TTY:?不属于任何终端,进入终端之前就运行 STAT:状态,s为睡眠 TIME:进程持续时间 COMMAND:运行这个进程的指令 ps

(转)两千行PHP学习笔记

亲们,如约而至的PHP笔记来啦~绝对干货! 以下为我以前学PHP时做的笔记,时不时的也会添加一些基础知识点进去,有时还翻出来查查. MySQL笔记:一千行MySQL学习笔记http://www.cnblogs.com/shockerli/p/1000-plus-line-mysql-notes.html //语法错误(syntax error)在语法分析阶段,源代码并未被执行,故不会有任何输出. /* [命名规则] */ 常量名 类常量建议全大写,单词间用下划线分隔 // MIN_WIDTH 变

Linux 新手的学习笔记

1.ln命令 例: /bin/ln -snf /var/www/html/test /var/www/test 2.cp命令 例: cp -r 地址1 地址2 3.rm命令 例: rm -rf 地址 4.vi命令 5.chkconfig命令 例: chkconfig httpd on  (开机自启动httpd服务) 6./etc/inittab 在这里修改是否默认进入图形界面,3为命令行,5为图形界面 7./etc/sysconfig/network-scripts/ 在这里修改网络相关的内容