博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Apache
阅读量:5274 次
发布时间:2019-06-14

本文共 28453 字,大约阅读时间需要 94 分钟。

 Apache简介

http://httpd.apache.org/docs/2.2 /中文文档 摘抄参考:http://www.cnblogs.com/ginvip/p/6400304.html Apache的特点功能强大,配置简单,速度快,应用广泛,性能稳定可靠,并可做代理服务器或负载均衡来使用。Apache应用场合使用Apache运行静态HTML网页,图片(处理静态小文件能力不及Nginx)使用Apache结合PHP引擎运行PHP,Perl等程序,LAMP被称之为经典组合使用Apache结合Tomcat/Resin运行JSP,JAVA等程序,成为中小企业的首选使用Apache作代理,负载均衡,rewrite规则过滤等等

 

Apache安装

# cat /etc/redhat-release CentOS release 6.7 (Final)# uname -r2.6.32-573.el6.x86_64#yum installzlib-devel -y #tar -xvf httpd-2.2.31.tar.gzcd httpd-2.2.31./configure --prefix=/usr/local/apache2.2.31 \--enable-deflate \--enable-expires \--enable-headers \--enable-module=most \--enable-so \--with-mpm=worker \--enable-module=rewrite #编译参数说明:--prefix=/usr/local/apache2.2.31 表示指定安装路径为:/application/apache2.2.31。如果不指定安装路径,则默认路径为:/usr/local/apache2--enable-deflate 提供对内容的压缩传输编码支持,一般html,js,css等内容的站点,使用此参数功能会大大提高传输速度,提升访问者访问体验。在生产环境中,这是apache调优的一个重要选项之一--enable-expires 激活允许通过配置文件控制http的“expires”和“cahe-control:”头内容,即对网站图片,JS,CSS等内容,提供在客户端浏览器缓存的设置。这是apache调优的一个重要选项之一--enable-headers 提供允许对HTTP请求头的控制--with-mpm=worker 选择apache mpm的模式为worker模式,因为worker模式原理是更多的使用线程处理请求,所以可以处理更多的并发请求,而系统资源的开销小于基于进程的mpm prefork。如果不指定此参数,默认的模式是prefork进程模式。这是apache调优的一个重要选项之一--enable-rewrite 提供基于URL规则的重写功能。即根据已知URL地址,转换其它想要的URL地址。如前文讲解的伪静态功能就是这个模块实现的。这是APACHE在生产环境中必用的一个重要功能。--enable-so 激活APACHE服务的DSO(全称dynamic shared object,动态共享对象)支持,即在以后可以以DSO的方式编译安装共享模块。这个模块本身不能以DSO方式编译。#make && make install#ln -s /usr/local/apache2.2.31/ /usr/local/apache#/usr/local/apache/bin/apachectl  start #lsof -i:80COMMAND   PID   USER   FD   TYPE DEVICE SIZE/OFF NODE NAMEhttpd   65082   root    4u  IPv6  57114      0t0  TCP *:http (LISTEN)httpd   65084 daemon    4u  IPv6  57114      0t0  TCP *:http (LISTEN)httpd   65085 daemon    4u  IPv6  57114      0t0  TCP *:http (LISTEN)httpd   65086 daemon    4u  IPv6  57114      0t0  TCP *:http (LISTEN)# ps -ef | grep httpdroot      65082      1  0 00:25 ?        00:00:00 /app/apache2.2.31/bin/httpd -k startdaemon    65083  65082  0 00:25 ?        00:00:00 /app/apache2.2.31/bin/httpd -k startdaemon    65084  65082  0 00:25 ?        00:00:00 /app/apache2.2.31/bin/httpd -k startdaemon    65085  65082  0 00:25 ?        00:00:00 /app/apache2.2.31/bin/httpd -k startdaemon    65086  65082  0 00:25 ?        00:00:00 /app/apache2.2.31/bin/httpd -k start# usr/local/apache/bin/apachectl   Usage: /app/apache2.2.31/bin/httpd [-D name] [-d directory] [-f file]  [-C "directive"] [-c "directive"][-k start|restart|graceful(平滑加载)|graceful-stop|stop]  [-v] [-V] [-h] [-l] [-L] [-t] [-T] [-S]Options:  -D name            : define a name for use in 
directives -d directory : specify an alternate initial ServerRoot -f file : specify an alternate ServerConfigFile -C "directive" : process directive before reading config files -c "directive" : process directive after reading config files -e level : show startup errors of level (see LogLevel) -E file : log startup errors to file -v : show version number -V : show compile settings -h : list available command line options (this page) -l : list compiled in modules #查看编译的模块 -L : list available configuration directives -t -D DUMP_VHOSTS : show parsed settings (currently only vhost settings) -S : a synonym for -t -D DUMP_VHOSTS -t -D DUMP_MODULES : show all loaded modules -M : a synonym for -t -D DUMP_MODULES -t : run syntax check for config files -T : start without DocumentRoot(s) check# /usr/local/apache/bin/apachectl -lCompiled in modules: core.c mod_authn_file.c mod_authn_default.c mod_authz_host.c mod_authz_groupfile.c mod_authz_user.c mod_authz_default.c mod_auth_basic.c mod_include.c mod_filter.c mod_deflate.c mod_log_config.c mod_env.c mod_expires.c mod_headers.c mod_setenvif.c mod_version.c worker.c http_core.c mod_mime.c mod_status.c mod_autoindex.c mod_asis.c mod_cgid.c mod_negotiation.c mod_dir.c mod_actions.c mod_userdir.c mod_alias.c mod_so.cAPACHE相关目录介绍[root@lamp apache]# lsbin cgi-bin error icons index.html lib man modules(编译的模块目录)build conf htdocs include index.html.1 logs manualbin目录# tree|-- ab 性能压力测试工具|-- apachectl 启动命令,是一个脚本|-- apr-1-config|-- apu-1-config|-- apxs 为Apache HTTP服务器编译和安装扩展模块的工具,用于编译一个或多个源程序或目标代码文件为动态共享对象, 使之可以用由mod_so提供的LoadModule指令在运行时加载到Apache服务器中。因此,要使用这个扩展机制,你的平台必须支持DSO特性,而且Apache httpd必须内建了mod_so模块。 |-- checkgid|-- dbmmanage|-- envvars|-- envvars-std|-- htcacheclean     清理磁盘缓冲区的命令|-- htdbm|-- htdigest|-- htpasswd    建立和更新基本认证文件。如nagios等监控服务时会用到|-- httpd     httpd为apache的控制命令程序,apachectl执行时会调用httpd|-- httxt2dbm|-- logresolve`-- rotatelogs       apache自带的日志轮询工具命令,也还可以用。建议cronolog替代之conf目录# tree conf/|-- extra         #额外的apache配置文件目录,运维会经常修改访问,vhost默认目录| |-- httpd-autoindex.conf| |-- httpd-dav.conf| |-- httpd-default.conf #这个文件里配置的是apache的相关服务参数,如:keepalived,timeout等,隐藏版本号等| |-- httpd-info.conf| |-- httpd-languages.conf #语言支持配置| |-- httpd-manual.conf| |-- httpd-mpm.conf      #(prefork,worker)设置,#服务器池管理,也就是优化apache的一个配置文件,如:选择apache的模式连接数等| |-- httpd-multilang-errordoc.conf| |-- httpd-ssl.conf     #提供apache SSL支持配置文件| |-- httpd-userdir.conf| `-- httpd-vhosts.conf     #配置虚拟主机|-- httpd.conf         #apache的主配置文件|-- magic|-- mime.types`-- original |-- extra | |-- 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.confLOG目录# tree log|-- access_log 默认访问日志文件|-- cgisock.65082|-- error_log 错误日志文件,启动故障等问题`-- httpd.pid pid文件,http进程启动后,会把所有的进程ID号写到此文件httpd.conf配置文件# grep -Ev "#|^$" httpd.conf ServerRoot "/usr/local/apache2.2.31"    #安装目录Listen 80        #监听端口(本机任何ip)
User daemonGroup daemon                 #(安全优化改成其他用户)
ServerAdmin you@example.com 管理员邮箱DocumentRoot "/usr/local/apache2.2.31/htdocs" #网站目录
=============================权限控制 Options FollowSymLinks AllowOverride None Order deny,allow Deny from all ===========================权限控制
   #(新增加站点目录需要在本配置末尾配置此块,不然403错误) Options Indexes FollowSymLinks     #Indexes前面加-或者删除,防止展示目录结构(没index.html时) AllowOverride None Order allow,deny Allow from all
