Centos 6.4 搭建lamp環境(系列2優化)

一、mysql的優化,前面博客裏面已經有寫了。

原創博文來自:www.51niux.com  博主:忙碌的柴少

二、apache的優化

1. 屏蔽apache版本等敏感信息,我們在訪問一些網站時,如果你用火狐瀏覽器的firebug功能或者curl它的url,響應信息裏面有的時候會帶着web服務器的版本號,暴漏了版本就意味着暴漏了版本漏洞。


[root@test7 conf]# vi /application/apache/conf/httpd.conf  #解決方法
ServerRoot "/application/apache2.2.29"
ServerSignature Off  #添加這一句
ServerTokens Prod    #再添加這一句

[root@test7 conf]# /application/apache/bin/apachectl restart #重啓apache


2. 系統內核參數優化,這個在系統初步優化中已經做了

3. 禁止目錄index,這樣是爲了防止用戶瀏覽你的站點目錄,如果你是打算當ftp站點讓大家下載用就不要禁止了,如果不是請禁止掉。


vi /application/apache/conf/httpd.conf

<Directory "/application/apache2.2.29/htdocs">  #這是你的站點所在的目錄
Options  FollowSymLinks   #這裏原先有個Indexes,要去掉
AllowOverride None
Order allow,deny
Allow from all
</Directory>

/application/apache/bin/apachectl  restart  #重啓apache服務

4. 關閉CGI

vi /application/apache/conf/httpd.conf  #刪除下面的內容

<IfModule alias_module>
ScriptAlias /cgi-bin/ "/application/apache2.2.29/cgi-bin/"
</IfModule>

<IfModule cgid_module>
</IfModule>
<Directory "/application/apache2.2.29/cgi-bin">
AllowOverride None
Options None
Order allow,deny
Allow from all
</Directory>

[root@test7 conf]# /application/apache/bin/apachectl  restart

5. 禁用不必要的模塊,這就需要我們在編譯安裝的時候選擇大部分是模塊動態安裝

爲了儘量減少網站遭受Web***的機會,管理員最好禁用目前不用的所有模塊。你可以使用下面的命令,列示Web服務器所有的已編譯模塊。

# grep LoadModule /etc/httpd/conf/httpd.conf

# have to place corresponding `LoadModule' lines at this location so the

# LoadModule foo_module modules/mod_foo.so

LoadModule auth_basic_module modules/mod_auth_basic.so

LoadModule auth_digest_module modules/mod_auth_digest.so

LoadModule authn_file_module modules/mod_authn_file.so

LoadModule authn_alias_module modules/mod_authn_alias.so

LoadModule authn_anon_module modules/mod_authn_anon.so

LoadModule authn_dbm_module modules/mod_authn_dbm.so

LoadModule authn_default_module modules/mod_authn_default.so

LoadModule authz_host_module modules/mod_authz_host.so

LoadModule authz_user_module modules/mod_authz_user.so

LoadModule authz_owner_module modules/mod_authz_owner.so

LoadModule authz_groupfile_module modules/mod_authz_groupfile.so

LoadModule authz_dbm_module modules/mod_authz_dbm.so

LoadModule authz_default_module modules/mod_authz_default.so

LoadModule ldap_module modules/mod_ldap.so

LoadModule authnz_ldap_module modules/mod_authnz_ldap.so

LoadModule include_module modules/mod_include.so

LoadModule log_config_module modules/mod_log_config.so

LoadModule logio_module modules/mod_logio.so

LoadModule env_module modules/mod_env.so

LoadModule ext_filter_module modules/mod_ext_filter.so

……

上述模塊在默認情況下都是啓用的,但往往並不需要,特別是mod_imap,mod_include, mod_info, mod_userdir, mod_autoindex。要禁用特定的模塊,可以在該模塊所在行的開頭插入“#”註釋,並重新啓動服務。

6. 更改apache的默認用戶

在默認的安裝方式中,運行Apache進程時的用戶是“nobody”或daemon。爲安全起見,我們建議用非特權賬戶運行Apache。

[root@test7 conf]# useradd cspweb -s /sbin/nologin -M
[root@test7 conf]# vi /application/apache/conf/httpd.conf

User cspweb   #用戶和用戶組改成我們新生成的用戶
Group cspweb


7. 安全模塊的安裝(安裝配置挺麻煩的還得開單張)

mod_security:它有請求過濾,日誌審計等功能,可以防止SQL Injection,跨站腳本***。

mod_evasive:防DDOS

8. 禁止PHP解析指定站點的目錄

不解析就不會執行,很多上傳的目錄php不去執行風險就降下來了

<Directory "/application/apache2.2.29/htdocs/upload">
Options  FollowSymLinks
AllowOverride None
Order allow,deny
Allow from all
php_flag engine off  #注意這裏添加這裏禁止php解析此目錄下的文件
</Directory>


9. 儘可能減少HTTP請求數

http請求是要開銷的,想辦法減少請求數自然可以提高網頁速度。減少css,js的調用,儘量寫到頁面中去,css和js儘量能合併就合併都可以減少HTTP請求數,這是開發的事情啦。

10. 錯誤頁面優雅顯示

可以將404,403等一些了錯誤信息頁面定向到網站首頁或者其他頁面,提升用戶體驗

vi /application/apache/conf/httpd.conf

ErrorDocument 404 http://192.168.1.204/404.html

[root@test7 conf]# /application/apache/bin/apachectl restart


11. 配置cronolog 進行日誌輪詢

cronolog是一個簡單的過濾程序,它從標準輸入設備讀入日誌記錄,並把這些記錄寫入到輸出文件集,輸出文件的名字由一個文件名模板和當前的日期時間組成。cronolog通常與web服務器一起使用,例如apache,用來安全地對日誌文件按日期、月或其它特定的區間進行分割。

