apache配置文件詳解與優化


apache配置文件詳解與優化

一、總結

一句話總結:結合apache配置文件中的英文說明和配置詳解一起看

 

1、apache模塊配置用的什么標簽?

IfModule

例如:

<IfModule dir_module>
DirectoryIndex index.html 索引文件 首頁文件(首頁文件可以有多個,可以用空格匹配多個,)
</IfModule>

 

2、apache的目錄配置用什么標簽?

Directory

例如:

<Directory /> 根目錄(以下是對根目錄的限制)
Options FollowSymLinks FollowSymLinks表示允許符號鏈接,沒加選項表示禁止,如不允許目錄瀏覽等
AllowOverride None 表示禁止用戶對目錄配置文件(.htaccess進行修改)重載,普通站點目錄此項建議不開啟
Order deny,allow 允許未被明確拒絕的 (從后往前讀)
Deny from all 拒絕所有訪問
</Directory>

 

3、apache虛擬主機配置文件 (httpd-vhosts.conf)?

VirtualHost
虛擬主機配置文件 (httpd-vhosts.conf)
egrep -v "^.*#|^$" httpd-vhosts.conf
NameVirtualHost *:80 表示基於名稱的虛擬主機配置,*表示監聽本機的所有IP地址,可以更改為具體的IP地址
<VirtualHost *:80> 定義一個虛擬主機,* 表示監聽本機的所有IP地址,可以更改為具體的IP地址
ServerAdmin webmaster@dummy-host.example.com 配置管理員的郵箱
DocumentRoot "/applications/apache2.2.31/docs/dummy-host.example.com" 提供服務的程序 目錄也成站點目錄,如果不配置,則去主配置文件中尋找
ServerName dummy-host.example.com 提供服務的 域名,測試需要在本 機做hosts解析
ServerAlias www.dummy-host.example.com 虛擬主機的 別名,也就是配置多個域名訪問同一個站點,此功能需要apache mod_alias模塊的支持
ErrorLog "logs/dummy-host.example.com-error_log" 配置 錯誤日志的路徑
CustomLog "logs/dummy-host.example.com-access_log" common 配置訪問日志,一般用combined格式代替common格式,以獲得更多的格式輸出
</VirtualHost> 虛擬主機的結尾

 

4、apache配置擴展文件目錄?

httpd
apache 擴展配置文件(Include 調用文件)在 /appacation/apache/conf/extra 下,不開啟就是默認配置。
extra/
├── httpd-autoindex.conf
├── httpd-dav.conf dav 支持配置
├── httpd-default.conf 配置的是apache的相關服務參數,如超時時間,保持連接時間等
├── httpd-info.conf
├── httpd-languages.conf 語言支持模式
├── httpd-manual.conf
├── httpd-mpm.conf 服務器池管理,也就是優化apache的一個配置文件,選擇apache的模式以及配置連接數等,常用的模式有worker模式和profork模式,默 認情況是profork模式
├── httpd-multilang-errordoc.conf
├── httpd-ssl.conf 支持ssl加密的文件
├── httpd-userdir.conf
└── httpd-vhosts.conf 虛擬主機的配置文件

 

5、apache站點目錄配置?