===========================权限控制
DirectoryIndex index.html        #指定首页,可以多个,防止目录展示
Order allow,deny Deny from all Satisfy All
ErrorLog "logs/error_log"LogLevel warn
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined LogFormat "%h %l %u %t \"%r\" %>s %b" common
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %I %O" combinedio
CustomLog "logs/access_log" common
#CGI配置这语言基本淘汰 ScriptAlias /cgi-bin/ "/app/apache2.2.31/cgi-bin/"
AllowOverride None Options None Order allow,deny Allow from all
DefaultType text/plain
TypesConfig conf/mime.types AddType application/x-compress .Z AddType application/x-gzip .gz .tgz
SSLRandomSeed startup builtinSSLRandomSeed connect builtin
extra下的配置文件===httpd-default.conf# grep -Ev "#|^$" httpd-default.confTimeout 300KeepAlive OnMaxKeepAliveRequests 100KeepAliveTimeout 5UseCanonicalName OffAccessFileName .htaccessServerTokens FullServerSignature OnHostnameLookups Offextra下的配置文件httpd-vhosts.conf #虚拟站点设置配置文件# grep -Ev "^#|^$" /usr/local/apache/conf/extra/httpd-vhosts.confNameVirtualHost *:80 #这里表示使用基于名称的虚拟主机配置,这是生产环境下最常用的配置。*:80中的*表示监听本机所有IP地址,80表示在80端口上提供http服务。 如果*改为具体IP,就表示监听本机指定IP地址的服务请求
#定义一个虚拟主机,监听本机所有IP地址80端口上提供的http服务请求 ServerAdmin webmaster@dummy-host.example.com DocumentRoot "/usr/local/apache2.2.31/docs/dummy-host.example.com" ServerName dummy-host.example.com ServerAlias www.dummy-host.example.com #这是配置虚拟机的别名,也就是可以配置多个域名访问同一个站点 ErrorLog "logs/dummy-host.example.com-error_log" CustomLog "logs/dummy-host.example.com-access_log" common
ServerAdmin webmaster@dummy-host2.example.com DocumentRoot "/usr/local/apache2.2.31/docs/dummy-host2.example.com" ServerName dummy-host2.example.com ErrorLog "logs/dummy-host2.example.com-error_log" CustomLog "logs/dummy-host2.example.com-access_log" common

