文檔:http://httpd.apache.org/docs/2.4/
指令:http://httpd.apache.org/docs/2.4/mod/core.html
一、配置文件
語法
* 主配置文件httpd.conf,更改只有重啟服務才會生效
* 配置中一行一個命令,如果要多行一個命令,則最后以\結束,且與該行最后個字符無其它字符或者空白
* 每行注釋以#開頭,會被忽略,一行命令符后不能再接注釋
* 空行空白字符在配置文件中被忽略
* 配置文件錯誤檢測可以通過 Test Configuration來完成(httpd.exe -w -t -f "D:\Software\GreenSoft\Apache\conf\httpd.conf" -d "D:\Software\GreenSoft\Apache\.")
模塊
Related Modules Related Directives
--------------------------------------------
mod_so <IfModule>
LoadModule
* httpd基于模塊化,編譯配置時,默認會把基本的功能模塊加載到服務器內核。
* 對于動態加載的模塊可以通過LoadModule指令在任何時候完成。
* <IfModule>可用于條件加載
* Dos命令 httpd.exe -l 可以查看已經加載的模塊
* httpd.exe支持的參數指令
-D name : define a name for use in <IfDefine name> directives
-d directory : specify an alternate initial ServerRoot
-f file : specify an alternate ServerConfigFile
-C "directive" : process directive before reading config files
-c "directive" : process directive after reading config files
-n name : set service name and use its ServerConfigFile
-k start : tell Apache to start
-k restart : tell running Apache to do a graceful restart
-k stop|shutdown : tell running Apache to shutdown
-k install : install an Apache service
-k config : change startup Options of an Apache service
-k uninstall : uninstall an Apache service
-w : hold open the console window on error
-e level : show startup errors of level (see LogLevel)
-E file : log startup errors to file
-v : show version number
-V : show compile settings
-h : list available command line options (this page)
-l : list compiled in modules
-L : list available configuration directives
-t -D DUMP_VHOSTS : show parsed settings (currently only vhost settings)
-S : a synonym for -t -D DUMP_VHOSTS
-t -D DUMP_MODULES : show all loaded modules
-M : a synonym for -t -D DUMP_MODULES
-t : run syntax check for config files
-T : start without DocumentRoot(s) check
指令作用范圍
Related Modules Related Directives
-----------------------------------------
<Directory>
<DirectoryMatch>
<Files>
<FilesMatch>
<Location>
<LocationMatch>
<VirtualHost>
* 指令范圍標簽可以指定指令生效的范圍,其可以嵌套
* 可以通過在<VirtualHost>標簽中放置多個指令以同時支持多個虛擬主機站點
* 節點配置參見:http://httpd.apache.org/docs/2.4/sections.html
.htaccess文件
* httpd通過在站點目錄里面放置.htaccess文件允許配置分散
* .htaccess的語法與主配置文件一致,對于該配置文件的變更只要請求過來會立即生效
* 可以在.htaccess中放置的指令見:http://httpd.apache.org/docs/2.4/mod/directive-dict.html#Context
* 如果有權限配置主配置,則應避免使用.htaccess文件方式來配置,這種方式影響服務器性能
1)配置.htaccess文件后,httpd會查找每個目錄的.htaccess文件,不管你實際有沒有使用
2)文檔被請求的時候,.htaccess文件每次都會被加載
3)httpd會在多層目錄中查找.htaccess文件,以應用完整的指令。
4).htaccess中地址重寫指令中的正則表達式在每次請求的時候重新編譯。
5)安全問題,用戶在修改.htaccess使管理員對配置的管理失控。只有設置AllowOverride指令才可以使用戶使用指定的指令。
* 在.htaccess中配置指令與在主配置中配置Dirctory塊可以達到相同效果,但是后者有更好的性能。
Contents of .htaccess file in /www/htdocs/example
AddType text/example .exm
等價于:
Section from your httpd.conf file
<Directory /www/htdocs/example>
AddType text/example .exm
</Directory>
* 禁用.htaccess可以用指令 AllowOverride None
二、Apache目錄結構
根目錄
|-- bin 程序命令目錄
|-- build
|-- cgi-bin
|-- conf 配置文件目錄
|-- error
|-- htdocs 編譯安裝時站點目錄
|-- icons
|-- include
|-- lib
|-- logs 默認日志文件存放包括錯誤日志(error_log)和訪問日志(access_log) tail -f access_log可以隨時看訪問記錄, 里面httpd.pid還會記錄主進程號
|-- man
|-- manual
|-- modules 模塊目錄 例如PHP MEMCACHE編譯后的模塊在這里面
Bin目錄
|-- ab apache http服務器性能壓力測試工具,類似的jmeter loadrunner webbench
|-- apachectl apache的啟動命令
|-- apr-1-config
|-- apu-1-config
|-- apxs apache服務器編譯和安裝擴展的工具,在進行DSO方式模塊編譯時會用到例如編譯PHP時就用到:--with-apxs2=/usr/local/apache/bin/apxs
|-- checkgid
|-- dbmmanage
|-- envvars
|-- envvars-std
|-- htcacheclean 清理磁盤緩存區的命令,一般少用
|-- htdbm
|-- htdigest
|-- htpasswd 建立更新基本認證文件 例如配置nagio監控時候會用到
|-- httpd 為apache的控制命令程序,apachectl執行的時候會調用到httpd
|-- httxt2dbm
|-- logresolve
Conf目錄
|-- extra 輔助apache配置文件
| |-- httpd-autoindex.conf
| |-- httpd-dav.conf dav支持配置
| |-- httpd-default.conf apache相關服務配置 如超時時間 保持連接時間
| |-- httpd-info.conf
| |-- httpd-languages.conf 語言支持
| |-- httpd-manual.conf
| |-- httpd-mpm.conf 服務器池管理,如apache模式配置 連接等
| |-- httpd-multilang-errordoc.conf
| |-- httpd-ssl.conf 支持SSL加密配置
| |-- httpd-userdir.conf
| |-- httpd-vhosts.conf 虛擬機配置文件
|-- httpd.conf 主配置文件
|-- magic
|-- mime.types
|-- original
三、httpd.conf主配置文件常見配置
ServerRoot "/usr/local/apache2.2.22" apache安裝目錄
Listen 80 apache端口
<IfModule !mpm_netware_module>
<IfModule !mpm_winnt_module>
User daemon apache運行用戶
Group daemon apache運行組
</IfModule>
</IfModule>
ServerAdmin you@example.com 管理員郵箱
DocumentRoot "/usr/local/apache2.2.22/htdocs" 站點目錄,注意最后不要加/線
<Directory /> 根目錄權限
Options FollowSymLinks 可以使用符號鏈接
AllowOverride None
Order deny,allow
Deny from all
</Directory>
<Directory "/usr/local/apache2.2.22/htdocs"> 目錄權限 注意Indexes的作用是允許瀏覽目錄
Options Indexes FollowSymLinks
AllowOverride None 禁止用戶對目錄配置文件.htaccess修改,一般為none
Order allow,deny
Allow from all
</Directory>
<IfModule dir_module>
DirectoryIndex index.html 站點目錄首頁文件多個文件用空格隔開
</IfModule>
<FilesMatch "^\.ht"> 防止WEB用戶查看以.ht開頭的隱藏文件
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 默認訪問日志格式
</IfModule>
<IfModule alias_module>
ScriptAlias /cgi-bin/ "/usr/local/apache2.2.22/cgi-bin/" CGI別名配置
</IfModule>
<IfModule cgid_module>
</IfModule>
<Directory "/usr/local/apache2.2.22/cgi-bin"> CGI權限訪問路徑
AllowOverride None
Options None
Order allow,deny
Allow from all
</Directory>
DefaultType text/plain 定義不能確定MIME類型時候使用默認MIME類型,如果服務主要包含text或HTML ,text/plain是一個好選擇
<IfModule mime_module>
TypesConfig conf/mime.types
AddType application/x-compress .Z 允許信息在傳輸中使用mosaic/x 2.1+解壓信息 但不是所有瀏覽器都支持
AddType application/x-gzip .gz .tgz
</IfModule>
<IfModule ssl_module>
SSLRandomSeed startup builtin
SSLRandomSeed connect builtin
</IfModule>
四、虛擬主機http_vhost.conf配置文件
NameVirtuaHost *:80 表示基于名稱的虛擬主機 *:80表示監聽本機所有IP的80端口上提供HTTP服務,*可以設置為具體IP
<VirtualHost *:80>
serveradmin 管理員郵箱
servername 域名
serveralias 別名 可以設置多個域名指向同一個站點
errorlog 錯誤日志
customlog 訪問日志
</VirtualHost>
虛擬主機的配置是局部優先原則,也就是http_vhost.conf配置了,那么就不會從主配置文件http.conf中讀取了
五、修改Apache默認站點目錄
1、文檔路徑更改
DocumentRoot "D:/Software/GreenSoft/Apache/htdocs"
改成
DocumentRoot "E:/wwwroot/Apache"
2、目錄更改
<Directory "D:/Software/GreenSoft/Apache/htdocs">
改成
<Directory "E:/wwwroot/Apache">
六、配置多站點方式
方式一 拷貝配置文件,安裝新服務
1、將httpd.conf復制一個新的文件httpdNew.conf
2、將httpdNew.conf中的偵聽端口改成未使用的自定義的端口。 Listen:8111
3、將httpdNew.conf中的網站目錄 DocumentRoot "原絕對路徑" 改成 DocumentRoot "新絕對路徑"
4、將httpdNew.conf中的權限設置 <Directory "原絕對路徑" > 改成 <Directory "新絕對路徑" >
5、安裝新服務。Dos下進到Apache安裝目錄下的Bin目錄,輸入命令 httpd.exe -k install -n "服務名" -f "X:\Apache安裝目錄根目錄\conf\httpdNew.conf"
6、啟動新服務。輸入命令 httpd -k start
方式二 添加新端口,新虛擬目錄的方式
1、httpd.conf在之前偵聽端口的基礎上,加上新偵聽端口 Listen 8333.這樣Apache有多個偵聽端口
2、httpd.conf中加入虛擬主機支持。加入指令:NameVirtualHost *
3、找到<VirtualHost> definition注釋所在位置。加入指令:
<VirtualHost localhost:8333>
ServerName localhost
DocumentRoot "虛擬站點新絕對路徑"
</VirtualHost>
方式三 建立虛擬主機方式
1、修改虛擬主機配置文件 X:\Apache安裝目錄根目錄\conf\extra\httpd-vhosts.conf文件.加入配置:
<VirtualHost 127.0.1.1:8222>
DocumentRoot "虛擬站點新絕對路徑"
ServerName url.com
ErrorLog "虛擬站點新絕對路徑/error.log"
</VirtualHost>
2、修改主配置文件X:\Apache安裝目錄根目錄\conf\httpd.conf。去掉#Include conf/extra/httpd-vhosts.conf前面的#號
3、修改主配置文件X:\Apache安裝目錄根目錄\conf\httpd.conf。加目錄權限:
<Directory "虛擬站點新絕對路徑">
Options Indexes FollowSymLinks MultiViews ExecCGI
AllowOverride All
Order allow,deny
Allow from all
</Directory>
4、重啟對應的Apache服務
七、配置Apache支持Url重寫
1、加載重寫模塊。httpd.conf中找到#LoadModule rewrite_module modules/mod_rewrite.so,去掉#號
2、httpd.conf中找到AllowOverride None,改成 AllowOverride All (All表示整臺服務器上都支持URL規則重寫)
3、httpd.conf加入
<Directory "站點絕對路徑">
Options FollowSymLinks
AllowOverride All
</Directory>
4、重啟Apache服務器并啟動服務
5、在URL重寫的網站目錄下放一個.htaccess文件,文件名是.htaccess。如無此文件或此文件中沒定義任何關于URL重寫的規則,則重寫不會生效。
6、在.htaccess中通過正則表達式映射需要偽靜態的頁面。URL正則表達式如下:
RewriteEngine on
RewriteRule index.html index.php
RewriteRule (\d+).htmlinfo\.php\?infoid=1
效果為:www.abc.cn/info/info.php?infoid=100 映射為 www.abc.cn/info/100.html
可用于以下用途:
1、http錯誤的自定義頁。格式 ErrorDocument 錯誤代碼 /目錄名/名.擴展名
ErrorDocument 404 /errors/notfound.html
ErrorDocument 401 "你權限訪問該頁面!"
2、拒絕某IP的訪問
order allow,deny
deny from 210.10.56.32
deny from 219.5.45.
deny from www.baidu.com
allow from all
3、保護.htaccess文檔
4、Url轉向(文檔遷移,目錄更改,顯示友好易記的url)。格式:
Redirect /舊目錄/舊文檔名 新文檔名
Redirect 舊目錄 新目錄
5、更改默認主頁
DirectoryIndex 新的缺省名
DirectoryIndex filename.html index.cgi index.pl default.htm
6、反盜鏈
RewriteEngine on
RewriteCond %{ HTTP_REFERER } !^RewriteCond [NC]
RewriteRule .(gif&line;jpg)- [F] RewriteRule .(gif&line;jpg) http://www.mydomain.com/替代名 [R,L]
八、配置反盜鏈
1、參見 配置Apache支持Url重寫 節,配置Apache支持url重寫
2、在站點的.htaccess文件中加入
RewriteEngine on
#允許空“HTTP_REFERER”的訪問
RewriteCond %{HTTP_REFERER} !^[NC]RewriteCond http://nobing.cn/no.png [R,NC,L]
說明:
R 就是轉向的意思
NC 指的是不區分大小寫
L 的作用是指明本次轉向到此結束,后續的轉向不受先前判斷語句的影響
多個擴展名用|分隔
九、配置緩存
LoadModule cache_module modules/mod_cache.so
LoadModule mem_cache_module modules/mod_mem_cache.so
<IfModule mod_cache.c>
#默認緩存有效期(秒)
CacheDefaultExpire 3600
CacheMaxExpire 86400
CacheLastModifiedFactor 0.1
#禁止緩存某些特定的URL
CacheDisable /local_files
#使用特定的存儲類型緩存某些特定的URL
CacheEnable mem /manual
CacheEnable fd /images
CacheEnable disk /
<IfModule mod_mem_cache.c>
CacheEnable mem /
MCacheSize 8192
MCacheMaxObjectCount 10000
MCacheMinObjectSize 1
MCacheMaxObjectSize 51200
#MCacheRemovalAlgorithm LRU
</IfModule>
</IfModule>