Apache下载
https://httpd.apache.org/download.cgi
Apache目录结构
-|- bin ->binary,二进制文件,是apache的主程序及控制台等可执行程序的目录
-|- cgi-bin ->公共网管接口方目录
-|- conf ->配置文件目录
-|- |- extra ->辅配置子配置
-|- |-original ->原始配置目录
-|- |-httpd.conf ->主配置文件
-|-error -> 存入一些请求错误时,所给客户回应的信息
-|-htdocs ->网页主目录
-|-icons ->小图标
-|-include和lib apache编写引用的头文件和类库
-|-logs ->日志信息,其中error.log是错误日志信息,对我们调试有帮助
-|-modules ->模块目录,已经编译好的各种功能模块
-|- ABOUT_APACHE.txt Apache说明
-|- CHANGES.txt Apache版本变动情况
-|- INSTALL.txt Apache在不同操作系统上安装说明
-|- LICENSE.txt Apache许可声明
-|- Licenses.txt Apache使用其他插件的许可情况
-|- NOTICE.txt 使用Apache的注意事项
以上主要用到四个文件夹:bin、conf、htdocs、modules。
bin目录
|-- bin # apache服务的命令目录
| |-- ab # http服务性能测试工具
| |-- apachectl # apache启动命令 windows下为ApacheMonitor.exe程序
| |-- apr-1-config
| |-- apu-1-config
| |-- apxs # http服务编译和安装扩展模块使用工具,在DSO方式模块编译时用到
| |-- checkgid
| |-- dbmmanage
| |-- envvars
| |-- envvars-std
| |-- htcacheclean # 清理磁盘缓冲区的控制命令
| |-- htdbm
| |-- htdigest
| |-- htpasswd # 建立和更新基本认证文件
| |-- httpd # httpd为apache的控制命令程序
| |-- httxt2dbm
| |-- logresolve
| -- rotatelogs
conf目录
|-- extra # 额外的apache配置文件目录 如:httpd-vhost.conf
| |-- httpd-autoindex.conf
| |-- httpd-dav.conf
| |-- httpd-default.conf
| |-- httpd-info.conf
| |-- httpd-languages.conf
| |-- httpd-manual.conf
| |-- httpd-mpm.conf
| |-- httpd-multilang-errordoc.conf
| |-- httpd-ssl.conf
| |-- httpd-userdir.conf
| |-- httpd-vhosts.conf
|-- httpd.conf # apache主配置文件
|-- magic
|-- mime.types
|-- original
| |-- extra
| | |-- httpd-autoindex.conf
| | |-- httpd-dav.conf # dav支持配置
| | |-- httpd-default.conf # 这个文件里配置的是apache的相关服务参数:超时时间、保持链接
| | |-- httpd-info.conf
| | |-- httpd-languages.conf # 语言支持
| | |-- httpd-manual.conf
| | |-- httpd-mpm.conf # 服务器池管理,也是优化apache的一个配置文件(apache的模式以及配置链接数,常用模式为worker模式和profork模式,默认porfork)
| | |-- httpd-multilang-errordoc.conf
| | |-- httpd-ssl.conf # 提供apache ssl支持配置文件
| | |-- httpd-userdir.conf
| | |-- httpd-vhosts.conf # 虚拟机的配置文件
| |-- httpd.conf
htdocs目录
|-- htdocs
| |-- index.html 默认站点发布文件,可以在主配置文件夹httpd.conf中指定发布文件位置:DocumentRoot "${SRVROOT}/htdocs" 修改为实际的网页文件位置,重启即可。
modules目录
|-- modules
| |-- mod_access_compat 基于主机(名称或IP地址)的组授权
| |-- mod_actions 根据媒体类型或请求方法执行CGI脚本。
| |-- mod_alias 提供在文档树中映射主机文件系统的不同部分并进行URL重定向的功能
| |-- mod_allowmethods 轻松限制可以在服务器上使用的HTTP方法
| |-- mod_asis 发送包含其自己的HTTP标头的文件
| |-- mod_auth_basic 基本HTTP验证
| |-- mod_auth_digest 使用MD5摘要认证的用户认证
| |-- mod_auth_form 表格认证
| |-- mod_authn_anon 允许“匿名”用户访问经过身份验证的区域
| |-- mod_authn_core 核心认证
| |-- mod_authn_dbd 使用SQL数据库的用户身份验证
| |-- mod_authn_dbm 使用DBM文件的用户身份验证
| |-- mod_authn_file 使用文本文件的用户身份验证
| |-- mod_authn_socache 管理身份验证凭据的缓存以减轻后端的负担
| |-- mod_authnz_fcgi 允许FastCGI授权者应用程序处理Apache httpd身份验证和授权
| |-- mod_authnz_ldap 允许使用LDAP目录存储用于HTTP基本身份验证的数据库。
| |-- mod_authz_core 核心授权
| |-- mod_authz_dbd 组授权和使用SQL登录
| |-- mod_authz_dbm 使用DBM文件的组授权
| |-- mod_authz_groupfile 使用纯文本文件的组授权
......................具体可以参看http://httpd.apache.org/docs/2.4/mod/ 的模块说明以及开启相关模块的说明。
Listen[IP:]port
此指令可以出现多次,用于指定监听多个不同的套接字
Listen80
Listen172.16.100.7:8080
KeepAlive{On|Off}
KeepAliveTimeout 2 超时时间
MaxKeepAliveRequests 50 最大连接
多道处理模块
httpd -l 查看编译进内核的模块
想使用不同的机制,修改配置文件即可/usr/local/apache2/conf/extra/ httpd-mpm.conf文件
StartServers 8 #默认启动的工作进程数
MinSpareServers 5 #最少空闲进程数
MaxSpareServers 20 #最大空闲进程数
ServerLimit 256 #最大活动进程数
MaxClients 256 #最大并发连接数,最多允许发起的连接请求的个数
MaxRequestsPerChild 4000 #每个子进程在生命周期内最大允许服务的最多请求个数
StartServers 4 #启动的子进程的个数
MaxClients 300 #最大并发连接数,最多允许发起的连接请求的个数
MinSpareThreads 25 #最少空闲线程数
MaxSpareThreads 75 #最大空闲线程数
ThreadsPerChild 25 #每个子进程生成的线程数
MaxRequestsPerChild 0 #每个子进程在声明周期内最大允许服务的最多请求个数
LoadModulemodule_name /path/to/module
如果使用相对路径,则对于ServerRoot所定义的位置而言ServerRoot为apache的家目录
LoadMoudule php5_module /usr/lib64/httpd/modules/php.so
让服务重载配置文件方能生效
httpd -m 列出与加载到所有DSO模块与非DOS模块
取消 注释掉即可
DocumentRoot /path/to/somewhere
#Directory定义的是访问
Options 选项(下面的参数是Opeions的参数)
Indexes:缺少指定的默认页面时,允许将目录中的所有文件已列表形式返回给用户
FollowsymLinks:允许跟随符号链接所指向的原始文件
None:所有都不启用
All:所有的都启用
ExecCGI:允许使用mod_cgi模块执行CGI脚本
Includes:允许使用mod_include模块实现服务器端包含(SSI)
IncludesNOEXEC:允许包含但不允许执行脚本
MultiViews:允许使用mod_negotiation实现内容协商
SymLinksIfOwnerMatch:在链接文件属主属组与原始文件的属主属组相同时,允许跟随符号连接所指向的原始文件
AllowOverride
使用正则表达式
注意现在配置为apache2.4,和apache2.2或者之前版本不同
Options
Require all granted #允许所有
Require all denied #拒绝所有
Require env env-var [env-var] ... #允许,匹配环境变量中任意一个
Require method http-method [http-method] ... #允许,特定的HTTP方法
Require expr expression #允许,表达式为true
Require user userid [ userid ] ... #允许,特定用户
Require group group-name [group-name] ... #允许,特定用户组
Require valid-user # #允许,有效用户
Require ip 10 172.20 192.168.2 #允许 特定IP和网段
/var/log/http/
access.log:访问日志,其需要记录的内容需要自定义
error.log
访问日志:
CustomLog "/path/to/log_file" LogFormat
LogFormat定义日志格式
"%h %l %u %t \"%r\" %>s %b \"%{Referer}i\"\"%{User-Agent}i\""
%h:客户端地址
%l:远程的登录名,通常为-
%u:认证时的远程用户名,通常为-
%t:接收到的请求时的时间,为标准英文格式时间+时区
\" :转义,显示""
%r:请求报文的起始行
%>s:响应状态码,
%b:以字节响应报文的长度,不包含http报文
%{Header_Name}i:记录指定请求报文首部的内容(value)
%u:请求的URL
详情请参考:http://httpd.apache.org/docs/2.2/mod/mod_log_config.html#formats
错误日志:
ErrorLog
Alias /alias/ "/path/to/somewhere"
OptionsIndexes MultiViews
AllowOverride None
Require all granted
意味着访问http://Server_IP/alias时,其页面文件来自于/path/to/somewhere中
AddDefaultCharset
指定索引文件名为index.html
DirectoryIndex index.html
用于指定服务器的域名
ServerName www.baidu.com
# vim /usr/local/apache2/conf/httpd.conf
Options Indexes FollowSymLinks
AllowOverrideAll
Require allgranted
# vim /usr/local/apache2/htdocs/.htaccess
AuthName "50 docs" #提示信息
AuthType basic #加密方法
AuthUserFile /usr/local/apache2/htdocs/user #验证用户文件目录
require valid-user #允许user目录里全部用户访问
# htpasswd -c /usr/local/apache2/htdocs/user test
#使用htpasswd命令设置用户密码,-c为创建新文件,假如user文件存在 使用-m 参数 创建用户
# vim /usr/local/apache2/conf/httpd.conf
Include conf/extra/httpd-vhosts.conf #这个参数原来是有注释的,去掉注释
# vim/usr/local/apache2/conf/extra/httpd-vhosts.conf
ServerAdmin [email protected] #配置管理员邮箱
DocumentRoot"/usr/local/apache2/docs/YNET " #配置VHOST页面存放目录
ServerName www.ynet.com #配置合格域名
ErrorLog"logs/dummy-host.example.com-error_log" #配置错误日志
CustomLog"logs/dummy-host.example.com-access_log" common #定义访问日志
Options Indexes
AllowOverride None
Require all granted
# vim/usr/local/apache2/conf/extra/httpd-vhosts.conf
ServerAdmin [email protected] #配置管理员邮箱
DocumentRoot "/usr/local/apache2/docs/YNET " #配置VHOST页面存放目录
ErrorLog"logs/dummy-host.example.com-error_log" #配置错误日志
CustomLog"logs/dummy-host.example.com-access_log" common #定义访问日志
Options Indexes
AllowOverride None
Require all granted
# vim conf/httpd.conf #查看是否添加rewrite模块
LoadModule rewrite_module modules/mod_rewrite.so
# vim/usr/local/apache2/conf/extra/httpd-vhosts.conf
Options IndexesFollowSymLinks
AllowOverride All
Require all granted
配置跳转文件
# vim /usr/local/apache2/docs/YNET/.htaccess
RewriteEngine on
RewriteCond %{HTTP_HOST}www.ynet.com
#假如用户请求到这个主机上的www.ynet.com的vhost主机,就会跳转到www.baidu.com的域名
RewriteRule .* http://www.baidu.com
# vim /usr/local/apache2/conf/httpd.conf
Options IndexesFollowSymLinks
AllowOverride All
Require allgranted
配置跳转文件
# vim /usr/local/apache2/htdocs/.htaccess
RewriteEngine on
RewriteRule index.html index_test.html #假如url匹配到index.html文件就跳到到index_test.html这个文件
配置状态页面
# vim /usr/local/apache2/conf/httpd.conf
SetHandler server-status
Requireall 192.168.1.1
Requireall denid
# /usr/local/apache2/bin/apachectl graceful #平滑重启
在浏览器上访问http://192.168.1.1/server-status 主机IP+server-status这样的url
HTTP协议上的GZIP编码是一种用来改进WEB应用程序性能的技术。大流量的WEB站点常常使用GZIP压缩技术来让用户感受更快的速度。这一般是指WWW服务器中安装的一个功能,当有人来访问这个服务器中的网站时,服务器中的这个功能就将网页内容压缩后传输到来访的电脑浏览器中显示出来.一般对纯文本内容可压缩到原大小的40%.这样传输就快了,效果就是你点击网址后会很快的显示出来.当然这也会增加服务器的负载. 一般服务器中都安装有这个功能模块的。
减少文件大小有两个明显的好处,一是可以减少存储空间,二是通过网络传输文件时,可以减少传输的时间。gzip 是在 Linux 系统中经常使用的一个对文件进行压缩和解压缩的命令,既方便又好用。
GZip压缩的基本流程如下:
1. Web服务器接收到浏览器的HTTP请求后,检查浏览器是否支持HTTP压缩(Accept-Encoding 信息);
2. 如果浏览器支持HTTP压缩,Web服务器检查请求文件的后缀名;
3. 如果请求文件是HTML、CSS等静态文件,Web服务器到压缩缓冲目录中检查是否已经存在请求文件的最新压缩文件;
4. 如果请求文件的压缩文件不存在,Web服务器向浏览器返回未压缩的请求文件,并在压缩缓冲目录中存放请求文件的压缩文件;
5. 如果请求文件的最新压缩文件已经存在,则直接返回请求文件的压缩文件;
6. 如果请求文件是动态文件,Web服务器动态压缩内容并返回浏览器,压缩内容不存放到压缩缓存目录中。
网上许多开启GZIP的方法,但是研究了许多才成功了,在这里记录下面
编辑 http.conf 文件
去掉#LoadModule headers_module modules/mod_headers.so 前面的注释#
去掉#LoadModule deflate_module modules/mod_deflate.so 前面的注释#
去掉#LoadModule filter_module modules/mod_filter.so 前面的注释#
文件末尾加上
AddOutputFilterByType DEFLATE text/html text/plain text/xmltext/css text/javascript application/x-javascriptapplication/javascript application/json #对指定的内容进行压缩,压缩方式为默认的一个方法
详细配置:
DeflateCompressionLevel 6
SetOutputFilter DEFLATE
AddOutputFilterByType DEFLATE text/html text/plaintext/xml text/css text/javascript application/x-javascriptapplication/javascript application/json
SetEnvIfNoCase Request_URI .(?:gif|jpe?g|png)$ no-gzip dont-vary
#设置不对后缀gif,jpg,jpeg,png的图片文件进行压缩
SetEnvIfNoCase Request_URI .(?:exe|t?gz|zip|bz2|sit|rar)$ no-gzip dont-vary
#同上,就是设置不对exe,tgz,gz。。。的文件进行压缩
SetEnvIfNoCase Request_URI .(?:pdf|mov|avi|mp3|mp4|rm)$ no-gzip dont-vary
AddOutputFilterByType DEFLATE text/*
#设置对文件是文本的内容进行压缩,例如text/html text/css text/plain等
AddOutputFilterByType DEFLATE application/ms* application/vnd*application/postscript application/javascript application/x-javascript
#这段代码你只需要了解application/javascript application/x-javascript这段就可以了,这段的意思是对javascript文件进行压缩
AddOutputFilterByType DEFLATE application/x-httpd-phpapplication/x-httpd-fastphp
#这段是告诉apache对php类型的文件进行压缩
BrowserMatch ^Mozilla/4 gzip-only-text/html
# Netscape 4.x 有一些问题,所以只压缩文件类型是text/html的
BrowserMatch ^Mozilla/4.0[678] no-gzip
# Netscape 4.06-4.08 有更多的问题,所以不开启压缩
BrowserMatch \bMSIE !no-gzip !gzip-only-text/html
# IE浏览器会伪装成Netscape,但是事实上它没有问题
让浏览器缓存CSS、JS、图片、静态文件等是很重要的事情,这样可以减轻服务器的压力,省的浏览器经常要去服务端下载这些静态文件。下面看看配置方法吧。
1.开启apache扩展模块mod_expires.so,在apache的配置文件中加入下面一行代码。
LoadModule expires_module modules/mod_expires.so
2.配置缓存,在apache配置文件中加入下面一段代码
#打开缓存
ExpiresActive on
#css文件缓存7200000/3600/24=83天
ExpiresByType text/css A7200000
#js文件缓存7200000/3600/24=83天
ExpiresByType application/x-javascript A7200000
ByTypeapplication/javascript A7200000
#html文件缓存7200000/3600/24=83天
ExpiresByType text/html A7200000
#图片文件缓存7200000/3600/24=83天
ExpiresByType image/jpeg A7200000
ExpiresByType image/gif A7200000
ExpiresByType image/png A7200000
ExpiresByType image/x-icon A7200000
开启proxy需要的模块
# vim /usr/local/apache2/conf/httpd.conf
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_connect_modulemodules/mod_proxy_connect.so
LoadModule proxy_ftp_modulemodules/mod_proxy_ftp.so
LoadModule proxy_http_module modules/mod_proxy_http.so
查看是否开启
# /usr/local/apache2/bin/apachectl graceful
# /usr/local/apache2/bin/httpd -M | grep proxy
proxy_module(shared)
proxy_connect_module (shared)
proxy_ftp_module (shared)
proxy_http_module (shared)
正向代理配置
# vim /usr/local/apache2/conf/httpd.conf
ProxyRequests On
ProxyVia On
Require all granted
# /usr/local/apache2/bin/apachectl graceful
然后打开IE配置àInternet选项à
查看是否开启
# /usr/local/apache2/bin/apachectl graceful
# /usr/local/apache2/bin/httpd -M | grep proxy
proxy_module(shared)
proxy_connect_module (shared)
proxy_ftp_module (shared)
proxy_http_module (shared)
配置反向代理
# vim /usr/local/apache2/conf/httpd.conf
ProxyVia Off
ProxyRequests Off
ProxyPreserveHost Off
Require all granted
ProxyPass / https://www.google.com
ProxyPassReverse / https://www.google.com
Require all granted
# /usr/local/apache2/bin/apachectl graceful
关于如上apache指令的说明:
ProxyPreserveHost {On|Off}:如果启用此功能,代理会将用户请求报文中的Host:行发送给后端的服务器,而不再使用ProxyPass指定的服务器地址。如果想在反向代理中支持虚拟主机,则需要开启此项,否则就无需打开此功能。
ProxyVia {On|Off|Full|Block}:用于控制在http首部是否使用Via:,主要用于在多级代理中控制代理请求的流向。默认为Off,即不启用此功能;On表示每个请求和响应报文均添加Via:;Full表示每个Via:行都会添加当前apache服务器的版本号信息;Block表示每个代理请求报文中的Via:都会被移除。
ProxyRequests {On|Off}:是否开启apache正向代理的功能;启用此项时为了代理http协议必须启用mod_proxy_http模块。同时,如果为apache设置了ProxyPass,则必须将ProxyRequests设置为Off。
ProxyPass [path] !|url [key=value key=value ...]]:将后端服务器某URL与当前服务器的某虚拟路径关联起来作为提供服务的路径,path为当前服务器上的某虚拟路径,url为后端服务器上某URL路径。使用此指令时必须将ProxyRequests的值设置为Off。需要注意的是,如果path以“/”结尾,则对应的url也必须以“/”结尾,反之亦然。
另外,mod_proxy模块在httpd 2.1的版本之后支持与后端服务器的连接池功能,连接在按需创建在可以保存至连接池中以备进一步使用。连接池大小或其它设定可以通过在ProxyPass中使用key=value的方式定义。常用的key如下所示:
◇ min:连接池的最小容量,此值与实际连接个数无关,仅表示连接池最小要初始化的空间大小。
◇ max:连接池的最大容量,每个MPM都有自己独立的容量;都值与MPM本身有关,如Prefork的总是为1,而其它的则取决于ThreadsPerChild指令的值。
◇ loadfactor:用于负载均衡集群配置中,定义对应后端服务器的权重,取值范围为1-100。
◇ retry:当apache将请求发送至后端服务器得到错误响应时等待多长时间以后再重试。单位是秒钟。
负载均衡为:就是apache服务器后端有N个提供服务的服务器,假如连接数很多,apache服务器就会轮训(可以自己定义算法)的把请求分散到后端服务器去获取信息
查看是否开启
# /usr/local/apache2/bin/apachectl graceful
# /usr/local/apache2/bin/httpd -M | grep proxy
proxy_module(shared)
proxy_connect_module (shared)
proxy_ftp_module (shared)
proxy_http_module (shared)
配置负载均衡
# vim /usr/local/apache2/conf/httpd.conf
ProxyRequests Off
BalancerMember http://172.16.100.1:8080 loadfactor=10 route=TomcatA
BalancerMember http://172.16.100.2:8080 loadfactor=10 route=TomcatB
ServerAdmin [email protected]
ServerName www.tomcat.com
ProxyPass / balancer://lbcluster1/ stickysession=JSESSIONID
ProxyPassReverse / balancer://lbcluster1/
# /usr/local/apache2/bin/apachectl graceful
Proxy指定是以balancer://开头,即用于负载均衡集群时,其还可以接受一些特殊的参数,如下所示:
◇lbmethod:apache实现负载均衡的调度方法,默认是byrequests,即基于权重将统计请求个数进行调度,bytraffic则执行基于权重的流量计数调度,bybusyness通过考量每个后端服务器的当前负载进行调度。
◇ maxattempts:放弃请求之前实现故障转移的次数,默认为1,其最大值不应该大于总的节点数。
◇ nofailover:取值为On或Off,设置为On时表示后端服务器故障时,用户的session将损坏;因此,在后端服务器不支持session复制时可将其设置为On。
◇ stickysession:调度器的sticky session的名字,根据web程序语言的不同,其值为JSESSIONID或PHPSESSIONID。
安装服务命令:httpd –k uninstall
删除服务命令:sc delete Apache2.x (windows中)