配置一个基于域名配置站点

1、创建站点目录及文件#mkdir -p /var/html/www#echo "gtms,this is apache www" >>/var/html/www/index.html 2、创建站点目录配置#vi /usr/local/apache/conf/extra/httpd-vhosts.conf  
ServerAdmin 87014247@qq.com DocumentRoot "/var/html/www" ServerName www.gtms.com ServerAlias gtms.com ErrorLog "logs/www-error_log" CustomLog "logs/www-access_log" common
3、修改主配置文件 #vi /usr/local/apache/conf/httpd.conf #Include conf/extra/httpd-vhosts.conf    #取消注释 文件末尾加如下配置,否则403
    Options -FollowSymLinks     AllowOverride None     Order allow,deny     Allow from all
#apache服务Forbidden403问题通常情况下(但不限于此)的原因有:1)apache配置文件中没有对站点目录的权限许可配置,这通常是在初始安装apache后,更改了默认的apache站点目录所致! 如编译安装apache(假定安装目录为/usr/local/apache2.2.32)后,将站点目录更改为其他路径:/var/html,则在apache配置文件中的配置也要相应的改变此目录路径2)站点目录下无首页(index)文件,而apache的配置又禁止了目录浏览器,就会提示403错误3)Directory权限问题4)站点目录原因,站点目录需要apache的用户访问权限4、检查语法,平滑加载# /usr/local/apache/bin/apachectl -t# /usr/lcoal/apache/bin/apachectl graceful#解决每次加载apache时FQDN报错,主配置文件中,取消注释,改成ip,如下ServerName 192.168.0.86:80基于域名端口混合1、在主配置文件增加Listen端口2、在vhost配置文件增加Listen端口(NameVirtualHost *:8000),在单独的vhost上增加上端口基于IPvi vhost 将servername 改成ip
增加基于IP的虚拟机主机实战配置 1:增加IP 如果要配置基于IP的虚拟主机,就需要每个虚拟主机有不同的IP # ifconfig eth0 | awk -F "[ :]+" 'NR==2{print $4}' 192.168.0.86 # ifconfig eth1 | awk -F "[ :]+" 'NR==2{print $4}' 192.168.0.186
2、创建站点目录及文件#mkdir -p /var/html/blog#echo "gtms,this is apache blog" >>/var/html/blog/index.html 2、创建站点目录配置(增加)#vi /usr/local/apache/conf/extra/httpd-vhosts.conf  
ServerAdmin 87014247@qq.com DocumentRoot "/var/html/blog" ServerName blog.gtms.org ServerAlias blog.org ErrorLog "logs/www-error_log" CustomLog "logs/blog-access_log" common
配置好hosts文件 [root@node87 ~]# curl blog.gtms.org gtms,this is apache blog [root@node87 ~]# curl www.gtms.com gtms,this is apache www
基于端口的虚拟主机实战配置 基于端口的虚拟主机在生产环境中的应用也不多见,仅偶尔会用到,一般是为公司内部人员提供访问的,如页面的后台,CMS发布,PHPMYADMIN等。下面我们来讲其相关配置部署。 1:增加监听的端口 [root@Web-Lamp conf]# vim httpd.conf [root@Web-Lamp conf]# grep "Listen" httpd.conf Listen 80 Listen 8091 Listen 8092 提示:保留80端口,新增加8091与8092两个端口 2:配置httpd-vhosts.conf [root@Web-Lamp conf]# grep -Ev "#" extra/httpd-vhosts.conf 
    ServerAdmin 33794712@qq.com     DocumentRoot "/var/html/blog"     ServerName 192.168.17.12     ServerAlias adminba.com     ErrorLog "logs/blog-error_log"     CustomLog "|/usr/local/sbin/cronolog /app/logs/access_www_%Y%m%d.log" combined

 

 Apache日志  CustomLog "logs/bbs-access_log" common或Combined(具体格式定义在主配置文件)

