导读 apache是一款稳定的流行的web软件,是linux操作系统中默认的web管理软件。在RHEL/Centos系列中可以用rpm直接进行安装,服务名为httpd。apache有很多设置和调优 的注意事项,下面的文章将带你玩爆带你玩转apache,玩转httpd
1、监听的套接字
Listen [IP:]port

此指令可以出现多次, 用于指定监听多个不同的套接字:

Listen 80

Listen 192.168.1.116:8080
2、配置文件中使用的 keep alive

目前多数的浏览器都请求服务器保持持续连接,这种功能就称为“KeepAlive”,它是HTTP1.1中的标准规格,一般是用来强化服务器的性能。在使用保持连接功能时,设置客户一次请求连接能影响文件的最大上限,建议把默认值设为ON,以便提高访问性能。但当使用负载均衡时,会影响负载均衡的效果,在未断开连接之前,同义客户端始终被定向到同一台服务器。

KeepAlive {On|Off}

    KeepAliveTimeout 2                  #超时时间

    MaxKeepAliveRequests 50       #长连接最大请求数
3、MPM
 <IfModule prefork.c>  #判定模块是否存在
StartServers: 默认启动的工作进程数; #不包括主进程,主进程只是负责子进程的创建回收等
MinSpareServers: 最少空闲进程数;
MaxSpareServers: 最大空闲进程数;
ServerLimit: 最大活动进程数;
MaxClients: 并发请求的最大数; #请求连接进来不一定会活动,要小于等于serverlimit
MaxRequestsPerChild: 每个子进程在生命周期内所能够服务的最多请求个数;
</IfModule prefork.c> <IfModule prefork.c>
StartServers:启动的子进程的个数
MaxClients: 并发请求的最大数;
MinSpareThreads:最小空闲线程数;
MaxSpareThreads:最大空闲线程数;
ThreadsPerChild:每个子进程可生成的线程数;
MaxRequestsPerChild:每个子进程在生命周期内所能够服务的最多请求个数,0表示不限定;
</IfModule prefork.c>
4、DSO模块加载方式
   LoadModule module_name /path/to/module

如果使用相对路径,则对于ServerRoot所定义的位置而言;例如:

 LoadModule php5_module /usr/lib64/httpd/modules/php5.so

让服务重载配置文件方能生效;

httpd -M: 列出已经装载的所有DSO及非DSO模块
httpd -l: 列出支持使用的非DSO模块

默认使用prefork模块,若想使用worker,则修改脚本配置文件:

[root@localhost conf]# vim /etc/sysconfig/httpd 

#HTTPD=/usr/sbin/httpd.worker    #启用此项,修改所使用的二进制程序
5、配置站点根目录
DocumentRoot /path/to/somewhere

Apache服务器存放网页的路径,默认所有要求提供HTTP服务的连接,都以这个目录为主目录,默认为 /var/www/html。

6、配置页面访问属性
   <direcotry "/path/to/somewhere">
Options:
Indexes: 缺少指定的默认页面时,允许将目录中的所有文件以列表形式返回给用户,危险;
FollowSymLinks: 允许跟随符号链接所指向的原始文件;
None: 所有都不启用;
All: 所有都启用;
ExecCGI: 允许使用mod_cgi模块执行CGI脚本;
Includes: 允许使用mod_include模块实现服务器端包含(SSI);
MultiViews:允许使用mod_negotiation实现内容协商;
SymLinksIfOwnerMatch:在链接文件属主属组与原始文件的属主属组相同时,允许跟随符号链接所指向的原始文件;
</Directory> <Directory>可以配置网站目录下的访问属性,使用<Directory ~ "path">可以基于正则表达式的匹配,但是一般不建议使用,会耗费时间。类似的指令还有: <Location [~] "">: 配置URL访问属性,与<Directory>相似(可以配置像内生的status页面或者定义了别名的路径等); <File [~] ""> : 限定单个文件的访问属性; <locationmatch ""> : 相当于Location ~ ,但一般建议使用此配置进行正则匹配;

