zoukankan      html  css  js  c++  java
  • ubuntu server下apache安装配置以及优化(摘录)

    在ubuntu和debian中,apache2主要功能模块(Multi-Processing Module,多道处理模块,简称MPM)被分为了不同的软件包,它们分别是:

          Apache2-mpm-event: 事件驱动的MPM;

          Apache2-mpm-perchild:这只是个过渡的“假”软件包,依赖worker;

          Apache2-mpm-prefork:传统MPM,兼容apache1.3,不使用线程;

         Apache2-mpm-worker:支持多线程和多进程混合模型的高速MPM;

    Ubuntu推荐使用apache2-mpm-worker。

    $ sudo apt-get install apache2

    Apache配置文件说明:

    Apache2.conf:全局配置文件,不要轻易修改它;

           Conf.d/:该目录存放一些一般性的配置;

           Envvars:存放环境变量,一般不需要修改;

           Httpd.conf:用户配置文件;

           Mods-available/:该目录下是已经安装的可用模块;

           Mods-enabled/:该目录下是已经启用的模块;

           Ports.conf:httpd服务的端口;

           Sites-available/该目录下是可用的虚拟主机

           Sites-enabled/:该目录下是已经启用的虚拟主机;

    $ sudo a2enmod :查看可用模块

    $ sudo a2dismod :查看已启用模块

    $sudo apt-cache search libapache2-mod :搜索所有模块

    Ubuntu的apache2 为提供虚拟主机支持做了很好的配置。如果你的服务器只有一个网站,基本上不需要修改配置,虚拟主机就可以用了;如果有多个网站,则可以复制default虚拟主机的配置文件进行修改,这样可以迅速架设多个网站。

    默认的虚拟主机路径:/etc/apache2/sites-available/default

    创建一个新的虚拟主机:假设我们要创建一个域名为www.lgmtest.com的虚拟主机:

    1)  复制default :

                $ sudo cp /etc/apache2/sites-available/default /etc/apache2/sites-available/www.lgmtest.com

    2)  编辑文件:

                $ sudo vi /etc/apache2/sites-available/www.lgmtest.com

    将第一行的NameVirtualHost指令删除(所有的虚拟主机只保留一个NameVirtualHost指令即可),然后,将DocumentRoot的路径修改为/var/www/www.lgmtest.com/(自己设置),将<Directory /var/www/>修改为<Directory /var/www/www.lgmtest.com />

    如果你有很多虚拟主机,建议修改ErrorLog和CustomLog的路径。

    禁用default虚拟主机,并启用新建的www.lgmtest.com虚拟主机,然后重新启动apache

              $ sudo a2dissite default && a2ensite www.lgmtest.com

              $ sudo /etc/init.d/apache2 restart

    虚拟主机配置详解(以default虚拟主机为例)

           1.NameVirtualHost : 用来指定服务器ip的地址 

           语法  NameVirtualHost 192.168.1.1:8080

           2.VirtualHost :  针对当前的虚拟主机。

            语法<VirtualHost IP地址[:端口号] [IP地址[:端口号]] …>…<VirtualHost />

           3.ServerAdmin:用来指定站长email地址。

           4.DocumentRoot :用来指定网站的根目录,一般设置绝对路径,否则,apache将认为它的父目录是ServerRoot所定义的路径。

           5.<Directory></Directory>指令是一对,它们中间所包含的指令,仅对指定的目录有效。该目录可以是特指的某个目录,比如:

           <Directory /var/www/www.lgmtest.com>

           …

           </Directory>

           此外,还支持通配符和正则表达式,用来匹配很多目录。比如:

           <Directory /var/www/*.lgmtest.com>……</Directory>

           6.Options:用来配置指定目录的特性,比如是否允许该目录下有符号链接、是否使用CGI等。这些特性包括:

           All-->除MultiViews之外的所有特性(默认设置);

           ExecCGI-->允许该目录通过mod_cgi运行CGI脚本;

           FollowSymLinks-->允许在此目录中使用符号连接;

           Includes-->在该目录中允许使用mod_include进行服务器端包含;

           IncludesNOEXEC-->允许服务器端包含,但禁用“#exec cmd”和“#exec cgi”;

           Indexes-->允许列目录。如果某个被访问的目录中没有DirectoryIndex指定的文件(如index.html),服务器将生成并显示目录列表;

           MultiViews-->允许“内容协商”的“多重视图”。“内容协商”由mod_negotiation模块生成;

           SymLinksIfOwnerMatch-->只允许使用这样的符号链接:这些符号链接与目标目录(或文件)的拥有者具有相同的UserID。

           在Options指令中,可以使用加减号(+|-)。一般来说,如果你在一个目录上设置了多次的Options,则最特殊的一个会被完全接收,而其他的则会被忽略;然而,如果所有作用于Options指令的选项前都加上“+”或者“-”号,则此可选项将被合并——所有带“+”号的选项将强制覆盖当前的设置,而所有带“-”号的选项将强制从当前设置中去除。

           7.AllowOverride:针对.htaccess文件的;可以允许该文件的全部指令,也可以只允许某些类型的指令,或者全部禁止。

           语法:AllowOverride All | None | directive-type [directive-type] …

            Apache本来的默认值是AllowOverride All,但是出于安全考虑,Ubuntu将其改为了AllowOverride None(直接忽略.htaccess文件)。

           提示:AllowOverride仅在不包含正则表达式的<Directory>配置段中才是有效的。

           8.Order:用来控制默认访问状态,以及Allow和Deny的生效顺序。这些顺序可以是“Deny,Allow”或者“Allow,Deny”。如果是前者,那么Deny在Allow指令之前被评估,默认允许所有访问。任何不匹配Deny指令或者匹配Allow指令的访问者都被允许访问;如果是后者,那么Allow在Deny之前被评估,默认拒绝所有访问。任何不匹配Allow指令或者匹配Deny指令的访问者将被禁止访问。

           9.Allow:用来控制哪些主机可以访问。可以根据主机名、ip地址、ip范围或其他环境变量的定义来进行控制。

           语法:Allow from all | host | env=env-variable [host | env=env-variable] …

           10.Deny:用来限制主机访问的,语法和Allow完全相同。

           11.ErrorLog:定义错误日志的位置。

           12.LogLevel:控制日志的详细程度的级别级别顺序有:

                  emerg:紧急(系统无法使用)

                  alert:必须立即采取措施

                  crit:致命情况

                  error:错误情况

                  warn:警告情况

                  notice:一般重要情况

                  info:普通信息

                  debug:调试信息

           13.CustomLog:定义访问日志的路径和格式。

           语法:CustomLog file|pipe format | nickname [env=[!]environment-variable]

                      CustomLog logs/access_log common

                      CustomLog logs/access_log “%h %l %u %t \”%r\” %>s %b ”

           14.ServerSignature:用来定义服务器所生成页面的页脚。这些信息包括错误信息、mod_proxy的ftp目录列表、mod_info的输出等。

           15.Alias:有点像Linux的ln命令,它提供路径别名,让你用起来更方便

           语法:Alias URL-path file-path | directory-path

    HTTPS的实现

    1)  启用mod_ssl模块;

              $ sudo a2enmod ssl

    2)  生成证书、安装证书;

              <1>使用CA签名的证书(要收费的):

                       a.       先安装openssl:$ sudo apt-get install openssl

                       b.       创建key:

                             $ openssl genrsa –des3 –out server.key 1024(这个是要设置密码的)

                             $ openssi genrsa –out server.key 1024(这个不要设置密码)

                       c.       创建CSR:

                            $ openssi req –new –key server.key –out server.csr

                             完成后,将CSR文件发给某家CA,CA将对其进行签名。

              <2>使用自己签名的证书:

                       $ sudo openssl x509 –req –days 365 –in server.csr –signkey server.key –out server.crt

                       $ sudo cp server.crt /etc/ssl/certs

                       $ sudo cp server.key /etc/ssl/private

    3)  修改虚拟主机配置文件,重启apache服务。

              启用SSL。在VirtualHost段中,DocumentRoot一行的下方加入:

    SSLEngine on 

    SSLOptions +StrictRequire 

    SSLCertificateFile /etc/ssl/certs/server.crt 

    SSLCertificateKeyFile /etc/ssl/private/server.key 

    注:上面两个路径是前面指定好的。

    重启apache :$ sudo /etc/init.d/apache2 restart

    Apache性能优化

    1.       正确选择MPM

    Event比较适合用户那些需要有大量持续连接(KeepAlive traffic)的情况。KeepAlive的好处是可以在同一个TCP连接中响应多次请求。这种方式,可以使一个包含大量图片的HTML文档加速50%.在配置文件中设置keepAlive为On即可启用KeepAlive.

    Prefork实现另一个非线程的MPM,特点是很稳定。它能够隔离每个请求,如果某个请求出现故障,不会影响其他的请求。使用prefork最重要的是将MaxClients设置的恰当。这个MaxClients值要足够的大,但又不能太大,致使apache所需内存超出物理内存大小。

    Worker,速度比prefork快很多,可以处理相对海量请求。Worker使用了多进程,每个进程又生成多个线程,这样可以获得基于进程服务器的稳定性。比较重要的两个配置是:ThreadPerChild(用来控制每个子进程允许建立的线程数)和MaxClients(控制允许建立的总线程数)。

    2.       优化apache配置

              a)         关闭DNS查询:将HostnameLookups设置为off;

              b)        优化MaxClients:

    修改apache.conf文件中IfModule mpm_worker_module(worker)、IfModule mpm_event_module(event)或者IfModule mpm_prefork_module(prefork)三个模块里面的数据。MaxClients如果设置要超过256的话,就要同步修改ServerLimit数值,因为ServerLimit的默认值是256

              c)         优化KeepAlive:设置KeepAlive为Off或者将KeepAliveTimeout值改小。

              d)        启用压缩:

                        $ sudo a2enmod deflate

                        $ sudo /etc/init.d/apache2 force-reload

              配置要压缩的文件类型(修改/etc/apache2/mods-enabled/deflate.conf)

              一般情况下,不对图片、pdf、mp3等文件进行压缩

             e)         使用缓存(mod_cache):

              一种基于硬盘缓存(mod_disk_cache),一种基于内存缓存(mod_mem_cache);

              启用缓存命令:$ sudo a2enmod disk_cache。

              在<VirtualHost>标签中添加:

    <IfModule mod_disk_cache.c> 

         CacheEnable disk /   #表示cache类型为disk,“/”指网站根目录,表示对整个网站进行缓存 

           CacheRoot /var/www/www.lgmtest.com/cache   #cache目录必须手工创建,存放缓存的地方 

           CacheDefaultExpire 7200    #失效周期,单位秒 

           CacheMaxExpire 604800      #最大失效周期,单位秒 

      </IfModule> 

              如果你想某个目录不被缓存,添加:CacheDisable /不被缓存目录

              Apache压力测试(ad)

                        $ sudo ab –n 20000 –c 200 http://www.lgmtest.com/

              说明:向www.lgmtest.com发出20000个请求,每次发送200个。

    Apache安全

    1)  隐藏敏感信息:

              在apache2.conf中添加:ServerTokens Prod(默认值为Full)。

    2)  DDOS攻击防范:

              $sudo apt-get install libapache2-mod-evasive

              安装后ubuntu自动会启动,我们自行创建一个配置文件:

              $sudo vi /etc/apache2/conf.d/evasive,写入如下内容:

    <IfModule mod_evasive20.c> 

           DOSHashTableSize 3097 #哈希表大小,增大可以提高查找速度 

              DOSPageCount 2   #允许客户机访问同一页面的时间间隔,一旦小于该间隔,该客户机ip地址将被写入黑名单 

              DOSSiteCount 2    #允许客户机对全站同时进行的并发访问请求数目 

              DOSPageInterval 1        #定义网页访问计数的时间间隔 

              DOSSiteInterval 1         #定义全站访问计数的时间间隔 

              DOSBlockingPeriod 10  #定义了阻止客户机的时间长短,在该时间内,不允许加入黑名单的客户机访问,如果访问,阻止时间则再次刷新,默认10 

           DOSEmailNotify 277531070@qq.com 

           DOSSystemCommand “su – someuser –C ‘/sbin/… %s …’” 

              DOSLogDir “var/lock/mod_evasive”  

              DOSWhitelist  127.0.0.1   #白名单 

              DOSWhitelist  127.0.0.* 

    </IfModule> 

              或者在httpd.conf文件中加入:

    LoadModule evasive20_module  /usr/lib/apache2/modules/mod_evasive20.so 

    <IfModule mod_evasive20.c> 

              DOSHashTableSize    3097 

              DOSPageCount        2 

              DOSSiteCount        50 

              DOSPageInterval     1 

              DOSSiteInterval     1 

              DOSBlockingPeriod   10 

    </IfModule> 

    Apache日志分析

    1)  安装Webalizer:$sudo apt-get install webalizer

    2)  修改配置文件:

                  默认情况下,webalizer会安装一个每日cron任务,每天自动对上一天的apache日志进行分析。可以通过修改配置文件进行设置要分析的日志文件(修改/etc/webalizer/webalizer.conf):

                  LogFile /var/log/apache2/access.log.1 要分析的文件名

                  OutputDir /var/www/lgmtesta/webalizer  数据输出目录

                  LogType clf :日志类型,如果要分析ftp日志,改为ftp,如要分析Squid代理服务器日志,改为squid。

     3)运行webalizer:$sudo webalizer

      

    作者 lgm277531070

  • 相关阅读:
    腾讯课堂目标2017高中数学联赛基础班-2作业题解答-1
    腾讯课堂目标2017初中数学联赛集训队作业题解答-1
    2016猿辅导初中数学竞赛基础特训营作业题
    Markdown的基本语法
    解决网络图片加载出现403错误
    深入理解JS引擎的执行机制
    vue中moment.js的使用
    js中字符串 stringObject 的 replace() 方法
    Object.keys()方法
    webpack的require.context()实现路由“去中心化”管理
  • 原文地址:https://www.cnblogs.com/gaoj87/p/2797905.html
Copyright © 2011-2022 走看看