日志格式 通用日志格式  CommonLog Fomat组合日志格式  CombinedLog Format 日志轮询方案 1、Apache日志轮询工具自带 rotatelog2、另外的工具选择cronolog(工作中推荐)3、通过crontab  mv改名日志 然后graceful 日志轮询工具cronolog安装tar -zxvf cronolog-1.6.2.tar.gz cd cronolog-1.6.2./configure makemake install
CustomLog "|/usr/local/sbin/cronolog  /usr/local/apache/logs/access_www_%Y%m%d.log" combined  #按天轮询 CustomLog "|/usr/local/sbin/cronolog  /usr/local/apache/logs/access_www_%Y%m%d%H.log" combined  #按小时轮询 CustomLog "|/usr/local/sbin/cronolog  /usr/local/apache/logs/access_www_%w.log" combined      #按周轮询 注意:日志路径不能使用相对路径,一定要使用绝对路径 #vi /usr/local/apache/conf/extra/httpd-vhosts.conf 
ServerAdmin 87014247@qq.com DocumentRoot "/var/html/www" ServerName www.gtms.com ServerAlias gtms.com ErrorLog "logs/www-error_log" #CustomLog "logs/www-access_log" common CustomLog "|/usr/local/sbin/cronolog /usr/local/apache/logs/access_www_%Y%m%d.log" combined
apache自带日志轮询工具rotatelogs(不推荐使用rotatelogs进行日志轮询)rotatelogs 日志轮询ErrorLog "|/application/apache/bin/rotatelogs /logs/%Y%m%d.error.log 604800"CustomLog "|/application/apache/bin/rotatelogs /logs/access_www_%Y%m%d.log 86400 480" combinedCustomLog "|/application/apache/bin/rotatelogs /logs/access_www_%Y%m%d.log 86400" combined提示:也可以按照达到多大文件而轮询日志,此处就不提了。rotatelogs 日志轮询说明语法rotatelogs [ -l ] logfile [ rotationtime [ offset ]] | [ filesizeM ]选项-l 使用本地时间代替GMT时间作为时间基准。注意:在一个改变GMT偏移量(比如夏令时)的环境中,使用-l会导致不可预料的结果。 logfile 它加上基准名就是日志文件名。如果logfile中包含"%",则它会被视为用于strftime()的格式字符串;否则它会被自动加上以秒为单位的".nnnnnnnnnn"后缀。这两种格式都表示新的日志开始使用的时间。 rotationtime 日志文件滚动的以秒为单位的间隔时间。 offset 相对于UTC的时差的分钟数。如果省略,则假定为"0"并使用UTC时间。比如,要指定UTC时差为"-5小时"的地区的当地时间,则此参数应为"-300"。 filesizeM 指定以filesizeM文件大小滚动,而不是按照时间或时差滚动。 按天轮询的常见生产环境实际配置:
ServerAdmin 31333741@qq.com ServerName blog.etiantian.org DocumentRoot "/var/blog" ServerAlias etiantian.org ErrorLog "logs/www.etiantian.org-error_log" #CustomLog "logs/www.etiantian.org-access_www_log" common CustomLog "|/usr/local/sbin/cronolog /logs/access_www_%Y%m%d.log" combined
提示:/logs/access_www_%Y%m%d.log 这里要写绝对路径,不能是logs/access_www_%Y%m%d.log不同轮询命令同时记录三份日志,并做多种轮询的写法,这个配置生产环境,并不常用, 这里写出来是告诉大家语法功能上可以这样进行配置。
ServerAdmin 87014247@qq.com ServerName blog.etiantian.org DocumentRoot "/var/blog" ServerAlias etiantian.org ErrorLog "logs/www.etiantian.org-error_log" #CustomLog "logs/www.etiantian.org-access_www_log" common CustomLog "|/usr/local/sbin/cronolog /logs/access_www_%Y%m%d.log" combined CustomLog "|/usr/local/sbin/cronolog /logs/access_www_%Y%m%d%H.log" combined CustomLog "|/application/apache/bin/rotatelogs /logs/access_www_%Y%m%d%H%M.log 86400" combined
Apache日志不记录指定格式元素日志当计算日志PV时一般不希望统计图片元素的日志,因为,打开一个页面才是一个PV,而RS服务器也不希望记录来自前端负载均衡健康检查的无用日志。 整个配置需要mod_setenvif模块的支持!看下面的案例: 案例1:Apache不记录图片的日志统计日志PV时一个页面才算一个PV,而图片,JS,CSS等只是图片的元素,如果记录在日志里,然后按日志行计算PV就不准确了,所以可考虑不记录图片等的日志编辑httpd.conf文件,在文件中加入以下几行:
SetEnv IMAG 1
编辑httpd-vhosts.conf文件,修改cronolog日志一行为:CustomLog “|/usr/local/sbin/cronolog /app/logs/%Y/%m/%m/access_%Y%m%d.log” combined env=!IMAG案例2:RS服务器不记录负载均衡健康检查日志虚拟主机不记录负载均衡向下健康检查文件的日志(check.txt): SetEnvIf Request_URI “^/check\.txt$” dontlogCustomLog /var/log/httpd/vhost_access.log combined env=!dontlog案例3:日志IP统计 #法一:[root@apache apache]# awk '{++S[$1]} END {for (key in S) print S[key],key}' logs/access_madsale_20170215.log |sort -rn -k120 192.168.17.11 192.168.17.16#法二:[root@apache apache]# awk '{print $1}' logs/access_madsale_20170215.log|sort|uniq -c 20 192.168.17.1 1 192.168.17.16

 

worker/prefork模式说明及优化配置

