Linux Apache的深度優化及三種工做模式的講解

在搭建 Apache 業務沒上線以前,咱們須要不斷去測試性能以達到甚至遠遠超過預期,所以咱們須要對 Apache 進行深度優化,本次咱們將介紹 Apache 的優化及工做模式詳解。javascript

Apache 優化

在 Linux 中搭建的 Apache ,要進行優化必須是在編譯安裝環境下進行,所以咱們須要對本機自帶的 httpd 進行卸載。並從新下載並編譯安裝。要注意,在./配置的時候,要添加如下模塊。css

./configure \
--prefix=/usr/local/httpd \    ##安裝目錄
--enable-deflate \    ##壓縮模塊
--enable-expires \    ##緩存模塊
--enable-so \
--enable-rewrite \     ##重定向模塊
--enable-charset-lite \
--enable-cgi

1、配置壓縮模塊

打開主配置文件,打開壓縮模塊html

vim /usr/local/httpd/conf/httpd.conf

LoadModule headers_module modules/mod_headers.so
LoadModule deflate_module modules/mod_deflate.so     //開啓 去掉前面#
LoadModule filter_module modules/mod_filter.so

##在末尾添加下面的行
<IfModule mod_deflate.c>
  AddOutputFilterByType DEFLATE text/html text/plain text/css text/xml text/javascript    ##支持壓縮的格式
  DeflateCompressionLevel 6    ##壓縮比
  SetOutputFilter DEFLATE
</IfModule>

至此已經配置好了,咱們可使用腳本驗證下語法是否存在錯誤,驗證腳本在 /usr/local/httpd/bin/ 目錄中。java

[root@CentOS7-2 ~]# cd /usr/local/httpd/bin/
[root@CentOS7-2 bin]# ./apachectl -t -D DUMP_MODULES | grep "deflate"
 deflate_module (shared)

2、網頁緩存模塊

主配置文件中打開模塊,並在末尾添加語塊。web

vim /usr/local/httpd/conf/httpd.conf

LoadModule expires_module modules/mod_expires.so ##開啓

 ##在末尾添加下面的行
 <IfModule mod_expires.c>
  ExpiresActive On
  ExpiresDefault "access plus 50 seconds"    ##訪問最大緩存時間50s
</IfModule>

查看模塊是否正常開啓apache

[root@CentOS7-2 ~]# cd /usr/local/httpd/bin/
[root@CentOS7-2 bin]# ./apachectl -t -D DUMP_MODULES | grep "expires"
expires_module (shared)

3、安全性優化

此項主要是對網絡日益嚴重的盜鏈現象,防止本站點網址圖片被別人盜鏈使用。vim

主配置文件修改緩存

vim /usr/local/httpd/conf/httpd.conf

LoadModule rewrite_module modules/mod_rewrite.so   ##開啓

<Directory "/usr/local/httpd/htdocs">
Options Indexes FollowSymLinks安全

AllowOverride None

Require all granted

RewriteEngine On
RewriteCond %{HTTP_REFERER} !^http://localhost/.*$ [NC]
RewriteCond %{HTTP_REFERER} !^http://localhost$ [NC]
RewriteCond %{HTTP_REFERER} !^http://localhost/.*$ [NC]
RewriteCond %{HTTP_REFERER} !^http://localhost/$ [NC]
RewriteRule .*\.(gif|jpg|swf)$ http://localhost/盜鏈圖片  ##放在網站站點目錄下,盜鏈原圖片會重定向到這張圖片上

</Directory>服務器

查看模塊是否正常開啓

[root@CentOS7-2 ~]# cd /usr/local/httpd/bin/
[root@CentOS7-2 bin]# ./apachectl -t -D DUMP_MODULES | grep "rewrite"
 rewrite_module (shared)

4、隱藏版本信息

打開主配置文件,開啓default配置文件

vim /usr/local/httpd/conf/httpd.conf

