<pre id="3mdv2"><nav id="3mdv2"><i id="3mdv2"></i></nav></pre>
<p id="3mdv2"><strong id="3mdv2"><small id="3mdv2"></small></strong></p>
<td id="3mdv2"><option id="3mdv2"></option></td>

      <table id="3mdv2"><strike id="3mdv2"></strike></table>

      長治網站建設
      Apache2.2安全配置和性能優化



      Apache2.2安全配置和性能優化


      一、 Apache禁止目錄遍歷


      將Options Indexes FollowSymLinks中的Indexes 去掉,就可以禁止 Apache 顯示該目錄結構。Indexes 的作用就是當該目錄下沒有 index.html文件時,就顯示目錄結構。




      二、 apache 隱藏版本信息
      1.隱藏Apache版本信息


      測試默認 apache 的狀態信息
      [root@1314it conf]# curl -Is localhost
      HTTP/1.1 200 OK
      Date: Tue, 16 Nov 2010 04:20:15 GMT
      Server: Apache/2.2.3 (CentOS) DAV/2 PHP/5.1.6 mod_perl/2.0.4 Perl/v5.8.8
      X-Powered-By: PHP/5.1.6
      Connection: close
      Content-Type: text/html; charset=GB2312


      [root@1314it conf]#


      修改主配置文件 httpd.conf
      ServerSignature Off
      ServerTokens Prod


      重啟 apache 測試


      測試隱藏版本號后 apache 的狀態信息
      [root@1314it conf]# curl -Is localhost
      HTTP/1.1 200 OK
      Date: Tue, 16 Nov 2010 04:21:41 GMT
      Server: Apache
      X-Powered-By: PHP/5.1.6
      Connection: close
      Content-Type: text/html; charset=GB2312


      [root@1314it conf]#
      三、 apache隱藏banner(版本),關閉trace
      Apache Banner的隱藏方法, 
      修改httpd.conf文件,設置以下選項:
      ServerTokens ProductOnly
      ServerSignature Off
      關閉trace-method
      TraceEnable off
      另外apache可以在編譯的時候,故意混淆banner信息,達到隱藏的目的


      四、 apache并發數調整
      在/usr/local/etc/apache22/httpd.conf中加載MPM配置(去掉前面的注釋):
      # Server-pool management (MPM specific)
      Include etc/apache22/extra/httpd-mpm.conf
      可見的MPM配置在/usr/local/etc/apache22/extra/httpd-mpm.conf,但里面根據httpd的工作模式分了很多塊,哪一部才是當前httpd的工作模式呢?可通過執行 apachectl -l 來查看:
      Compiled in modules:
                    core.c
                    prefork.c
                    http_core.c
                    mod_so.c
      看到prefork 字眼,因此可見當前httpd應該是工作在prefork模式,prefork模式的默認配置是:
      <IfModule mpm_prefork_module>
         StartServers    5
         MinSpareServers  5
         MaxSpareServers  10
         MaxClients     150
         MaxRequestsPerChild   0
      </IfModule>
      2.要加到多少?
      連接數理論上當然是支持越大越好,但要在服務器的能力范圍內,這跟服務器的CPU、內存、帶寬等都有關系。
      查看當前的連接數可以用:
      ps aux | grep httpd | wc -l
      或:
      pgrep httpd|wc -l
      計算httpd占用內存的平均數:
      ps aux|grep -v grep|awk '/httpd/{sum+=;n++};END{print sum/n}'
      由于基本都是靜態頁面,CPU消耗很低,每進程占用內存也不算多,大約200K。
      服務器內存有2G,除去常規啟動的服務大約需要500M(保守估計),還剩1.5G可用,那么理論上可以支持1.5*1024*1024*1024/200000 = 8053.06368
      約8K個進程,支持2W人同時訪問應該是沒有問題的(能保證其中8K的人訪問很快,其他的可能需要等待1、2秒才能連上,而一旦連上就會很流暢)
      五、 控制最大連接數的MaxClients ,因此可以嘗試配置為:
      <IfModule mpm_prefork_module>
                      StartServers                      5
                      MinSpareServers                   5
                      MaxSpareServers                  10
                      ServerLimit                    5500
                      MaxClients                     5000
                      MaxRequestsPerChild               100
      </IfModule>
      注意,MaxClients默認最大為250,若要超過這個值就要顯式設置ServerLimit,且ServerLimit要放在MaxClients之前,值要不小于MaxClients,不然重啟httpd時會有提示。
      重啟httpd后,通過反復執行pgrep httpd|wc -l 來觀察連接數,可以看到連接數在達到MaxClients的設值后不再增加,但此時訪問網站也很流暢,那就不用貪心再設置更高的值了,不然以后如果網站訪 問突增不小心就會耗光服務器內存,可根據以后訪問壓力趨勢及內存的占用變化再逐漸調整,直到找到一個最優的設置值。
      (MaxRequestsPerChild不能設置為0,可能會因內存泄露導致服務器崩潰)
      更佳最大值計算的公式:
      apache_max_process_with_good_perfermance < (total_hardware_memory / apache_memory_per_process ) * 2
      apache_max_process = apache_max_process_with_good_perfermance * 1.5


      六、 Apache日志切割
      方法1、使用 cronolog 為每一天建立一個新的日志
      安裝cronolog程序
      主配置文件中的使用方法
      ErrorLog "|bin/cronolog logs/error_%Y%m%d.log"
      CustomLog "|bin/cronolog logs/access_%Y%m%d.log" combined
      虛擬主機配置文件中的使用方法
      ServerAdmin webmaster@localhost
      DocumentRoot "E:/htdocs"
      ServerName localhost
      ErrorLog "|bin/cronolog logs/localhost/error_%Y%m%d.log"
      CustomLog "|bin/cronolog logs/localhost/access_%Y%m%d.log" combined
      方法2使用 rotatelogs 每隔一天記錄一個日志
      主配置文件中的使用方法


      ErrorLog "|bin/rotatelogs -l logs/error_%Y%m%d.log 86400"
      CustomLog "|bin/rotatelogs -l logs/access_%Y%m%d.log 86400" combined
      虛擬主機配置文件中的使用方法


      ServerAdmin webmaster@localhost
      DocumentRoot "E:/htdocs"
      ServerName localhost
      ErrorLog "|bin/rotatelogs -l logs/localhost/error_%Y%m%d.log 86400"
      CustomLog "|bin/rotatelogs -l logs/localhost/access_%Y%m%d.log 86400" combined


      注意:
      這兩個管道日志文件程序還有一點不同之處是使用 cronolog 時如果日志是放在某個不存在的路徑則會自動創建目錄,而使用 rotatelogs 時不能自動創建,這一點要特別注意
      七、 apache對頁面進行壓縮和頁面緩存來提升性能


      Apache來對頁面進行壓縮和頁面緩存來提升性能.為了實現這些功能需要三個模塊mod_deflate、mod_expires和mod_headers


      要實現這些東西的配置先在httpd.conf文件下找到下面三個地方
      文本代碼
      #LoadModule deflate_module   modules/mod_deflate.so   
      #LoadModule expires_module   modules/mod_expires.so   
      #LoadModule headers_module   modules/mod_headers.so  
          同時去掉前面的“#”,這些模塊功能已經開啟了,下面我們在配置GZIP和Expires了。配置GZIP和Expires也很容易,我們只需要在httpd.conf 配置文件中啟用并進行相關的配置即可,配置如下:
      文本代碼
      <IfModule   mod_expires.c>    
       ExpiresActive   on   
       ExpiresDefault "now plus 1   day"  
       ExpiresByType image/x-icon "access plus 10   year"  
       ExpiresByType image/gif "access plus 1   month"  
       ExpiresByType image/jpeg "access plus 1   month"  
       ExpiresByType text/css "now plus 1   month"  
       ExpiresByType text/javascript "now plus 1   month"  
       ExpiresByType application/x-javascript "now plus 1   month"  
       ExpiresByType text/html "now plus 5   minutes"  
       ExpiresByType text/plain "now plus 1   month"  
       ExpiresByType image/js "access plus 1   month"  
       ExpiresByType application/x-shockwave-flash "access plus 1   week"  
       <FilesMatch   ".(gif|jpe?g|png)$">   
        Header set   Cache-Control "max-age=604800"  
        Header unset   ETag   
       </FilesMatch>   
      </IfModule>   
      FileETag   none   
      <ifmodule   mod_deflate.c>   
       DeflateCompressionLevel   9  
       AddOutputFilterByType DEFLATE text/html text/plain text/xml   application/x-httpd-jsp   
       AddOutputFilter DEFLATE js   css   
      </ifmodule>   
      <Location   "/">   
       SetOutputFilter   DEFLATE   
       BrowserMatch ^Mozilla/4   gzip-only-text/html   
       BrowserMatch ^Mozilla/4.0[678]   no-gzip   
       BrowserMatch bMSIE !no-gzip   !gzip-only-text/html   
       SetEnvIfNoCase Request_URI   .(?:gif|jpe?g|png)$ no-gzip dont-vary   
       Header append Vary   User-Agent   env=!dont-vary   
      </Location>  




      八、 修改Apache配置文件開啟gzip壓縮傳輸


      第1步
      LoadModule deflate_module modules/mod_deflate.so
      LoadModule headers_module modules/mod_headers.so
        打開httpd.conf后,先將上面兩行配置前面的#號去掉,這樣apache就會啟用這兩個模塊,其中mod_deflate是壓縮模塊,就是對要傳輸到客戶端的代碼進行gzip壓縮;mod_headers模塊的作用是告訴瀏覽器頁面使用了gzip壓縮,如果不開啟mod_headers那么瀏覽器就會對gzip壓縮過的頁面進行下載,而無法正常顯示。
      第2步
        在httpd.conf中加入以下代碼,可以加到任何空白地方,不了解apache的朋友,如果擔心加錯地方,就放到http.conf文件的最后一行,如果是虛擬服務器可以寫.htaccess文件里面,然后放在項目下即可。
      <IfModule mod_deflate.c>
          SetOutputFilter DEFLATE    #必須的,就像一個開關一樣,告訴apache對傳輸到瀏覽器的內容進行壓縮


          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-php application/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 ,但是事實上它沒有問題
      </IfModule>

      ServerTokens ProductOnly
      ServerSignature Off
      TraceEnable off


      <IfModule mod_deflate.c>
          SetOutputFilter DEFLATE
          SetEnvIfNoCase Request_URI .(?:gif|jpe?g|png)$ no-gzip dont-vary
          SetEnvIfNoCase Request_URI .(?:exe|t?gz|zip|bz2|sit|rar)$ no-gzip dont-vary
          SetEnvIfNoCase Request_URI .(?:pdf|mov|avi|mp3|mp4|rm)$ no-gzip dont-vary
          AddOutputFilterByType DEFLATE text/*
          AddOutputFilterByType DEFLATE application/ms* application/vnd* application/postscript application/javascript application/x-javascript
          AddOutputFilterByType DEFLATE application/x-httpd-php application/x-httpd-fastphp
          BrowserMatch ^Mozilla/4 gzip-only-text/html
          BrowserMatch ^Mozilla/4.0[678] no-gzip
          BrowserMatch bMSIE !no-gzip !gzip-only-text/html
      </IfModule>

      2006-2014 IT0355.com 山西中聯科創科技有限公司. All Rights Reserved.
      電話:0355-3728808 傳真:0355-3728808
      ICP備案號:晉ICP備06003721號本站已通過國際W3C認證
      關鍵字:中聯科創,長治網站建設,長治網站推廣,長治網絡工程,長治軟件開發,山西網站建設,山西軟件開發 長治五金網

                  

      亚洲AV无码国产日韩久久_亚洲欧美激情国产区_人人澡亚洲精品在线_在线看午夜福利片国产片_欧美性爱精品福利视频_一区二区三区黑人免费