查看已安装的是worker还是prefork模式:# /usr/local/apache/bin/apachectl -l|grep -E "worker|prefork"   worker.c prefork模式:prefork使用的是多个子进程,而每个子进程只有一个线程,每个进程在某个确定的时间只能维持一个连接工作原理:控制进程最初建立若干个子进程,为了不在请求到来时再生成子进程,所以要根据需求不断的创建新的子进程,最大可以达到每秒32个直到满足需求为止。安装方法:在编译的过程中,加入--with-mpm=prefork,如果不加也可以,因为默认就是采用prefork模式优点:效率高,稳定,安全。对于线程调试困难的平台来说,调试更加容易些缺点:和worker模式比消耗资源多配置参数说明:    
StartServers 5 #-->最初建立的子进程MinStartServers 5 #-->最小空闲进程数,如果空闲的进程小于设定值,APACHE会自动建立进程,如果服务器并发及负载大的话,可以考虑加大MaxSpareServer 10 #-->最大空闲进程数,如果空闲的进程大于设定值,APACHE会自动kill掉多余的进程,如果服务器负载大的话,可以考虑加大MaxClients 150 #-->设定的是APACHE可以同时处理的请求,是对APACHE性能影响最大的参数,就是APACHE可以同时处理的请求数,就是说,如果有150个用户在访问,那第第151个用户就要等之前的访问结束后才能访问MaxRequestPerChild 0 #-->每个子进程可处理的请求数。每个子进程在处理了“maxrequestsperchild”个请求后将自动销毁。0意味着无限,即子进程永不销毁。虽然缺省设为0可以使每个子进程处理更多的请求。但如果设成非0值也有两点重要的好处:(1)可防止意外的内存泄漏 (2)在服务器负载下降的时候会自动减少子进程数。
常用配置参考:
StartServer 10MinSpareServers 10MaxSpareServers 15ServerLimit 2000MaxClients 1000MaxRequestPerChild 5000
worker模式worker模式是Apache2.x新引进的模式,是线程与进程的结合,在workder模式下会有多个子进程,每个子进程又会有多个线程。每个线程在某相确定的时间只能维持一个连接工作原理:由主控制进程生成若干个子进程,而每个子进程中又包含固定的线程数,各个线程独立处理请求,同样为了不在请求到来时再生成线程, 在配置文件中设置了最小和最大的空闲线程数及所有子进程中的线程总数,如果现有子进程中的线程总数不能满足并发及负载,控制进程将派生新的子进程。安装方法:在配置编译的过程中,加入参数--with-mpm=worker,如果不加的话系统会采用默认的worker模式优点:内存占用比prefork模式低,适合高并发流量HTTP服务缺点:假如一个线程崩溃,整个进程就会连同其任何线程一起“死掉”,由于线程共享内存空间,所以一个程式在运行时必须被系统识别为“每个线程都是安全的”。 服务稳定性不如prefork模式配置说明:
StartServers 2 #服务器启动时建立的子进程数,默认值是"3"。MaxClients 150 #允许同时伺服的最大接入请求数量(最大线程数量)。任何超过MaxClients限制的请求都将进入等候队列。默认值是"400",16(ServerLimit)乘以25(ThreadsPerChild)的结果。因此要增加MaxClients的时候,你必须同时增加ServerLimit的值。MinSpareThreads 25 #最小空闲线程数,默认值是"75"。这个MPM将基于整个服务器监视空闲线程数。如果服务器中总的空闲线程数太少,子进程将产生新的空闲线程。MaxSpareThreads 75 #设置最大空闲线程数。默认值是"250"。这个MPM将基于整个服务器监视空闲线程数。如果服务器中总的空闲线程数太多,子进程将杀死多余的空闲线程。MaxSpareThreads的取值范围是有限制的。Apache将按照如下限制自动修正你设置的值:worker要求其大于等于MinSpareThreads加上ThreadsPerChild的和。ThreadsPerChild 25 #每个子进程建立的常驻的执行线程数。默认值是25。子进程在启动时建立这些线程后就不再建立新的线程了。MaxRequestsPerChild 0 #设置每个子进程在其生存期内允许伺服的最大请求数量。到达MaxRequestsPerChild的限制后,子进程将会结束。如果MaxRequestsPerChild为"0",子进程将永远不会结束。将MaxRequestsPerChild设置成非零值有两个好处:1.可以防止(偶然的)内存泄漏无限进行,从而耗尽内存。2.给进程一个有限寿命,从而有助于当服务器负载减轻的时候减少活动进程的数量。注意对于KeepAlive链接,只有第一个请求会被计数。事实上,它改变了每个子进程限制最大链接数量的行为。
常用配置参考:生产场景配置1:
StartServers 3MaxClients 2000ServerLimit 25MinSpareThreads 50MaxSpareThreads 200ThreadLimit 200ThreadsPerChild 100MaxRequestsPerChild 0
生产场景配置2:
StartServers 5MaxClients 9600ServerLimit 64MinSpareThreads 25MaxSpareThreads 500ThreadLimit 200ThreadsPerChild 150MaxRequestsPerChild 0
生产场景配置3:
StartServers 2MaxClients 500ServerLimit 25MinSpareThreads 25MaxSpareThreads 75ThreadsPerChild 25MaxRequestsPerChild 0
生产场景配置4:
StartServers 3MaxClients 1600ServerLimit 25MinSpareThreads 50MaxSpareThreads 200ThreadLimit 200ThreadsPerChild 64
worker模式下所能同时处理的请求总数是由子进程总数乘以Threadsperchild值决定的,应该大于等于maxclients。如果负载很大,现有的子进程数不能满足时,控制进程会派生新的子进程。默认最大的子进程总数是16,如需加大时也需要显式声明serverlimit的值(最大值是20000)特别说明:如果显式声明了serverlimit,那么乘以ThreadsPerChild的值必须大于等于MaxClients,而且MaxClients必须是threadperchild的整数倍,否则APACHE将会自动调节到一个相应值(可能是个非期望值)数学表达:MaxClient <= 总的进程数(ServerLimit)*线程数(ThreadsPerChild)MaxClient%ThreadsPerChild=0注意:worker MPM也有不完善的地方,如果一个线程崩溃,整个进程就会连同其所有线程一起“死掉”配置方法:#vim /application/apache/conf/httpd.confInclude conf/extra/httpd-mpm.conf #取消注释 #vim conf/extra/httpd-mpm.conf #在下面调整参数 51
52 StartServers 2 53 MaxClients 150 54 MinSpareThreads 25 55 MaxSpareThreads 75 56 ThreadsPerChild 25 57 MaxRequestsPerChild 0 58

 