如果某要配置其属性的URL能映射到某具体文件系统路径,建议使用。

7、基于主机的访问控制
 <Direcotry "/path/to/somewhere">
Options
AllowOverride None #AllowOverride表示以下基于ip的访问控制是否被禁用,none表示不被禁用
Order Deny,Allow #后面的表示默认规则
Allow
Deny
</Direcotry>

基于IP控制:

       Allow from
Deny from
IP, Network Address
172.16
172.16.0.0
172.16.0.0/16
172.16.0.0/255.255.0.0

二者都匹配或二者都无匹配项时,则以后者为准;否则,则以匹配到的为准;

8、定义默认主页面
DirectoryIndex index.php index.html home.html default.html  #自左而右依次找
9、用户主页

如果期望让每个用户都可以创建个人站点:http://Server_IP/~Username/

  userdir disablied: 禁止
userdir public_html:public_html是用户家目录下的目录名称,所有位于此目录中的文件均可通过前述的访问路径进行访问

配置用户主页示例:

[root@localhost conf]# vim httpd.conf  #首先在配置文件中启用以下选项

 366     #UserDir disabled
367
368 UserDir public_html [root@localhost httpd]# service httpd reload
[root@localhost conf]# useradd feiyu
[root@localhost conf]# su - feiyu
[feiyu@localhost ~]$ mkdir public_html
[feiyu@localhost ~]$ cd public_html/
[feiyu@localhost public_html]$ echo "hello feiyu" > index.html

此时可以访问了。但apache用户没有权限读取文件,所以还得定义访问权限

[feiyu@localhost ~]$ ls -ld /home/feiyu/
drwx------. 6 feiyu feiyu 4096 Feb 15 20:42 /home/feiyu/
[feiyu@localhost ~]$ setfacl -m u:apache:x /home/feiyu/
[feiyu@localhost ~]$ getfacl /home/feiyu/
getfacl: Removing leading '/' from absolute path names
# file: home/feiyu/
# owner: feiyu
# group: feiyu
user::rwx
user:apache:--x
group::---
mask::--x
other::---
[feiyu@localhost ~]$ curl 192.168.1.117/~feiyu/
hello feiyu
10、配置日志功能

默认日志目录:/var/log/httpd/

 access.log: 访问日志,其需要记录的内容需要自定义

 error.log: 错误日志

访问日志:CustomLog “/path/to/access_log_file” Format_Name #CustomLog自定义访问日志路径LogFormat Format_String Format_Name

%h: 客户端地址

%l: 远程登录名,通常为-

%u: 认证时的远程用户名,没有认证时为-

%t: 收到请求时的时间;

%r: 请求报文的起始行;

%>s: 响应状态码;

%b: 响应报文的长度,单位为字节

%{Header_Name}i: 记录指定请求报文首部的内容(value);

详情请参考:http://httpd.apache.org/docs/2.2/mod/mod_log_config.html#formats

错误日志: ErrorLog

11、路径别名
  Alias /alias/ "/path/to/somewhere/"

意味着访问http://Server_IP/alias/时,其页面文件来自于/path/to/somewhere这个位置;
注意:前后路径要一致,结尾都有”/”或者都没有

12、设定默认字符集
    AddDefaultCharset  UTF-8

定义cgi脚本路径别名:

    CGI: Common Gateway Interface协议(执行某些文件时要以管理员的权限执行,已经很少被使用了)
13、CGI脚本路径别名
CGI: Common Gateway Interface协议(执行某些文件时要以管理员的权限执行,已经很少被使用了)

定义cgi脚本路径别名:

ScriptAlias /URL/ "/path/to/somewhere/"   #使用此种方法定义文件则被使用cgi协议执行或者显式使用execcgi
14、基于用户的访问控制

