Linux httpd的配置

Httpd(即Apache)作为当今最流行的的web server之一,在互联网中起着至关重要的作用。

 

Httpd的安装(操作系统为Centos6)

Httpd的安装方式通常有两种,一直是直接利用rpm包进行直接安装,另一种是源码编译安装。这里我们先用rpm包直接安装就行了

[root@localhost ~]# yum install httpd

安装好之后我们可以看下生成了哪些文件

[root@localhost ~]# rpm -ql 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: 错误日志

 

持久连接(又称为长连接)

持久连接即是在规定的一定时间或者规定的请求数内,客户端向服务器端请求资源时,不必每次都重新经过TCP三次握手建立连接,而是直接请求,这样就大大的节约了时间。但它并非适合所有请求者,对于一些只请求一次或者次数很少的用户,这就变成了占用资源,因此长连接直接影响到了服务器的性能。

Timeout 60   
在客户端和服务器端TCP三次握手的时候,当客户端发起请求,服务器端响应请求之后,服务器端等待客户端确认的时间,如果客户端在时间内未确认,则服务器将关闭该次TCP握手。
KeepAlive {On|Off} 
持久连接是否启用
MaxKeepAliveRequests 100  
服务器单个持久连接最大的请求数,超过即断开
KeepAliveTimeout 15   
单个持久连接最大连接时长,超过即断开

 

MPM参数
这里定义的是httpd的工作模式(注意:只能使用其中一种)
httpd在linux下默认使用prefork, 当然这是我们可以自己定义的。
prefork : httpd使用进程来提供服务,每个进程在同一时间提供一次服务。  
worker : httpd在启动的时候,会由root进程派生出几个子进程,每个子进程中会有固定数量的线程,到时候提供服务的,就是这些线程,也就是说一个进程能够同时提供多次服务。

<IfModule prefork.c>
    StartServers       8          是httpd刚启动时,root进程创建的子进程数
    MinSpareServers    5          最少的空闲子进程数
    MaxSpareServers   20          最大的空闲子进程数
    ServerLimit      256          服务器能接受的最大的并发请求数
    MaxClients       256          客户端最大并发请求的数量   显然它必须小于serverlimit
    MaxRequestsPerChild  4000     每个子进程最多可以接受的请求数,超过即KILL
</IfModule>

<IfModule worker.c>
    StartServers         4        是httpd刚启动时,root进程创建的子进程数
    MaxClients         300        客户端最大并发请求的数量
    MinSpareThreads     25        最少的空闲线程数
    MaxSpareThreads     75        最大的空闲进程数
    ThreadsPerChild     25        每个子进程最多可以生成的线程数
    MaxRequestsPerChild  0        每个子进程可接受的请求数,0表示任意个
</IfModule>

 

指定监听的地址和端口

格式:Listen [IP:]PORT     IP地址可以省略
端口是可以定义多个的,他并不是唯一的
一般httpd默认监听在80端口

 

DSO机制装载的模块
DSO即Dynamic Shared Object动态分享对象。
这里定义了系统装载的一些模块,其格式为

LoadModule  Module_Name(模块名称)/path/to/Module_File

(模块路径,这里是相对路径,相对于前面定义的ServerRoot "/etc/httpd"目录下,当然也可以使用绝对路径)
如果你想添加模块的话,直接按照格式写在配置文件中即可;
当然,你不想启用的话可以直接通过#进行注释即可,保存后即可生效。

wKiom1PnWYiBNDDYAAMU1E1sEeE825.jpg

你也可以通过命令查看装载的模块信息

# httpd -D DUMP_MODULES

 

指定站点根目录

DocumentRoot "/var/www/html"

DocumentRoot定义了httpd服务器的站点根目录,你在互联网上访问该服务器时访问的都是该根目录下的内容;当然,路径也是可以自己定义的,默认一般都为/var/www/html

站点路径访问控制
这里的访问控制可以有2种方式:
基于本地文件系统路径:

<Directory "/path/to/somewhere">
</Directory>

wKioL1PnW3PwJtY3AAGKhf-pqko402.jpg

(1) Options
Indexes: 当访问的路径下无默认的主页面,将所有资源以列表形式呈现给用户;
这项比较危险,一般不建议启用;当然如果作为文件服务器让别人下载文件的话可以启用。
FollowSymlinks: 跳跃符号链接,直接相当于访问符号链接指向的文件。
(2) AllowOverride
支持在每个页面目录下创建.htaccess用于实现对此目录中资源访问时的访问控制功能。
(3) Order
Deny为拒绝,allow为允许。网络地址格式较为灵活:
172.16
172.16.0.0
172.16.0.0/16
172.16.0.0/255.255.0.0
可以通过deny和allow的先后顺序不同来定义白名单和黑名单
例如:
order deny allow
deny  192.168.0.1
这样就定义了一个黑名单,除了192.168.0.1都可以访问

再如:
order  allow deny
allow  172.16.0.0/16  
这样就定义了个白名单,除了172.16.0.0网段的都不能访问

 

基于URL访问路径做访问控制

<Location "/path/to/URL">
</Location>

 

定义默认的主页面:

DirectoryIndex index.html index.html.var

DirectoryIndex可以定义服务器的默认主页面

这里需要解释的是:当通过互联网访问你的服务器时,访问的是某个路径,而非路径下的文件时,如果该路径下有对应的index.html或者index.html.var文件,则显示为该文件的内容,否则,则会根据站点访问控制里的options选项显示相应的内容。

配置日志功能
这里定义了错误日志以及访问日志,日志的等级,日志的格式等。
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: 记录指定首部对应的值

 

路径别名
路径别名可以实现URL路径的映射,从而所访问的页面资源不再依赖于站点的根目录。
格式:
Alias /URL/ "/path/to/somewhere/"

wKiom1PnXKLTUgmvAABb2pKtvas777.jpg

 

CGI脚本
脚本的默认存放位置:/var/www/cgi-bin/
在浏览器中的访问格式:http://server/cgi-bin/

wKioL1PnXfqyg76PAAClqxxKF2k884.jpg

 

虚拟主机
虚拟主机可以分成3类
1、基于端口
2、基于IP
3、基于主机名
注意,使用虚拟的前提:取消主服务器,即注释主服务器的站点根路径指定:DocumentRoot

定义虚拟主机
NameVirtualHost IP:PORT
<VirtualHost IP:PORT>
  ServerName
  DocumentRoot
  ServerAlias
  ErrorLog
  CustomLog
</VirtualHost>

配置文件语法检查:
httpd -t
service httpd configtest

配置示例:

<VirtualHost 172.16.249.57:80>      第一个和第二个是基于主机名的,第三个是基于端口的
    ServerName www.a.org   
    DocumentRoot "/web/a"           需要声明的是这些目录都要先创建起来,并且每个根目录下
</VirtualHost>                      都有创建index.html文件,里面分别写上a,b,c
<VirtualHost 172.16.249.57:80>         
    ServerName www.b.net
    DocumentRoot "/web/b" 
</VirtualHost> 
<VirtualHost 172.16.249.57:8080>
    ServerName www.c.gov 
    DocumentRoot "/web/c" 
</VirtualHost

 

转:http://wiggins.blog.51cto.com/8733640/1538289

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值