如果有错误地方请大神指定谢谢看官了
目录
1. apache 编译安装...1
1.2 首先下载依赖包...1
1.2编译安装apache 2.4.1
1.3 apache目录介绍...2
2 配置文件解释...2
2.1 监听套接字...2
2.2 配置使用Keepalive.2
2.3 MPM配置连接数配置...3
2.4 模块的加载方式...4
2.5 配置站点根目录...4
2.6 页面访问属性...4
2.7 主机的访问控制...5
2.8 配置日志功能...5
2.10 路径别名...6
2.11 指定默认的字符集...7
2.12 定义默认主页面...7
2.13 域名配置...7
3 apache 配置用户认证...7
4 apache 配置虚拟主机...8
4.1配置给予域名的Vhost.8
4.2给予端口的VHOST.9
5.apache Rewrite重写配置...10
5.1域名跳转...10
5.2给予文件跳转...10
6.apache 状态页面配置...11
7.apache 压缩传输配置...12
8.apache 缓存配置...14
9.apache 代理配置...15
9.1 apache 正向代理...15
9.2 apache 反向代理...17
9.3 apache 负载均衡...19
# wget http://archive.apache.org/dist/apr/apr-1.4.5.tar.gz
# wget http://archive.apache.org/dist/apr/apr-util-1.3.12.tar.gz
# wget http://jaist.dl.sourceforge.net/project/pcre/pcre/8.10/pcre-8.10.zip
# cp -r apr-1.4.5 httpd-2.4.23/srclib/apr
# cp -r apr-util-1.3.12httpd-2.4.23/srclib/apr-util
# unzip pcre-8.10.zip
# cd pcre-8.10
# ./configure && make && makeinstall
# yum -y install gcc gcc-c++ openssl openssl-devel
# tar -zxf httpd-2.4.23.tar.gz
# cd httpd-2.4.23
# ./configure --prefix=/usr/local/apache2--with-mpm=worker --enable-cache --enable-disk-cache --enable-mem-cache--enable-file-cache --enable-nonportable-atomics --with-included-apr --enable-mods-shared=most --enable-so--enable-rewrite --enable-ssl
# make
# make install
# echo $? #可以判断编译的时候是否有错
# /usr/local/apache2/bin/apachectl start
# curl localhost #测试是否可以访问
/usr/local/apache2 #apache的家目录
/usr/local/apache2/bin #apache的命令目录
/usr/local/apache2/conf #apache的配置文件目录
/usr/local/apache2/logs #apache日志目录
/usr/local/apache2/modules #apache的模块目录
/usr/local/apache2/htdocs #apache 页面存放目录(可以自定义修改)
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
正向代理为:就是我本机是内网,但是可以通过一个apache的正向代理,去访问外网
首先开启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选项à
然后就可以访问外网了
反向代理为:就是我们本地访问不到谷歌网站,但是apache服务器可以访问到谷歌,用apache服务器反向代理谷歌,然后我们去访问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
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。
--来自HTTP/1.1RFC文档
-1xx:报告的 -接收到请求,继续进程.s
-2xx成功 -步骤成功接收,被理解,并被接受
-3xx重发 -为了完成请求,必须采取进一步措施.
-4xx客户端出错 -请求包括错的顺序或不能完成.
-5xx服务器出错 -服务器无法完成显然有效的请求.