当你的网站或者站点的某个路径只想让你授权的用户访问时,就可以使用基于用户的访问控制。

虚拟用户:可以使用文件,SQL数据库或者ldap等机制进行认证。认证类型(auth):basic: 基本认证,帐号和密码明文发送;

digest:摘要认证,hash编程之后发送,大多浏览器不支持;

认证提供者(authentication provider):帐号和密码的存放位置

授权机制(authorization):根据什么进行授权

例:基于文件,做基本认证,根据用户和组进行授权

使用htpasswd命令生成认证库
htpasswd:

-c #第一次使用-c创建新文件,不是第一次不要使用此选项
-m #用户密码使用MD5加密后存放
-s #用户密码使用SHA加密后存放
-p #用户密码不加密
-d #禁用一个账户
-e #启用一个账户 [root@localhost fin]# htpasswd -c -m /etc/httpd/conf/.htpasswd feiyu #第一次需要使用-c选项创建文件
New password:
Re-type new password:
Adding password for user feiyu
[root@localhost fin]# htpasswd -m /etc/httpd/conf/.htpasswd feiyu1
New password:
Re-type new password:
Adding password for user feiyu1
配置认证机制
 <directory "/www/htdocs/fin">
Options None
AllowOverride AuthConfig
AuthType Basic
AuthName "Private Area"
# AuthBasicProvider file #可以不用指,默认为文件
AuthUserFile /etc/httpd/conf/.htpasswd #所使用的认证文件
Require valid-user #允许文件中的所有合法账号

访问界面如下所示:

基于组进行认证

先创建用户再创建组文件:

     组文件格式:

        组名: 用户1 用户2 用户3

    <directory "/www/htdocs/fin">
Options None
AllowOverride AuthConfig
AuthType Basic
AuthName "Private Area"
# AuthBasicProvider file
AuthUserFile /etc/httpd/conf/.htpasswd
AuthGroupFile /etc/httpd/conf/.htgroup #所使用的组文件
Require group GroupName
</directory ">
15、虚拟主机

虚拟主机意即一个物理服务器提供多个站点,以前刚建站时使用的是阿里云的免费虚拟主机,我想应该就是基于此方法配置的。虚拟主机的实现方法有三种:

基于不同的IP实现不同的虚拟主机:变化IP

基于不同的port实现不同的虚拟主机:变化port

基于不同的FQDN实现不同的虚拟主机:变化ServerName的参数

配置使用虚拟主机:

(1)注释中心主机,并启用相关配置

[root@localhost http]# vim /etc/httpd/conf/httpd.conf

DocumentRoot "/var/www/html"     #注释中心主机

NameVirtualHost *:80    #使用基于域名的虚拟主机时需要启动此项,并且下面的配置与其保持一致,在 httpd-2.4 中不需要使用

(2)基于ip的虚拟主机:

<VirtualHost 192.168.1.117:80>
ServerName www.feiyu1.com
DocumentRoot "/var/www/html/feiyu1"
</virtualhost> <VirtualHost 192.168.1.117:80>
ServerName www.feiyu2.com
DocumentRoot "/var/www/html/feiyu2"
</virtualhost>

(3)基于端口的虚拟主机:

<VirtualHost 192.168.1.117:80>
ServerName www.feiyu1.com
DocumentRoot "/var/www/html/feiyu1"
</VirtualHost>

<VirtualHost 192.168.1.117:8080> ServerName www.feiyu2.com DocumentRoot "/var/www/html/feiyu2"
</VirtualHost>
(4)基于域名的虚拟主机:

NameVirtualHost *:80

<VirtualHost *:80>
ServerName www.feiyu1.com
DocumentRoot "/var/www/html/feiyu1"
CustomLog "/var/log/httpd/feiyu1-access_log" combined
</VirtualHost> <VirtualHost *:80>
ServerName www.feiyu2.com
DocumentRoot "/var/www/html/feiyu2"
CustomLog "/var/log/httpd/feiyu2-access_log" combined
</VirtualHost>
16、启用 https 协议