mod_deflate压缩模块应用指南

模块提供了DEFLATE 输出过滤器,允许服务器在将输出内容发送到客户端以前进行压缩,以节约带宽,同时提升用户体验。A:编译安装httpd情况时是否已安装mod_flate# /usr/local/apache/bin/apachectl -l|grep mod_deflate  mod_deflate.c B:如果是以DSO方式编译,则查看方法为: # ls /usr/local/apache/modules/ | grep mod_deflate # grep mod_deflate.so /usr/local/apache/conf/httpd.conf特别说明:以上两种情况下不能同时存在,否则可能会冲突!如果已经编译安装完了,就不需要再用DSO的方法编译安装了! C:mod_deflate DSO安装方法# ls  /home/tools/httpd-2.2.31/modules/filters | grep mod_deflate.c mod_deflate.c# /usr/local/apache/bin/apxs -c -i -a mod_deflate.c# grep defla /usr/local/apache/conf/httpd.confLoadModule deflate_module     modules/mod_deflate.so apxs参数说明:-c 此选项表示需要执行编译操作。它首先会编译C源程序(.c)files为对应的目标代码文件(.o),然后连接这些目标代码和files中其余的目标代码文件(.o and .a),以生成动态共享对象dsofile。如果没有指定-o选项,则此输出文件名由files中的第一个文件名推测得到,也就是默认为mod_name.so-i 此选项表示需要执行安装操作,以安装一个或多个动态共享对象到服务器的modules目录中-a 此选项自动增加一个LoadModuls行到httpd.conf文件中,以激活此模块,或者,如果此行已经存在,则启用之DSO安装完后,检查语法,重启APACHE即可! deflate在httpd.conf中应用:只需要把下面内容完整的复制到httpd.conf结尾保存即可使所有的虚拟主机生效。环境1:可以在主配置中配置,也可以在虚拟主机中配置
DeflateCompressionLevel 9 #压缩等级,越大效率越高,耗C也高SetOutPutFilter DEFLATE #启用压缩AddOutPutFilterEvType DEFLATE test/html text/plain text/xml #以下3行设置压缩的类型AddOutPutFilterEvType DEFLATE application/javascriptAddOutPutFilterEvType DEFLATE test/css#DeflateFilterNote ratio #在日志中放置压缩率标记,下面是记录日志的,这个功能一般不用。#LogFormat#CustomLog logs/deflate_log.log deflate
环境2:
DeflateCompressionLevel 9 SetOutPutFilter DEFLATEDeflateFilterNote Input instreamDeflateFilterNote Output outstreamDeflateFilterNote Ratio ratioAddOutputFilterByType DEFLATE text/html text/plain text/xml text/css application/javascript
环境3:某公司曾经的生产配置
DeflateCompressionLevel 9 SetOutPutFilter DEFLATEDeflateFilterNote Input instreamDeflateFilterNote Ouput outstreamDeflateFilterNote Ration ration

 

apache优化实战错误页面优雅显示

可以将404等的错误信息页面重定向到网站首页或其它页面,提升用户体验 [root@Web-Lamp apache]# vim /usr/local/apache/conf/httpd.conf347 # Some examples:348 #ErrorDocument 500 "The server made a boo boo."349 #ErrorDocument 404 /missing.html350 #ErrorDocument 404 "/cgi-bin/missing_handler.pl"351 #ErrorDocument 402 http://www.example.com/subscription_info.html352 #353 ErrorDocument 404 http://www.baidu.com          #增加404页面 mod_deflate文件压缩功能Gzip的思想就是把文件先在服务器端进行压缩,然后再传输,这样可以显著减少文件传输的大小。 传输完毕后浏览器会重新对压缩过的内容进行解压缩,没特殊情况,所有的文本内容都应该被gzip压缩:html(php),js,css,xml,txt..., 因为首页上还有很多广告代码投放的JS,这些广告代码拥有都的网站的JS没有经过gzip压缩,是由于需要每次加载进而统计来访信息。添加以下内容到指定的虚拟主机中(也可加入到主配置文件中,这样就对全局生效):
DeflateCompressionLevel 9 SetOutputFilter DEFLATE DeflateFilterNote Input instream DeflateFilterNote Output outstream DeflateFilterNote Ratio ratio #LogFormat ‘”%r” %{outstream}n/%{instream}n (%{ratio}n%%)’ deflate #CunstomLog logs/deflate_log.log deflate
如36
37 ServerAdmin 33794712@qq.com 38 DocumentRoot "/var/html/bbs" 39 ServerName 192.168.17.181 40 ServerAlias adminba.com 41 ErrorLog "logs/bbs-error_log" 42 CustomLog "|/usr/local/sbin/cronolog /app/logs/access_bbs_%Y%m%d.log" combined 43
44 DeflateCompressionLevel 9 45 SetOutputFilter DEFLATE 46 DeflateFilterNote Input instream 47 DeflateFilterNote Output outstream 48 DeflateFilterNote Ratio ratio 49 #LogFormat ‘”%r” %{outstream}n/%{instream}n (%{ratio}n%%)’ deflate 50 #CunstomLog logs/deflate_log.log deflate 51
52
仅压缩限制特定的MIME类型文件: AddOutputFilterByType DEFLATE text/html text/plain text/xml或AddOutputFilterByType DEFLATE text/html text/plain text/xml test/css application/javascript压缩测试工具:火狐浏览器插件 --> Yslow

 