cd /tools
tar zxf cronolog-1.6.2.tar.gz
cd cronolog-1.6.2
./configure && make && make install

vi /application/apache/conf/httpd.conf

CustomLog "|/usr/local/sbin/cronolog /data1/logs/%Y%m%d_access_log" combined  #指定我們命令的絕對路徑,指定我們日誌存放的位置以及日誌生成的格式,這裏是年月日生成,後面是日誌格式,然後等到0點之後再有訪問,就生成新的以日期命令的日誌,access的信息就會寫到當天以日誌格式命令的日誌文件裏面。

/application/apache/bin/apachectl restart


12. 對worker或者prefork模式進行調節

這兩種模式呢prefork穩定但耗資源,worker模式呢是多線程和多進程混合模式,資源開銷小,處理請求多,但是相比於worker模式會稍微不穩定一點。

我們公司就用的worker模式所以prefork是禁用狀態。
#<IfModule prefork.c>
#StartServers         5
#MinSpareServers      5
#MaxSpareServers     10
#ServerLimit    4000
MaxClients        2000
#MaxRequestsPerChild  0
#</IfModule>

對於上面的解釋我就摘抄一下吧,意思差不多:

StartServers :Apache服務啓動時進程個數
MinSpareServers:Apache服務在運行過程中存留最少的進程個數,如進程個數少於這個值,母進程會每秒創建一個httpd進程,直到等於該值。
MaxSpareServers:Apache服務在運行過程中空閒時存留的最多進程個數。如果進程個數多於這個值,母進程會每秒殺死一個httpd進程,直到等於該值。
ServerLimit、MaxClients:Apache服務能接受同時連接的 請求個數,如超過該值,則需排隊等候。Apache服務進程數的最大值由MaxClients控制,在Apache1.3中最大隻能設置爲256,但在 Apache2.0中,可以通過在配置開頭增加ServerLimit項目來突破256的限制,此時必須 MaxClients ≤ ServerLimit ≤ 20000。
MaxRequestsPerChild:每個httpd進程每接受該值數量的請求鏈接後就會殺死自己,如有需要,母進程會通過上邊的規則重建子進程。
<IfModule mpm_worker_module>
StartServers       10    #服務器啓動時,建立子進程的個數,默認是3
ServerLimit        500  #子進程總數,默認是16,最大是20000
MaxClients          2000 #最大的線程總數,任何超過MaxClients限制的請求都將進入等候隊列。默認值是"400",serverLimit乘以ThreadsPerChild的結果。因此要增加MaxClients的時候,你必須同時增加 ServerLimit的值。
MinSpareThreads      10  #最小空閒線程數
MaxSpareThreads      20   #最大空閒線程數
ThreadsPerChild      20   #每個子進程建立的常駐的執行線程數。默認值是25。子進程在啓動時建立這些線程後就不再建立新的線程了
MaxRequestsPerChild   10000   #設置每個子進程在其生存期內允許伺服的最大請求數量。到達MaxRequestsPerChild的限制後,子進程將會結束。如果MaxRequestsPerChild爲"0",子進程將永遠不會結束。將MaxRequestsPerChild設置成非零值有兩個好處:
1.可以防止(偶然的)內存泄漏無限進行,從而耗盡內存。
2.給進程一個有限壽命,從而有助於當服務器負載減輕的時候減少活動進程的數量。

</IfModule>

13. mod_deflate 文件壓縮功能,mod_expires緩存功能

Gzip的思想就是把文件先在服務器端進行壓縮,然後進行傳輸,傳輸完畢瀏覽器會對壓縮的內容進行解壓縮,一般我們會對文本內容進行壓縮:html,js,css,xml,txt。

expires的意思就是,將圖片等一些靜態不會經常變化的資源在用戶第一訪問的時候就會加載到用戶瀏覽器的緩存中,當然用戶清理瀏覽器垃圾,就要重新緩存了,不管怎麼說這也節省了帶寬也提高了用戶體驗。這也是普遍採取的一種技術。

如果是靜態加載就不用加載模塊了,如果是動態加載就要:

vi /application/apache/conf/httpd.conf

LoadModule deflate_module modules/mod_deflate.so  #前面的#去掉

LoadModule expires_module modules/mod_expires.so  #前面的#去掉

#在結尾加上下面兩段話

<IfModule mod_deflate.c>
DeflateCompressionLevel 9 #壓縮等級1-9,9最高最費CPU,壓縮比最高,我們生存環境用的是7
AddOutputFilterByType DEFLATE text/html text/plain text/xml application/x-httpd-php
AddOutputFilter DEFLATE css js
</ifmodule>

<IfModule mod_expires.c>
ExpiresActive On
ExpiresDefault "access plus 12 month"
ExpiresByType text/html "access plus 12 months"
ExpiresByType text/css "access plus 12 months"
ExpiresByType image/gif "access plus 12 months"
ExpiresByType image/jpeg "access plus 12 months"
ExpiresByType image/jpg "access plus 12 months"
ExpiresByType image/png "access plus 12 months"
EXpiresByType application/x-shockwave-flash "access plus 12 months"
EXpiresByType application/x-javascript "access plus 12 months"
ExpiresByType video/x-flv "access plus 12 months"
</IfModule>

#下面我們看下效果,看下一個html文件的壓縮效果呢和一個圖片的緩存效果



#一個30多M的文件傳輸至用了3.9M,緩存時間2016年也生效了,這樣既節省了帶寬也降低了服務器的壓力。

至此,關於apache的優化就先介紹到這裏吧。

三、 PHP的優化單開一個博文吧。

原創博文來自:www.51niux.com  博主:忙碌的柴少


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章