https是在http的基础上进行ssl/tls加密实现的结果,启用https固然更安全,不会存在流量劫持等风险,但使用https就不再是三次握手了,它会增加建立连接的时间。

http与https首次请求对比图:

http: 文本协议,80/tcphttps: 二进制格式的协议, 443/tcpSSL握手要完成的工作:

交换协议版本号

选择双方都支持的加密方式

对两端实现身份验正

密钥交换

SSL会话基于IP地址进行,不支持在基于FQDN的虚拟主机上实现,所以在只有一个公网IP的服务器上使用虚拟主机时,只能为一个站点使用https。

配置支持https:

(1)安装httpd支持ssl模块
[root@localhost ~]# yum install mod_ssl -y
(2)自建CA
[root@localhost ~]# cd /etc/pki/CA
[root@localhost ~]# (umask 077; openssl genrsa -out private/cakey.pem 2048)
[root@localhost ~]# openssl req -new -x509 -key private/cakey.pem -out cacert.pem -days 365
(3)生成私钥
[root@localhost ~]# cd /etc/httpd/conf/
[root@localhost ~]# mkdir ssl
[root@localhost ~]# cd ssl
[root@localhost ~]# (umask 077; openssl genrsa -out httpd.key 1024)
(4)生成证书申请
[root@localhost ~]# openssl req -new -key httpd.key -out httpd.csr
(5)CA签署证书
[root@localhost ~]# openssl ca -in httpd.csr -out httpd.crt -days 365
(6)修改httpd的ssl配置文件
[root@localhost ~]# vim /etc/httpd/conf.d/ssl.conf
DocumentRoot "/var/www/html/feiyu1"
ServerName www.feiyu.com
SSLCertificateFile /etc/httpd/conf/ssl/httpd.crt
SSLCertificateKeyFile /etc/httpd/conf/ssl/httpd.key
(7)验证导入浏览器

验证,可以使用以下命令进行验证或者将证书导入到浏览器并进行访问:

# openssl s_client -connect IP:port -CAfile /path/to/CA_certificate_file
17、服务器status页面

status页面是httpd内生的,且此信息可以通过web予以显示,此信息是关于服务器的运行状态的所以不能对所有人都显示。

[root@localhost html]# vim /etc/httpd/conf/httpd.conf
<Location /server-status>
SetHandler server-status
AuthType Basic
AuthName "Server Status"
AuthUserFile "/etc/httpd/conf/.htpasswd"
Require valid-user
Order deny,allow
Allow from all <Location /server-status>

SetHandler: 显式的定义使用的处理器 ,是当文件被调用时,Apache内部表示形式;一般每种文件类型都有其隐式处理器;

18、使用mod_deflate模块压缩页面优化传输速度

一般当CPU多空闲,带宽压力大时才会启用压缩,启用压缩不但能优化传输速度也能节约带宽,但是其一个弊端就是会使缓存的命中率下降。

[root@localhost html]# vim /etc/httpd/conf/httpd.conf

SetOutputFilter DEFLATE    #启用deflate

 [root@localhost conf.d]# vim deflate.conf

    # Restrict compression to these MIME types    定义要压缩的文件类型
AddOutputFilterByType DEFLATE text/plain
AddOutputFilterByType DEFLATE text/html
AddOutputFilterByType DEFLATE application/xhtml+xml
AddOutputFilterByType DEFLATE text/xml
AddOutputFilterByType DEFLATE application/xml
AddOutputFilterByType DEFLATE application/x-javascript
AddOutputFilterByType DEFLATE text/javascript
AddOutputFilterByType DEFLATE text/css # Level of compression (Highest 9 - Lowest 1)
DeflateCompressionLevel 9 #压缩比,默认为6 # Netscape 4.x has some problems.
BrowserMatch ^Mozilla/4 gzip-only-text/html # Netscape 4.06-4.08 have some more problems
BrowserMatch ^Mozilla/4\.0[678] no-gzip # MSIE masquerades as Netscape, but it is fine
BrowserMatch \bMSI[E] !no-gzip !gzip-only-text/html
19、资源限定