mod_expires缓存功能

添加Expire/Cache-Control 头:Add Expires Header现在越来越多的图片,脚本,CSS,FLASH被嵌入到页面中,当我们访问他们的时候势必会做许多次的http请求,其实我们可以通过设置expires header来缓存这些文件。Expires其实就是通过header报文来指定特定类型的文件在浏览器中缓存时间。大多数的图片,flash在发布后都是不需要经常修改的,做了缓存以后这样浏览器以后就不需要再从服务器下载这些文件而是直接从缓存中读取,这样再次访问页面的速度会大大加快。一个典型的HTTP1.1协议返回的头信息:    [root@Web-Lamp blog]# curl -I http://192.168.17.12:8091/HTTP/1.1 200 OKDate: Sun, 04 Dec 2016 12:25:15 GMTServer: Apache/2.2.31 (Unix) DAV/2Last-Modified: Sun, 04 Dec 2016 12:12:57 GMTETag: "424ee-e2-542d4176e35e6"Accept-Ranges: bytesContent-Length: 226Vary: Accept-EncodingContent-Type: text/html配置方法1)针对虚拟主机或者主配置文件ExpiresActive onExpiresDefault "access plus 12 month"ExpiresByType text/html "access plus 12 months"ExpiresByType text/css "access plus 12 months"ExpiresByType image/gif "access plus 12 months"ExpiresByType image/jpeg "access plus 12 months"ExpiresByType image/jpg "access plus 12 months"ExpiresByType image/png "access plus 12 months"EXpiresByType application/x-shockwave-flash "access plus 12 months"EXpiresByType application/x-javascript "access plus 12 months"ExpiresByType video/x-flv "access plus 12 months"将上面的代码加入到httpd-vhosts.conf配置文件中,如下:
ServerAdmin 33794712@qq.com DocumentRoot "/var/html/blog" ServerName 192.168.17.12 ServerAlias adminba.com ErrorLog "logs/blog-error_log" #CustomLog "logs/blog-access_log" common CustomLog "|/usr/local/sbin/cronolog /app/logs/access_www_%Y%m%d.log" combined
DeflateCompressionLevel 9 SetOutputFilter DEFLATE DeflateFilterNote Input instream DeflateFilterNote Output outstream DeflateFilterNote Ratio ratio #LogFormat ‘”%r” %{outstream}n/%{instream}n (%{ratio}n%%)’ deflate #CunstomLog logs/deflate_log.log deflate
ExpiresActive on ExpiresDefault "access plus 12 month" ExpiresByType text/html "access plus 12 months" ExpiresByType text/css "access plus 12 months" ExpiresByType image/gif "access plus 12 months" ExpiresByType image/jpeg "access plus 12 months" ExpiresByType image/jpg "access plus 12 months" ExpiresByType image/png "access plus 12 months" EXpiresByType application/x-shockwave-flash "access plus 12 months" EXpiresByType application/x-javascript "access plus 12 months" ExpiresByType video/x-flv "access plus 12 months"
测试:[root@Web-Lamp blog]# /application/apache/bin/apachectl -tSyntax OK[root@Web-Lamp blog]# /application/apache/bin/apachectl graceful[root@Web-Lamp blog]# netstat -lnt|grep 80[root@Web-Lamp blog]# curl -I http://192.168.17.12:8091/images/09.jpgHTTP/1.1 200 OKDate: Sun, 04 Dec 2016 13:03:46 GMTServer: Apache/2.2.31 (Unix) DAV/2Last-Modified: Mon, 06 Jun 2016 03:44:43 GMTETag: "424e8-1d238-53493e48f80c0"Accept-Ranges: bytesContent-Length: 119352Cache-Control: max-age=31104000Expires: Wed, 29 Nov 2017 13:03:46 GMT #如果配置无误,此行就是缓存时间,Vary: Accept-EncodingContent-Type: image/jpeg2)针对目录的特殊用法
ExpiresActive on ExpiresDefault "access plus 5 minutes" ExpiresByType text/html "access plus 1 day"ExpiresByType text/css "access plus 1 day"ExpiresByType image/gif "access plus 1 day"ExpiresByType image/jpeg "access plus 1 day"ExpiresByType image/png "access plus 1 day"ExpiresByType audio/mpeg "access plus 1 day"ExpiresByType audio/x-ms-wma "access plus 1 year"ExpiresByType video/mpeg "access plus 1 year"ExpiresByType video/x-msvideo "access plus 1 month"EXpiresByType application/x-shockwave-flash "access plus 12 months"EXpiresByType application/x-javascript "access plus 1 day"ExpiresByType application/javascript "access plus 1 day"
提示:本节仅仅是演示,因此后面的过期按1天读者可以根据需求自己修改。生产环境mod_expires优点:1)提升用户体验2)节约网站带宽成本3)节约网站服务器及维护成本控制expires方法:如果网站更新功能或更新文件后,用户再访问时的内容还是旧的,怎么解决这个问题?解答:1)首先,对于大多公司业务来说,图片等资源一般很少会去修改。因此taobao,京东等公司可以肆无忌惮的把expires设置为10年,一年节省费用可达上亿人民币2)对于js , css偶尔会变化的资源,一般expires设置时间会比较短,如1-30天3)在更新文件上采取策略,如:更新后以新的文件名发布,这样对于用户又是新的资源

