ubuntu server下apache安裝配置以及最佳化

來源:互聯網
上載者:User

 

在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>

       此外,還支援萬用字元和Regex,用來匹配很多目錄。比如:

       <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僅在不包含Regex的<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,如要分析SquidProxy 伺服器日誌,改為squid。

 3)運行webalizer:$sudo webalizer

  

作者 lgm277531070

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.