1. 程式人生 > >apache 2.2 配置參數詳解

apache 2.2 配置參數詳解

apache

安裝httpd

yum -y install httpd

服務腳本:/etc/rc.d/init.d/httpd

腳本配置文件:/etc/sysconfig/httpd

運行目錄:/etc/httpd

配置文件:

主配置文件:/etc/httpd/conf/httpd.conf

擴展配置:/etc/httpd/conf.d/*.conf

Socket:80/tcp,443/tcp

文檔根目錄:/var/www/html

CGI:/var/www/cgi-bin/



日誌滾動:

日誌切割

時間、空間


Docroot:文檔根目錄


配置文件:

/etc/httpd/conf/httpd.conf

配置參數 值

配置指令不區分字符大小寫

值有可能區分大小寫

有些指令可以重復出現多次


配置文件格式

全局配置

主機配置:用於僅提供一個站點時

虛擬主機配置:用於提供多個站點時


配置文件語法測試

serviice httpd configtest

httpd -t


絕大多數配置修改後,可以用過service httpd reload 來生效,如果修改了監聽的地址或端口,必須重啟服務才能生效


1.監聽套接字

Listen [IP:]port

此指令可以出現多次,用於指定監聽多個不同的套接字

Listen 80

Listen 172.16.100.7:8080

2.配置使用Keepalive

KeepAlive {On|Off}

KeepAliveTimeout 2 超時時間

MaxKeepAliveRequests 50 最大連接

3.MPM

多道處理模塊

httpd -l 查看編譯進內核的模塊

想使用不同的機制,修改配置文件即可 /etc/syconfig/httpd文件

 <IfModule preforck.c>判斷模塊是否存在

StartServers 8 默認啟動的工作進程數

MinSpareServers 5 最少空閑進程數

MaxSpareServers 20 最大空閑進程數

ServerLimit 256 最大活動進程數

MaxClients 256 最大並發連接數,最多允許發起的連接請求的個數

MaxRequestsPerChild 4000 每個子進程在生命周期內最大允許服務的最多請求個數

</IfModule>


<IfModule worker.c>

StartServers 4 啟動的子進程的個數

MaxClients 300 最大並發連接數,最多允許發起的連接請求的個數

MinSpareThreads 25 最少空閑線程數

MaxSpareThreads 75 最大空閑線程數

ThreadsPerChild 25 每個子進程生成的線程數

MaxRequestsPerChild 0 每個子進程在聲明周期內最大允許服務的最多請求個數

</IfModule>


4、DSO模塊的加載方式

LoadModule module_name /path/to/module

如果使用相對路徑,則對於ServerRoot所定義的位置而言

LoadMoudule php5_module /usr/lib64/httpd/modules/php.so

讓服務重載配置文件方能生效

httpd -m 列出與加載到所有DSO模塊與非DOS模塊

取消 註釋掉即可

5、配置站點根目錄

DocumentRoot /path/to/somewhere


6、頁面訪問屬性

<Direcotry "/path/to/somewhere">

Options 選項

Indexes:缺少指定的默認頁面時,允許將目錄中的所有文件已列表形式返回給用戶:危險:慎用

FollowsymLinks:允許跟隨符號鏈接所指向的原始文件

None:所有都不啟用

All:所有的都啟用

ExecCGI:允許使用mod_cgi模塊執行CGI腳本

Includes:允許使用mod_include模塊實現服務器端包含(SSI)

IncludesNOEXEC:允許包含但不允許執行腳本

MultiViews:允許使用mod_negotiation實現內容協商

SymLinksIfOwnerMatch:在鏈接文件屬主屬組與原始文件的屬主屬組相同時,允許跟隨符號連接所指向的原始文件

AllowOverride

</Direcotry>

可以使用正則表達式,使用~

7.基於主機的訪問控制

<Direcotry "/path/to/somewhere">

Options

AllowOverride

None 不禁用下面

order 次序,寫在後面的為默認

allow,deny: 沒有允許的都拒絕

deny,allow:沒有拒絕的都允許

Allow from

Deny from

</Direcotry>


如果都匹配或都不匹配時以默認為準

否則則以匹配到的為準

Allow from

Deny from

IP,Network Address

172.16

172.16.0.0

172.16.0.0/16

172.16.0.0/255.255.0.0

基於用戶做訪問控制


8.定義默認主頁面

DirectoryIndex 依次查找


9.用戶目錄

如果期望讓每個用戶都可以創建個人站點:http://Server_IP/~Username/

userdir disablied:禁止

userdir public_html:

public_html是用戶家目錄下的目錄名稱,所有位於此目錄中的文件均可通過前述的訪問路徑進行訪問

用戶的家目錄得賦予進行httpd進程的用戶擁有執行權限

setfacl -m u:apache:x ~Username


10、配置日誌功能

/var/log/http/

access.log:訪問日誌,其需要記錄的內容需要自定義

error.log

訪問日誌:

CustomLog "/path/to/log_file" LogFormat

LogFormat定義日誌格式

"%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\""

%h:客戶端地址

%l:遠程的登錄名,通常為-

%u:認證時的遠程用戶名,通常為-

%t:接收到的請求時的時間,為標準英文格式時間+時區

\" :轉義,顯示""

%r:請求報文的起始行

%>s:響應狀態碼,

%b:以字節響應報文的長度,不包含http報文

%{Header_Name}i:記錄指定請求報文首部的內容(value)

%u:請求的URL

詳情請參考:http://httpd.apache.org/docs/2.2/mod/mod_log_config.html#formats

錯誤日誌:

ErrorLog


11、路徑別名

Alias /alias/ "/path/to/somewhere"

意味著訪問http://Server_IP/alias時,其頁面文件來自於/path/to/somewhere中


12、指定默認的字符集

AddDefaultCharset

13.腳本路徑別名(CGI接口)

URL-->FileSystem Directory

CGI:Common Gateway Interface(通用網關接口)使WEB可以跟一個應用程序進行通信,從通信環境中獲得結果。

CGI是不安全的

在第一行寫入

echo “Content-Type:text/html:

mod_alias,mod_cgi

ScriptAlias /URL/ "/path/to/somewhere" somewhere下的文件可以被執行

也可以在目錄中實現


格式一般為

cat << EOF

Content-Type:text/html

<pre>

The time is : `date`.

</pre>

EOF


14.基於用戶的訪問控制

虛擬用戶:不是系統用戶,只是為了獲取某種資源類型的一種虛擬的用戶

文件/etc/httpd/conf/.htpasswd

SQL數據庫

dbm:

ldap:輕量級目錄訪問協議

認證類型(auth):

basic:基本認證,賬號和密碼明文發送

digest:摘要認證,hash編碼之後發送

認證提供者(authentication provider):賬號和密碼的存放位置

authn

授權機制(authorization):根據什麽進行授權

案例:基於文件,做基本認證根據用戶和組進行授權

1、編輯配置文件,為需要認證的目錄配置認證機制

<Directory "/www/htdocs/fin">A

options None

AllowOverride AuthConfig 使用認證配置

AuthType Basic 使用基本認證

AuthName "Private Area" 質詢時標題

AuthUserFile /etc/http/conf/.htpasswd 密碼的存放位置

Require vaild-user 可訪問的用戶


</Directory>

2、使用htpsswdm命令使用生成認證庫

htpasswd

-c 創建密碼,創建第一個用戶時使用

htpasswd -c -m /etc/http/conf/.htpasswd tom

-m MD5格式存放

-b 批量模式

-D 刪除用戶

3、基於組認證

<Directory "/www/htdocs/fin">

options None

AllowOverride AuthConfig 使用認證配置

AuthType Basic 使用基本認證

AuthName "Private Area" 質詢時標題

AuthgroupFile /etc/http/conf/.htpasswd 密碼的存放位置

Require group GroupName 可訪問的用戶


</Directory>

先創建用戶,在創建組

組文件:

組名:用戶1 用戶2 用戶3


15.虛擬主機

一個物理服務器提供多個站點;使用虛擬主機得先取消中心主機

基於不同的IP實現不同的虛擬主機

變化IP

基於不同的port實現不同的虛擬主機

變化port

基於不同主機名實現不同的虛擬主機

變化ServerName的值

通過請求報文中的HOST來實現不同的虛擬主機訪問

<VirtualHost IP:port>

SeverName

DocumentRoot ""

<Directory "">

</Directory>

ServerAlias

ServerAdmin

</VirtualHost>

將全局中的DocumentRoot""註釋掉


虛擬主機的單獨配置

用戶認證

訪問日誌

錯誤日誌

別名

腳本別名


基於IP認證機制,基於用戶認證


http協議認證、表單認證


16.https協議

x509.3證書格式

證書格式的版本號

證書序列號

證書簽名算法

證書頒發者

有效期

持有者的名稱

持有者的公鑰

CA的ID

持有者的ID

其他擴展信息

基本約束

證書策略

密鑰的使用限制

CA簽名

ssl握手要完成的工作

交換協議版本號

選擇一個雙方都支持的加密方式

對兩端實現身份驗證

密鑰交換

http:文本協議 80/tcp

https:二進制格式的協議 443/tcp


SSL會話基於IP地址進行:不支持在基於主機名的虛擬主機上實現


客戶端驗證服務器端證書時:

日期檢查:證書是否在有效期內

證書頒發者的可信度

證書的簽名檢測:

持有者的身份檢測



httpd:基於mod_ssl模塊實現對ssl的支持

可以在/etc/pki/tls/certs

openssl s_client

-connet:驗證的地址:端口

-CAfile:CA證書的路徑

1)、準備好服務器的私鑰和證書

2)、安裝mod_ssl模塊

yum -y install mod_ssl

3)、配置/etc/httpd/conf.d/ssl.conf

配置實用ssl的虛擬主機

ServerName

DocunmentRoot

配置證書和私鑰

SSLCertificatFile 證書文件

SSLCertificatKeyFile 密鑰文件

4)、重啟httpd服務

5)、測試

openssl s_client -connet:驗證的地址:端口 -CAfile:CA證書的路徑


URL Rewrite:URL重寫


17、服務器status頁面

內生的status信息,且此信息可以通過web予以顯示


基於URL訪問屬性

<Location [~] "">

</Location >


基於單個文件的訪問屬性

<File [~] "">

</File>



也可以使用<LocationMatch "">

</LocationMatch>來實現正則表達式的配置


如果要配置其屬性的URL能映射到某具體文件系統路徑,建議使用<Directory>


處理器:當文件被調用時,Apache內部表現形式:一般每種文件類型都有其隱式處理器;否則需要自己定義

顯式的定義使用的處理器:SetHandler



<Location /URL>

setHeandler server-status

</Location>



定義訪問控制機制

基於IP控制

基於用戶控制


示例:

<Location /server-status>

SetHandler sever-status

AuthType Basic

AuthName "Sever Status"

AuthUserFile "/etc/http/conf/.htpasswd"

Require valid-user

Order deny,allow

Allow from all

</Location>


18、ab工具的初步使用

-c 模擬的並發數

-n 模擬的總請求數

一般並發數應該小於等於請求數

http_load webbench seige(只做參考)

tcp_copy


19、使用mod_deflate模塊壓縮頁面優化傳輸速度,可以寫為一行,也可以寫多行,默認為gzip


SetOutputFilter DEFLATE


# mod_deflate configuration

<IfModule mod_deflate.c>

# Restrict compression to these MIME types

AddOutputFilterByType DEFLATE text/plain

AddOutputFilterByType DEFLATE text/html

AddOutputFilterByType DEFLATE application/xhtml+xml

AddOutputFilterByType DEFLATE text/xml

AddOutputFilterByType DEFLATE application/xml

AddOutputFilterByType DEFLATE application/x-javascript

AddOutputFilterByType DEFLATE text/javascript

AddOutputFilterByType DEFLATE text/css

# Level of compression (Highest 9 - Lowest 1)默認為6

DeflateCompressionLevel 9

# Netscape 4.x has some problems.

BrowserMatch ^Mozilla/4 gzip-only-text/html

# Netscape 4.06-4.08 have some more problems

BrowserMatch ^Mozilla/4\.0[678] no-gzip

# MSIE masquerades as Netscape, but it is fine

BrowserMatch \bMSI[E] !no-gzip !gzip-only-text/html


</IfModule>



擴展功能

apachectl

Apache HTTP服務控制工具

ab

Apache HTTP服務器性能測試工具

apxs

Apache 擴展工具

configure

配置源代碼

dbmmanage

為基本認證創建和更新DBM格式的用戶認證文件

htcacheclean

清理磁盤緩存

htdigest

為摘要認證創建和更新用戶認證文件。

htdbm

操作 DBM 密碼數據庫。

htpasswd

為基本認證創建和更新用戶認證文件。

httxt2dbm

為 RewriteMap 創建 dbm 文件。

logresolve

將 Apache 日誌文件中的 IP 地址解析到主機名稱。

rotatelogs

不關閉 Apache 而切換日誌文件。

suexec

執行外部程序前切換用戶。


20.資源限定

軟限制:可以超出的限制,但僅能超出一定時長

硬限制:絕對不能超出的限制

ulimit:只能修改軟限制

-n [N]:顯示或限制能打開的最大的文件句柄數,

-u [N]:所能夠打開的最大進程數

如果修改硬限制

/etc/security/limits.conf,擴展配置etc/security/limits.d/*.conf

對誰進行限定 類型 要限定的選項 值


apache 2.2 配置參數詳解