apache防盗链功能

RewriteEngince OnRewriteCond % {HTTP_REFERER} !^http://adminba.com/.*$ [NC]RewriteCond % {HTTP_REFERER} !^http://adminba.com$ [NC]RewriteCond % {HTTP_REFERER} !^http://www.adminba.com/.*$ [NC]RewriteCond % {HTTP_REFERER} !^http://www.adminba.com$ [NC]RewriteRule .*\.(gif|jpg|swf)$ http://www.51cto.com [R,NC]#RewriteRule .*\.(gif|jpg|swf)$ http://www.adminba.com/about/nolink.png [R,NC]
关闭CGIScriptAlias /cgi-bin/ “/application/apache2.3.2/cgi-bin/”
AllowOverride NoneOptions NoneOrder allow,denyAllow from all
##注释以上内容

避免使用.htaccess文件(分布式配置文件)

首先是性能考虑。如果AllowOverride启用了.htaccess文件,则APACHE需要在每个目录中查找.htaccess文件, 因此,无论是否真正用到,启用.htaccess都会导致性能的下降。另外,对每一个请求,都需要读取一次.htaccess文件。其次是安全考虑。这样会允许用户自己修改服务器的配置,这可能会导致某些意想不到的修改,所以请认真考虑是否应当给予用户这样的特权。默认在Unix平台下能够使用.htaccess来对目录进行规则定义,但是这是不安装的,建议关闭,默认的选项:AccessFileName .htaccess建议改为:#AccessFileName .htaccess全部目录权限定义使用httpd.conf中的定义,不使用 .htaccessAPACHE日志授予root 700权限chown -R root.root logschmod -R 700 logs不需要在日志目录上给apache用户读或者写许可

 

优化隐藏软件名称

 

1、安全设置configure前# vi /home/tools/httpd-2.2.31/include/ap_release.h#define AP_SERVER_BASEPRODUCT "Apache"==>改成其他的#define AP_SERVER_BASEPRODUCT "IIS"# vi /home/tools/httpd-2.2.31/os/unix/os.h#define PLATFORM "Unix"==>改成其他的#define PLATFORM "Win32"2、安装完成之后,修改httpd-default.conf#vi /usr/local/apache/conf/extra/httpd-default.confServerSignature On 改为OffServerTokens    为Prod3、修改httpd.conf#Include conf/extra/httpd-default.conf    #去掉注释4、启动检查# curl -I 192.168.0.86HTTP/1.1 200 OKDate: Fri, 10 Feb 2017 21:55:22 GMTServer: IISLast-Modified: Sat, 20 Nov 2004 20:16:24 GMTETag: "4333d-2c-3e9564c23b600"Accept-Ranges: bytesContent-Length: 44Content-Type: text/html

 

 

转载于:https://www.cnblogs.com/gtms/p/6625681.html

你可能感兴趣的文章
《TCP/IP 详解 卷一》读书笔记 -----第四章 ARP
查看>>
C# Stream 和 byte[] 之间的转换
查看>>
OMG: daily scrum nine
查看>>
redis与spring结合错误情况
查看>>
Vue.js的从入门到放弃进击录(二)
查看>>
第六章 字节码执行方式--解释执行和JIT
查看>>
Mesh属性[Unity]
查看>>
实现绘制图形的ToolBar
查看>>
C# 串口接收数据中serialPort.close()死锁
查看>>
Python3控制结构与函数
查看>>
字符串方法title()、istitle()
查看>>
yield语句
查看>>
Html.Partial和Html. RenderPartial用法
查看>>
查看linux系统中占用cpu最高的语句
查看>>
[洛谷P1738]洛谷的文件夹
查看>>
ubuntu server设置时区和更新时间
查看>>
《弟子规》下的沉思
查看>>
网络流24题 飞行员配对方案问题
查看>>
剑指offer python版 调整数组顺序使奇数位于偶数前面
查看>>
Leader of All Crushing Machines in the Future
查看>>