软限制:可以超出的限制,但仅超出一定时长;

硬限制:绝对不能超出的限制

使用 ulimit 可以修改软限制:

-n [N]: 显示或限定能打开的最大的文件句柄数;

-u [N]: 所能够运行的最多进程数;

其相对应的配置文件为:/etc/security/limits.conf,扩展配置:/etc/security/limits.d/*.conf

root@tianfeiyu # vim /etc/security/limits.conf #设定硬限制
apache hard nofile 65535 #设定能打开的最大文件数
apache hard nproc 30000#设定能打开的最大进程数
20、httpd程序包自带的工具介绍

httpd:Apache 服务器。

apachectl:Apache HTTP 服务器控制工具。

ab:Apache HTTP 服务器性能基准工具。

apxs:Apache 扩展工具。

configure:配置源代码。

dbmmanage:为基本认证创建和更新 DBM 格式的用户认证文件。

htcacheclean:清理磁盘缓存。

htdigest:为摘要认证创建和更新用户认证文件。

htdbm:操作 DBM 密码数据库。

htpasswd:为基本认证创建和更新用户认证文件。

httxt2dbm:为 RewriteMap 创建 dbm 文件。

logresolve:将 Apache 日志文件中的 IP 地址解析到主机名称。

rotatelogs:不关闭 Apache 而切换日志文件。

suexec:执行外部程序前切换用户。

运行目录:/etc/httpd

配置文件:

主配置:/etc/httpd/conf/httpd.conf

扩展配置:/etc/httpd/conf.d/*.conf

Socket: 80/tcp, 443/tcp

文档根目录:/var/www/html

CGI目录:/var/www/cgi-bin/
MPM(Multipath Processing Module):多道处理模块,非一个模块,而是对一种特性的称谓 多进程模型 prefork: 一个进程响应一个请求(主进程创建进程响应) 多线程模型 worker: 一个主进程多个子进程,一个进程生成多个线程,一个线程响应一个请求,一个进程生成的线程数有限 事件模型 event: 一个线程响应多个请求,基于事件驱动机制来维持多个用户请求; event-driven: 事件驱动,主要目的在于实现单线程响应多个请求; httpd配置目录信息:服务脚本:/etc/rc.d/init.d/httpd脚本配置文件:/etc/sysconfig/httpd
高度模块化:DSO(Dynamic Shared Object)动态化装饰模块 MPM(Multipath Processing Module):多道处理模块,非一个模块,而是对一种特性的称谓

httpd-2.2 配置及用法完全攻略的更多相关文章

  1. 手把手教你通过Eclipse工程配置调用JNI完全攻略

    本文地址:http://www.cnblogs.com/wavky/p/JNI.html 当你找到并鬼使神差地打开这个博文的时候,我敢肯定你已经知道什么是JNI,基本概念就不粘贴了. 百度出来的JNI ...

  2. unity 中 protobuff 的用法 一句话攻略

    (一)unity 添加 pb 的 dll 支持.1,从GitHub上下载protobuf源码 (源码链接:https://github.com/google/protobuf),找到 csharp 分 ...

  3. linux下安装apache与php;Apache+PHP+MySQL配置攻略

    1.apache   在如下页面下载apache的for Linux 的源码包    http://www.apache.org/dist/httpd/;   存至/home/xx目录,xx是自建文件 ...

  4. centos7 apache httpd安装和配置django项目

    一.安装httpd服务 apache在centos7中是Apache HTTP server.如下对httpd的解释就是Apache HTTP Server.所以想安装apache其实是要安装http ...

  5. IIS 7完全攻略之日志记录配置(摘自网络)

    IIS 7完全攻略之日志记录配置 作者:泉之源 [IT168 专稿]除了 Windows 提供的日志记录功能外,IIS 7.0 还可以提供其他日志记录功能.例如,可以选择日志文件格式并指定要记录的请求 ...

  6. WampServer 在 httpd.conf 中配置多站点 (IP 配置法:不用每次修改 hosts 文件 + 域名配置法 )

    因为要用 ThinkPHP 的当前最新版本 3.2.2,对应要求 PHP 的版本要高于 5.3.0,所以安装了 WampServer 2.2 ( Apache 2.2.21,PHP 5.3.10,My ...

  7. DNS 和 IPv6 配置攻略

    Windows 2003 DNS配置攻略 http://lgzeng2360.blog.51cto.com/275998/161908/ http://ask.zol.com.cn/q/21861.h ...

  8. Android-x86虚拟机安装配置全攻略

    转自Android-x86虚拟机安装配置全攻略 注:这里安装从简,具体请参考虚拟机Vmware安装运行安卓4.0详细教程 Android-x86虚拟机安装配置网上有很多,但是全部说明白的确不多,希望这 ...

  9. Php和httpd.conf的配置

    http://www.cnblogs.com/homezzm/archive/2012/08/01/2618062.html http://book.51cto.com/art/201309/4096 ...

随机推荐

  1. 符号(void *)何解?符号(void **)又何解??

    http://bbs.csdn.net/topics/70050852 对于多级指针或者数组,要掌握正确的识别方法:void*  是说: 这是一个指针,去掉一个(*)就是它所指向的,在这里是指向放vo ...

  2. su su- sudo的区别

    linux su命令参数及用法详解(linux切换用户命令) su的作用是变更为其它使用者的身份,超级用户除外,需要键入该使用者的密码   linux su 命令 建议大家切换用户的时候 使用 su ...

  3. 10 months then free? 10个月,然后自由

    Parole board to recommend Oscar Pistorius be released in August 假释委员会将建议奥斯卡·皮斯托瑞斯在8月份被释放 By Don Melv ...

  4. 【转】Yeoman自动构建 Angularjs 项目

    Yeoman是什么? Yeoman按照官方说法,它不只是一个工具,还是一个工作流.它其实包括了三个部分yo.grunt.bower,分别用于项目的启动.文件操作.包管理. Yo: Yo是一个项目初始化 ...

  5. asp.net js 倒计时总秒数量 和 排序

    Edit in JSFiddle JavaScript HTML CSS Result h1 { font-family: "微软雅黑"; font-size: 40px; mar ...

  6. JQuery遍历方法$.each输出函数

    each()方法能使DOM循环结构简洁,不容易出错.each()函数封装了十分强大的遍历功能,使用也很方便,它可以遍历一维数组.多维数组.DOM, JSON 等等在javaScript开发过程中使用$ ...

  7. 浏览器本地存储(browser-storage,HTML5-localStorage > IE-UserData > Cookie)

    https://www.baidufe.com/component/browser-storage/index.html BrowserStorage是浏览器本地存储的一个解决方案,存储优先级依次为: ...

  8. 51job前程无忧网站打不开,51job网站进不了,51job打不开

    之前电脑一DNS一直用的四个114或者四个8,后面突然51job不能打开了,感觉莫名其妙地,因为手机上都能打开啊,虽然说51job上投简历没多大反应,但投了总比没投好吧.后面搞了好久,原来是DNS作怪 ...

  9. Auto generating Entity classes with xsd.exe for XML Serialization and De-Serialization

    More info here: http://blogs.msdn.com/b/yojoshi/archive/2011/05/14/xml-serialization-and-deserializa ...

  10. Storm集群安装部署步骤【详细版】

    作者: 大圆那些事 | 文章可以转载,请以超链接形式标明文章原始出处和作者信息 网址: http://www.cnblogs.com/panfeng412/archive/2012/11/30/how ...