Include conf/extra/httpd-default.conf  ##開啓
vim /usr/local/httpd/conf/extra/httpd-default.conf

ServerTokens Prod            //只顯示名稱,沒有版本
ServerSignature Off

Apache 工做模式

三種工做模式詳解

咱們能夠經過腳本查看當前工做模式

cd /usr/local/httpd/bin/
./httpd -l
  1. Prefork MPM : 這個多路處理模塊(MPM)實現了一個非線程型的、預派生的web服務器。

    他的工做方式相似於Apache 1.3。它適合於沒有線程安全庫,須要避免線程兼容性問題的系統。它是要求將每一個請求相互獨立的狀況下最好的MPM,這樣若一個請求出現問題就不會影響到其餘請求。這個MPM具備很強的自我調節能力,只須要不多的配置指令調整。最重要的是將MaxClients設置爲一個足夠大的數值以處理潛在的請求高峯,同時又不能太大,以至須要使用的內存超出物理內存的大小。
  2. Worker MPM : 此多路處理模塊(MPM)使網絡服務器支持混合的多線程多進程。

    因爲使用線程來處理請求,因此能夠處理海量請求,而系統資源的開銷小於基於進程的MPM。可是,它也使用了多進程,每一個進程又有多個線程,以得到基於進程的MPM的穩定性。每一個進程能夠擁有的線程數量是固定的。服務器會根據負載狀況增長或減小進程數量。一個單獨的控制進程(父進程)負責子進程的創建。每一個子進程能夠創建ThreadsPerChild數量的服務線程和一個監聽線程,該監聽線程監聽接入請求並將其傳遞給服務線程處理和應答。

    不論是Worker模式或是Prefork 模式,Apache老是試圖保持一些備用的(spare)或者是空閒的子進程(空閒的服務線程池)用於迎接即將到來的請求。這樣客戶端就不須要在獲得服務前等候子進程的產生。

  3. Event MPM:以上兩種穩定的MPM方式在很是繁忙的服務器應用下都有些不足。

    儘管HTTP的Keepalive方式能減小TCP鏈接數量和網絡負載,可是 Keepalive須要和服務進程或者線程綁定,這就致使一個繁忙的服務器會耗光全部的線程。 Event MPM是解決這個問題的一種新模型,它把服務進程從鏈接中分離出來。在服務器處理速度很快,同時具備很是高的點擊率時,可用的線程數量就是關鍵的資源限 制,此時Event MPM方式是最有效的。一個以Worker MPM方式工做的繁忙服務器可以承受每秒好幾萬次的訪問量(例如在大型新聞服務站點的高峯時),而Event MPM能夠用來處理更高負載。值得注意的是,Event MPM不能在安全HTTP(HTTPS)訪問下工做。

    對於Event 模式,apache給出瞭如下警告:
    This MPM is experimental, so it may or may not work as expected .
    這種MPM目前處於試驗狀態,他可能不能按照預期的那樣工做。

如何在三種模式中切換

在編譯安裝的配置中,指定--with-mpm=NAME 選項指定MPM,NAME就是你想使用的MPM的名稱。不指定模式的話,默認爲Prefork MPM。

配置模式參數

開啓mpm配置文件模塊

vim /etc/httpd.conf
Include conf/extra/httpd-mpm.conf

編輯配置模式參數

vim /usr/local/httpd/conf/extra/httpd-mpm.conf

<IfModule mpm_prefork_module>
    StartServers             10       # 啓動時進程數
    MinSpareServers          10       # 最小空閒進程數
    MaxSpareServers         50        # 最大空閒進程數
    MaxRequestWorkers      150        #最大併發進程數
    MaxConnectionsPerChild   0        # 最大鏈接數限制
</IfModule>

三種配置模式的配置都是同樣的,咱們只須要對部分參數根據模式進行修改就能夠了。

相關文章
相關標籤/搜索