Directory
<Directory "/applications/apache2.2.31/htdocs"> 站點目錄(以下為默認站點目錄的限制,如果讀者私自配置了站點目錄而沒有配置這里就會出現 403錯誤
Options Indexes FollowSymLinks FollowSymLinks表示 允許符號鏈接indexes表示允許目錄瀏覽,如允許目錄瀏覽,允許符號鏈接
這里很危險, 應禁止目錄瀏覽 應更改為 Options FollowSymLinks或Options -Indexes FollowSymLinks
AllowOverride None 表示禁止用戶對目錄配置文件(.htaccess進行修改)重載 盡量不開啟.htaccess 安全隱患大,規則多了網站訪問性能低
Order allow,deny 拒絕未被明確允許的 (從后往前讀)
Allow from all 所有人都能訪問
</Directory>

 

6、錯誤頁面優雅顯示

主配置文件 ErrorDocument

支持url、文件和腳本的形式。 配置方法 在主配置文件 寫入 ErrorDocument 404 /http://www/51cto.com 或者 ErrorDocument 404 /missing.html

 

7、修改apache的並發量等設置(默認apahce的並發量是150)?

httpd-mpm
修改httpd.conf 打開Include conf/extra/httpd-mpm.conf 模塊
 
Apachef服務為worker模式的配置 vim /conf/extra/httpd-mpm.conf
<IfModule mpm_worker_module>
StartServers 5
MaxClients 2000
ServerLimit 25
MinSpareThreads 50
MaxSpareThreads 200
ThreadLimit 200
ThreadsPerChild 100
MaxRequestsPerchild 0
</IfModule>
注:
MaxClients <= ServerLimit * ThreadsPerChild
 
Apache服務為prefork模式的配置
生產環境配置文件 httpd-default.conf並發連接數配置
 
vim conf/extra/httpd-mpm.conf
StartServers 10
MinSpareServers 10
maxSpareServers 15
ServerLimit 2000
MaxClients 2000
MaxRequestsPerChild 10000
 
 
修改完並發數后,要 stop apache 再start apache ,restart和graceful是不管用的 可能是bug

 

worker模式 提升並發數(可以達到4500,網友測試結果)

編譯安裝時,使用worker模式

 

8、mod_expires 緩存功能?

訪問速度 帶寬成本
通過設置expires header 來緩存如:圖片,腳本,css,flash等,expires其實就是通過header報文來指定特定類型的文件在瀏覽器中的緩存時間,大多數的圖片,flash在發布后都是不需要經常修改的, 做了緩存以后這樣瀏覽器就不會再從服務器下載這些文件而是直接從緩存中讀取
優點:
1,加大訪問頁面的速度 2,提升用戶體驗 3,節約網站帶寬成本 4,節約網站服務器及維護成本
 
 
 
<ifmodule mod_expires.c>
ExpiresActive on
ExpiresDefault "access plus 12 month"
ExpiresByType test/html "access plus 12 months"
ExpiresByType test/scc "access plus 12 months"
ExpiresByType image/gif "access plus 12 months"
ExpiresByType image/jpeg "access plus12 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>
 
expires失效條件:用戶主動刪除和內容緩存期已到
 
如果網站更新功能或者更新文件,用戶訪問時的內容還是舊的
1.一般將經常變化的設置時間短 如1-30天
2.在更新文件上采取策略,如更新后使用新的文件名發布,這樣對用戶又是新的資源了

 

9、避免使用.htaccess文件?

性能
安全
首先是性能的考慮,如果AllowOverride啟用了.htaccess文件,則Apache需要在每個目錄中查找.htaccess文件,另外,對每一個請求,都需要讀取一次.htaccess文件因此會導致性能的下降。
其次是安全,這樣會允許用戶 自己修改服務器的配置,這可能導致某些意想不到的修改,所以請認真考慮是否應當給予用戶這樣的特權
 
AccessFileName .htaccess
建議設置成:
#AccessFileName .htaccess
全部目錄權限定義使用httpd.conf中的定義,不使用.htaccess.

 

10、apache程序架構優化?

功能分離
1.程序頁面服務器和 圖片附件服務器、上傳服務器 三者的功能盡量分離
2.分離最佳的方式是分別使用獨立的服務器(需要程序的支持)
3.次選方案是在前端負載均衡器通過haproxy/nginx 根據目錄或者擴展名,請求后面的對應服務器

 

 

11、apache的防盜鏈功能?

防盜鏈
自己所有的圖片,不允許嵌套在別人的網頁里面

 

12、apache目錄文件權限的設置 (屬組root ,目錄755,文件644)?

chmod
在網站架構中,應該把資源文件,包括用戶上傳的圖片,附件等和程序分離,最好把上傳的程序也分離,這樣就可以從容的授權了。
一般的公司授權:
chmod -R 777 /sitedir
chown -R apache.apache /sitedir 都不安全

 

13、屏蔽apache版本等敏感信息?

減少攻擊 httpd-default.conf
客戶訪問時不知道用的是什么版本的服務器,減少攻擊
修改httpd-default.conf文件,ServerSignature off 和ServerTokens Prod
之后 apachectl graceful 使之生效
但還是會出現server=Apache 字樣,如果想全部屏蔽,則需要從新編譯

 

 

二、apache配置文件詳解和優化

1、apache配置文件詳解

[root@localhost conf]# egrep -v "^.*#|^$" httpd.conf
ServerRoot "/applications/apache2.2.31" apache的根目錄(安裝目錄),應該只能root登錄,不需更改此配置
 
#listen 12.34.56.78:80 監聽指定IP和端口
Listen 80 監聽的端口 如果同時監控81端口,可以在下面增加一行,如:listen 81
 
#Dynamic Shared Object (DSO) Support 動態共享對象支持 DSO編譯模塊
 
<IfModule !mpm_netware_module> 專用的用戶和組來運行httpd,即apache在運行時以此用戶的身份啟動服務和讀取文件
<IfModule !mpm_winnt_module>
User daemon apache的用戶,默認為daemon,建議修改下 如:oldboy
Group daemon apache的用戶組,默認為daemon,建議修改下 如:oldboy
 
ServerAdmin you@example.com 服務管理員郵箱地址,出問題時發送郵件到這個郵箱
#ServerName www.example.com:80 初啟動時報的錯就是因為這里,更改這里就不會報錯 通常配置成127.0.0.1
 
DocumentRoot "/applications/apache2.2.31/htdocs" apache默認的站點目錄,路徑結尾不要添加斜線
 
<Directory /> 根目錄(以下是對根目錄的限制)
Options FollowSymLinks FollowSymLinks表示允許符號鏈接,沒加選項表示禁止,如不允許目錄瀏覽等
AllowOverride None 表示禁止用戶對目錄配置文件(.htaccess進行修改)重載,普通站點目錄此項建議不開啟
Order deny,allow 允許未被明確拒絕的 (從后往前讀)
Deny from all 拒絕所有訪問
</Directory>
 
<Directory "/applications/apache2.2.31/htdocs"> 站點目錄(以下為默認站點目錄的限制,如果讀者私自配置了站點目錄而沒有配置這里就會出現 403錯誤)
Options Indexes FollowSymLinks FollowSymLinks表示允許符號鏈接,indexes表示允許目錄瀏覽,如允許目錄瀏覽,允許符號鏈接
這里很危險,應禁止目錄瀏覽 應更改為 Options FollowSymLinks或Options -Indexes FollowSymLinks
AllowOverride None 表示禁止用戶對目錄配置文件(.htaccess進行修改)重載 盡量不開啟.htaccess 安全隱患大,規則多了網站訪問性能低
Order allow,deny 拒絕未被明確允許的 (從后往前讀)
Allow from all 所有人都能訪問
</Directory>
 
<IfModule dir_module>
DirectoryIndex index.html 索引文件 首頁文件(首頁文件可以有多個,可以用空格匹配多個,)
</IfModule>
 
<FilesMatch "^\.ht"> 阻止.htaccess 和 .htpasswd等重要文件被web用戶查看
Order allow,deny
Deny from all
Satisfy All
</FilesMatch>
 
ErrorLog "logs/error_log" 錯誤日志路徑
 
LogLevel warn 日志的級別 警告
<IfModule log_config_module>
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined 日志的格式
LogFormat "%h %l %u %t \"%r\" %>s %b" common 普通訪問日志格式
<IfModule logio_module>
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %I %O" combinedio
</IfModule>
 
默認站點訪問日志配置
CustomLog "logs/access_log" common 訪問日志路徑 common
#CustomLog "logs/access_log" combined 訪問日志路徑 combined (復合日志)
</IfModule>
 
以下為cgi的配置,沒有特殊需求應考慮全部注釋或者刪掉
<IfModule alias_module>
ScriptAlias /cgi-bin/ "/applications/apache2.2.31/cgi-bin/" cgi的別名 基本不用了(可以刪除和注釋掉)
</IfModule>
<IfModule cgid_module>
</IfModule>
<Directory "/applications/apache2.2.31/cgi-bin"> cgi目錄 基本不用了(可以刪除和注釋掉)
AllowOverride None
Options None
Order allow,deny
Allow from all
</Directory>
 
DefaultType text/plain DefaultType:定義當不能確定MIME類型時服務器提供的默認MIME類型(默認不更改)
如果你的服務器主要包含text 或者HTML文檔,“text/plain” 是一個好的選擇
 
<IfModule mime_module> 允許傳送時使用以下幾種壓縮方式
TypesConfig conf/mime.types
AddType application/x-compress .Z
AddType application/x-gzip .gz .tgz
</IfModule>
 
 
# Some examples: 出現不同的錯誤跳轉的指定頁面
#ErrorDocument 500 "The server made a boo boo."
#ErrorDocument 404 /missing.html
#ErrorDocument 404 "/cgi-bin/missing_handler.pl"
#ErrorDocument 402 http://www.example.com/subscription_info.html
 
以下是開啟一些包含文件的配置
# Server-pool management (MPM specific)
#Include conf/extra/httpd-mpm.conf
 
# Multi-language error messages
#Include conf/extra/httpd-multilang-errordoc.conf
 
# Fancy directory listings
#Include conf/extra/httpd-autoindex.conf
 
# Language settings
#Include conf/extra/httpd-languages.conf
 
# User home directories
#Include conf/extra/httpd-userdir.conf
 
# Real-time info on requests and configuration
#Include conf/extra/httpd-info.conf
 
# Virtual hosts
#Include conf/extra/httpd-vhosts.conf (開啟虛擬主機的配置)
 
# Local access to the Apache HTTP Server Manual
#Include conf/extra/httpd-manual.conf
 
# Distributed authoring and versioning (WebDAV)
#Include conf/extra/httpd-dav.conf
 
 
<IfModule ssl_module>
SSLRandomSeed startup builtin
SSLRandomSeed connect builtin
</IfModule>
 
 
apache 擴展配置文件(Include 調用文件)在 /appacation/apache/conf/extra 下,不開啟就是默認配置。
extra/
├── httpd-autoindex.conf
├── httpd-dav.conf dav支持配置
├── httpd-default.conf 配置的是apache的相關服務參數,如超時時間,保持連接時間等
├── httpd-info.conf
├── httpd-languages.conf 語言支持模式
├── httpd-manual.conf
├── httpd-mpm.conf 服務器池管理,也就是優化apache的一個配置文件,選擇apache的模式以及配置連接數等,常用的模式有worker模式和profork模式,默 認情況是profork模式
├── httpd-multilang-errordoc.conf
├── httpd-ssl.conf 支持ssl加密的文件
├── httpd-userdir.conf
└── httpd-vhosts.conf 虛擬主機的配置文件
 
 
虛擬主機配置文件 (httpd-vhosts.conf)
egrep -v "^.*#|^$" httpd-vhosts.conf
NameVirtualHost *:80 表示基於名稱的虛擬主機配置,*表示監聽本機的所有IP地址,可以更改為具體的IP地址
<VirtualHost *:80> 定義一個虛擬主機,*表示監聽本機的所有IP地址,可以更改為具體的IP地址
ServerAdmin webmaster@dummy-host.example.com 配置管理員的郵箱
DocumentRoot "/applications/apache2.2.31/docs/dummy-host.example.com" 提供服務的程序目錄,也成站點目錄,如果不配置,則去主配置文件中尋找
ServerName dummy-host.example.com 提供服務的域名,測試需要在本機做hosts解析
ServerAlias www.dummy-host.example.com 虛擬主機的別名,也就是配置多個域名訪問同一個站點,此功能需要apache mod_alias模塊的支持
ErrorLog "logs/dummy-host.example.com-error_log" 配置錯誤日志的路徑
CustomLog "logs/dummy-host.example.com-access_log" common 配置訪問日志,一般用combined格式代替common格式,以獲得更多的格式輸出
</VirtualHost> 虛擬主機的結尾
 
 
 

2、apache優化

一、 日志輪詢
1.使用cronolog進行日志輪詢.之所以不使用系統自帶的rotatelogs,是因為切割日志時丟失日志。
2.使用復合日志(combined),顯示會多一些。
3.配置cronolog日志輪詢時,要寫全路徑,如 Customlog“|/usr/local/sbin/cronolog /application/apache/logs/access_www_%Y%m%d.log” combined
 
二。 錯誤頁面優雅顯示
支持url、文件和腳本的形式。 配置方法 在主配置文件 寫入 ErrorDocument 404 /http://www/51cto.com 或者 ErrorDocument 404 /missing.html
 
三、 mod_deflate 文件壓縮功能(壓縮發送給客戶端的內容)
以DSO方式安裝 /application/apache/bin/apxs -i -c -a mod_deflate.c
把文件先在服務器端進行壓縮,然后再傳輸,在客戶端再進行解壓。沒特殊情況,所有文本內容都應該是gzip壓縮。
把以下內容放在虛擬主機當中,就實現的壓縮功能:
<ifmodule mod_defalte.c>
DeflateCompressionlevel 9 #壓縮等級,等級也大,壓縮比例越高,相反耗CPU也高
SetOutputFilter DEFLATE #啟用壓縮
#DeflateFilterNote Input instream #在日志中放置壓縮率標記
#DeflateFilterNore Output outstream #在日志中放置壓縮率標記
AddOutputFilterByType DEFLATE text/html text/plain text/xml #以下三行設置壓縮的類型
AddOutputFilterByType DEFLATE application/javascript
AddOutputFilterByType DEFLATE text/css
#DeflateFilterNote Ratio ratio #在日志中放置壓縮率標記,下面是記錄日志的,這個功能一般不用,所以注釋掉了
#LogFormat '"%r" %{outsream}n/%{instream}n (%{ratio}n%%)' deflate
#Customlog logs/deflate_log.log deflate
</ifmodule>
使用curl命令,頭部信息會出現一行Vary: Accept-Encoding 表示已經壓縮
 
四、 mod_expires 緩存功能
通過設置expires header 來緩存如:圖片,腳本,css,flash等,expires其實就是通過header報文來指定特定類型的文件在瀏覽器中的緩存時間,大多數的圖片,flash在發布后都是不需要經常修改的,做了緩存以后這樣瀏覽器就不會再從服務器下載這些文件而是直接從緩存中讀取
優點:
1,加大訪問頁面的速度 2,提升用戶體驗 3,節約網站帶寬成本 4,節約網站服務器及維護成本
 
 
 
<ifmodule mod_expires.c>
ExpiresActive on
ExpiresDefault "access plus 12 month"
ExpiresByType test/html "access plus 12 months"
ExpiresByType test/scc "access plus 12 months"
ExpiresByType image/gif "access plus 12 months"
ExpiresByType image/jpeg "access plus12 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>
 
expires失效條件:用戶主動刪除和內容緩存期已到
 
如果網站更新功能或者更新文件,用戶訪問時的內容還是舊的
1.一般將經常變化的設置時間短 如1-30天
2.在更新文件上采取策略,如更新后使用新的文件名發布,這樣對用戶又是新的資源了
 
 
五、 更改apache的默認用戶
編譯安裝apache的用戶是daemon
yum安裝apache的用戶的apache
盡可能的將用戶改名,最好用大家都不知道用戶名
 
 
六、 worker模式 提升並發數(可以達到4500,網友測試結果)
編譯安裝時,使用worker模式
 
 
七、 屏蔽apache版本等敏感信息
客戶訪問時不知道用的是 什么版本的服務器,減少攻擊
修改httpd-default.conf文件,ServerSignature off 和ServerTokens Prod
之后 apachectl graceful 使之生效
但還是會出現server=Apache 字樣,如果想全部屏蔽,則需要從新編譯
 
 
八、 apache目錄文件權限的設置 (屬組root ,目錄755,文件644)
在網站架構中,應該把資源文件,包括用戶上傳的圖片,附件等和程序分離,最好把上傳的程序也分離,這樣就可以從容的授權了。
一般的公司授權:
chmod -R 777 /sitedir
chown -R apache.apache /sitedir 都不安全
 
 
九、 修改apache的並發量等設置(默認apahce的並發量是150)
修改httpd.conf 打開Include conf/extra/httpd-mpm.conf 模塊
 
Apachef服務為worker模式的配置 vim /conf/extra/httpd-mpm.conf
<IfModule mpm_worker_module>
StartServers 5
MaxClients 2000
ServerLimit 25
MinSpareThreads 50
MaxSpareThreads 200
ThreadLimit 200
ThreadsPerChild 100
MaxRequestsPerchild 0
</IfModule>
注:
MaxClients <= ServerLimit * ThreadsPerChild
 
Apache服務為prefork模式的配置
生產環境配置文件 httpd-default.conf並發連接數配置
 
vim conf/extra/httpd-mpm.conf
StartServers 10
MinSpareServers 10
maxSpareServers 15
ServerLimit 2000
MaxClients 2000
MaxRequestsPerChild 10000
 
 
修改完並發數后,要 stop apache 再start apache ,restart和graceful是不管用的 可能是bug
 
 
十、 apache的防盜鏈功能
自己所有的圖片,不允許嵌套在別人的網頁里面
 
 
十一、 禁止目錄Indexes
刪除Indexes 或者Indexes前加-
 
 
十二、禁止用戶重載
AllowOverride Nore
 
 
十三、關閉CGI
刪除或者關閉CGI
 
 
十四、避免使用. htaccess文件
首先是性能的考慮,如果AllowOverride啟用了.htaccess文件,則Apache需要在每個目錄中查找.htaccess文件,另外,對每一個請求,都需要讀取一次.htaccess文件因此會導致性能的下降。
其次是安全,這樣會允許用戶 自己修改服務器的配置,這可能導致某些意想不到的修改,所以請認真考慮是否應當給予用戶這樣的特權
 
AccessFileName .htaccess
建議設置成:
#AccessFileName .htaccess
全部目錄權限定義使用httpd.conf中的定義,不使用.htaccess.
 
 
十七、apache日志授予root 700權限
 
 
十八、內核優化 系統優化
 
 
十九、 apache程序架構優化
1.程序頁面服務器和 圖片附件服務器、上傳服務器 三者的功能盡量分離
2.分離最佳的方式是分別使用獨立的服務器(需要程序的支持)
3.次選方案是在前端負載均衡器通過haproxy/nginx 根據目錄或者擴展名,請求后面的對應服務器
 
 
 

參考:apache配置文件詳解和優化 - zypzilong的博客 - CSDN博客
https://blog.csdn.net/zypzilong/article/details/77765429

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM