设为首页 收藏本站
查看: 656|回复: 0

[经验分享] Linux 系统 Apache安装配置与优化

[复制链接]

尚未签到

发表于 2018-11-26 08:01:00 | 显示全部楼层 |阅读模式
  本文针对apache  web服务器的安装配置收集有效的一些经验和方法,用于交流。
  1.Apache安装配置
  Apache的安装,考虑只用于Tomcat的前段代理,处理图片和静态文件的请求,并把动态请求转发到tomcat服务处理。本文使用编译安装方式,把跟需求无关的模块关闭,只使用最小的模块编译,提高软件性能。
  配置编译命令请参考:
  http://www.uplinux.com/download/doc/apache/ApacheManual/install.html#configure
  编译参数说明:
  编译和包含是两个不同的概念。编译是指这个模块被编译了,要想使用它,只用简单的修改httpd.conf加上LoadModule xxx_module  libexec/mod_xxx.so 明确指出。
  用以前命令可以查看缺省时已编译和包含进去的模块。不用显式的--enable-MODULE[=shared] 和LoadModule 操作。就已经可以使用的。
  core.c:Apache HTTP 服务器提供的核心功能。必须要有的。
  mod_access.c:安全认证大大降低访问速度,建议disable it .
  mod_auth.c :安全认证大大降低访问速度,建议disable it .
  mod_include.c:server side include已经过时了,建议disable it .
  mod_log_config.c:用于定制log格式.最好保留.
  mod_env.c:修改传送到 CGI 脚本和 SSI 页面的系统环境(变量)。一般说来,可以不需要。
  mod_setenvif.c :用户设置环境变量和认证相关,如果没有使用压缩输出,建议disable it .
  prefork.c:Implements a non-threaded, pre-forking web server。参考下面的mpm介绍。
  http_core.c:Apache HTTP 服务器提供的核心功能。必须要有的。
  mod_mime.c:用于增加文件应用的关联。最好保留。
  mod_status.c:Provides information on server activity and performance 。一般说来,可以不需要。
  mod_autoindex.c:不需要将没有缺省index文件的目录下所有文件列出,建议disable it .
  mod_asis.c:尽量不使用CGI:一直是Apache安全问题最多的地方,建议disable it .
  mod_cgi.c:尽量不使用CGI:一直是Apache安全问题最多的地方,建议disable it .
  mod_negotiation.c :内容协商,以根据浏览器提供的设置选择不同媒介类型、语言、字符集和编码的最佳表现,还有对来自浏览器的不完整内容协商信息作智能处理的能力。一般说来,可以不需要。
  mod_dir.c:用于缺省index文件:index.php等。我们现在的应用不需要这个。看情况而定。
  mod_imap.c:尽量不使用CGI:一直是Apache安全问题最多的地方,建议disable it .
  mod_actions.c:尽量不使用CGI:一直是Apache安全问题最多的地方,建议disable it
  mod_userdir.c:比如:需要在~/username/下调试php.可用可不用.建议disable it .
  mod_alias.c:比如:需要将以前的URL进行转向或者需要使用CGI script-alias.建议disable it .
  mod_so.c :如果编译中包含有任何动态模块,则mod_so模块会被自动包含进核心。如果希望核心能够装载DSO,而不实际编译任何动态模块,需要明确指定--enable-so。我们的应用使用静态编译,不需要它。建议disable it .
  CC="pgcc" CFLAGS="-O2" :编译器参数优化
  --profix:apache的安装目录,默认是安装在/usr/local/apache
  $ cd /tools
  $ tar –xzvf apache-2.0.59.tar.gz
  $ cd httpd2.0.59
  $ CC="pgcc" CFLAGS="-O2" \
  ./configure --prefix=/usr/apache-2.0.59 \
  --disable-access \
  --disable-auth \
  --disable-include \
  --disable-env \
  --disable-status \
  --disable-autoindex \
  --disable-asis \
  --disable-cgi \
  --disable-negotiation \
  --disable-imap \
  --disable-actions \
  --disable-userdir \
  --disable-alias \
  --enable-deflate \
  --enable-headers \
  --enable-setenvif \
  --enable-so
  $ make
  $ make install
  安装完成后,因为编译关闭了很多默认的功能模块,所以直接使用发布的默认配置是不能启动服务器的,需要作调整。
  设apache的安装目录为$APACHE_HOME
  备份默认配置文件$APACHE_HOME/conf/httpd.conf,然后使用highperformance.conf最为配置文件
  $ cd $APACHE_HOME/conf/
  $ mv httpd.conf httpd.conf_bak
  $ cp highperformance.conf httpd.conf
  $ ../bin/apachectr start
  如果启动失败,请屏蔽调httpd.conf中的mod_access相关命令,如Order等,关于目录权限的控制在本例中可以使用变通方式解决,使用没有加载目录权限控制功能。
  启动验证,访问http://$IP/,如果正常显示页面,表示成功。
  2.PMP
  MPM(Multi-Processing Modules,多道处理模块)
  指定MPM的方法
  $ ./configure --help|grep mpm
  显示如下:
  --with-mpm=MPM
  Choose the process model for Apache to use.
  MPM={beos|worker|prefork|mpmt_os2| perchild|leader|threadpool}
  主要阐述prefork,如果不用  “--with-mpm”显式指定某种MPM,prefork就是Unix平台上缺省的MPM,prefork本身并没有使用到线程,2.0版使用它是为  了与1.3版保持兼容性;prefork用单独的子进程来处理不同的请求,进程之间是彼此独立的,这也使其成为最稳定的MPM之一。
  prefork的工作原理是,控制进程   在最初建立“StartServers”个子进程后,为了满足MinSpareServers设置的需要创建一个进程,等待一秒钟,继续创建两个,再等待  一秒钟,继续创建四个……如此按指数级增加创建的进程数,最多达到每秒32个,直到满足MinSpareServers设置的值为止。这就是预派生  (prefork)的由来。这种模式可以不必在请求到来时再产生新的进程,从而减小了系统开销以增加性能。
  下面是prefork的默认配置段:
  
  StartServers          5
  MinSpareServers       5
  MaxSpareServers      10
  MaxClients          150
  MaxRequestsPerChild  0
  
  MinSpareServers
  设置了最小的空闲进程数。
  MaxSpareServers
  设置了最大的空闲进程数,如果空闲进程   数大于这个值,Apache会自动kill掉一些多余进程。这个值不要设得过大,但如果设的值比MinSpareServers小,Apache会自动把  其调整为MinSpareServers+1。如果站点负载较大,可考虑同时加大MinSpareServers和MaxSpareServers。
  MaxClients
  MaxClients是这些指令中最为   重要的一个,设定的是Apache可以同时处理的请求,是对Apache性能影响最大的参数。其缺省值150是远远不够的,如果请求总数已达到这个值(可  通过ps -ef|grep http|wc   -l来确认),那么后面的请求就要排队,直到某个已处理请求完毕。这就是系统资源还剩下很多而HTTP访问却很慢的主要原因。系统管理员可以根据硬件配置  和负载情况来动态调整这个值。虽然理论上这个值越大,可以处理的请求就越多,但Apache默认的限制不能大于256(在2.0中源于#define   DEFAULT_SERVER_LIMIT   256)。如果把这个值设为大于256,那么Apache将无法起动。事实上,256对于负载稍重的站点也是不够的。在Apache   1.3中,这是个硬限制。如果要加大这个值,必须在“configure”前手工修改的源代码树下的src/include/httpd.h中查找  256,就会发现“#define HARD_SERVER_LIMIT   256”这行。把256改为要增大的值(如4000),然后重新编译Apache即可。在Apache   2.0中新加入了ServerLimit指令,使得无须重编译Apache就可以加大MaxClients。ServerLimit使用也是单独添加一行  在这就可以了。如果ServerLimit的值再这定义超过了20000,就要修改server/mpm/prefork/prefork.c    #define MAX_SERVER_LIMIT 20000。将20000改成更大的值。
  MaxRequestsPerChild
  设置的是每个子进程可处理的请求数。每   个子进程在处理了“MaxRequestsPerChild”个请求后将自动销毁。0意味着无限,即子进程永不销毁。虽然缺省设为0可以使每个子进程处理  更多的请求,但如果设成非零值也有两点重要的好处:可防止意外的内存泄漏;在服务器负载下降的时侯会自动减少子进程数。
  Apache+jk2的每个进程的的大小是2M,本系统预计分配给apache的内存为400M,那么根据公式:
  apache_max_process_with_good_perfermance < (400M / 2m) * 2 = 400
  apache_max_process =400 * 1.5 = 700
  即最佳性能设置为:400
  按照上面的分析,本系统的的prefork.c配置为:
  
  ServerLimit       400
  MaxClients        400
  StartServers      5
  MinSpareServers  5
  MaxSpareServers 10
  
  3.gzip压缩输出
  通过加入mode_deflate模块对服务器输出压缩传输,可以减小输出压力,节约带宽。
  可以减少40%左右的流量,减少机器用于传输的负载.
  压缩输出的配置需要以下三个模块功能支持
  mod_setenvif.c
  mod_deflate
  mod_headers
  具体说明请参考:http://www.uplinux.com/download/doc/apache/ApacheManual/mod/
  配置
  参考:http://www.uplinux.com/download/doc/apache/ApacheManual/mod/mod_deflate.html
  AddOutputFilterByType DEFLATE text/html text/plain text/xml text/javascript text/css
  # Compress everything except images
  
  # Insert filter
  SetOutputFilter DEFLATE
  # 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 \bMSIE !no-gzip !gzip-only-text/html
  # Don't compress images
  SetEnvIfNoCase Request_URI \
  \.(?:gif|jpe?g|png)$ no-gzip dont-vary
  # Make sure proxies don't deliver the wrong content
  Header append Vary User-Agent env=!dont-vary
  


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-639609-1-1.html 上篇帖子: Apache+APR+SVN+Trac搭建配置流程 下篇帖子: apache 2.2.X 修改并发链接数
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表