httpd配置.md

httpd-2.2 配置

監聽端口和IP

配置文件:javascript

Listen  [IP:]PORT
  • 省略IP表示爲0.0.0.0php

  • Listen指令可重複出現屢次css

  • 修改監聽socket,重啓服務進程方可生效html

  • 能夠監聽在指定的IP地址的端口上,但這麼操做必須重啓服務java

持久連續

咱們知道http是無狀態、無鏈接的,無鏈接的含義是限制每次鏈接只處理一個請求。服務器處理完客戶的請求,並收到客戶的應答後,即斷開鏈接。採用這種方式能夠節省傳輸時間。無狀態是指協議對於事務處理沒有記憶能力。缺乏狀態意味着若是後續處理須要前面的信息,則它必須重傳,這樣可能致使每次鏈接傳送的數據量增大。另外一方面,在服務器不須要先前信息時它的應答就較快。爲了提升httpd服務器的響應速度咱們能夠把服務器設置成持久鏈接的,這樣tcp連續創建後,每一個資源獲取完成後不全斷開鏈接,而是繼續等待其它資源請求的進行。可是這麼操做就會出現一個問題就是如何斷開?在設置中咱們能夠經過時間限制和數量限制來實現,下面是httpd服務的相關配置。node

KeepAlive Off
MaxKeepAliveRequests 100
KeepAliveTimeout 30
  • KeepAlive:是否打開持續鏈接。linux

  • MaxKeepAliveRequests:在持續鏈接期間容許的最大請求數,設置爲0容許無限量。nginx

  • KeepAliveTimeout:同一個客戶端在同一個鏈接上最大請求的時間。
    下面咱們把KeepAlive給打開而且在瀏覽器中查看響首部中的內容:web

Accept-Ranges:bytes
Connection:Keep-Alive
Content-Length:19
Content-Type:text/html; charset=UTF-8
Date:Sun, 20 Nov 2016 11:18:20 GMT
ETag:"2c74-13-54131563ee60b"
Keep-Alive:timeout=30, max=100
Last-Modified:Sun, 13 Nov 2016 16:37:19 GMT
Server:Apache/2.2.15 (CentOS)

那個在服務器中該如何設置此參數呢?下面一篇文章是有關此參數的介紹,經過查閱此文章在根據實際狀況進行設置。總結是:若是網站沒有作動靜分離就不要設置此參數了,若是作了則在動態服務中關閉此功能,而在存靜態的內容中打開此功能,可是實際的參數設置仍是須要看網站的狀況。(我也不會.....)
KeepAlive和TimeOut參數解析算法

MPM多道處理模塊

在httpd-2.2中不支持同時編譯多個MPM模塊,因此只能編譯選定要使用的那個;CentOS 6的rpm包爲此專門提供了三個應用程序文件,httpd(prefork), httpd.worker, httpd.event,分別用於實現對不一樣的MPM機制的支持;若是想切換則能夠在/etc/sysconfig/httpd 中進行配置,因爲event在httpd-2.2中還不是很成熟,因此只能選擇使用prefork或者worker模型。下面是參數介紹:

prefork

<IfModule prefork.c>
<IfModule prefork.c>
StartServers       8
MinSpareServers    5
MaxSpareServers   20
ServerLimit      256
MaxClients       256
MaxRequestsPerChild  4000
</IfModule>
  • StartServers # 服務器啓動時創建的子進程數量。

  • MinSpareServers # 空閒子進程的最小數量;若是當前空閒子進程數少於MinSpareServers ,那麼Apache將以最大每秒一個的速度產生新的子進程。此參數不要設的太大。

  • MaxSpareServers #空閒子進程的最大數量;若是當前有超過MaxSpareServers數量的空閒子進程,那麼父進程會殺死多餘的子進程。

  • ServerLimit #最大活動進程數。

  • MaxClients #限定服務器同一時間內客戶端最大接入的請求數量;任何超過了MaxClients限制的請求都要進入等待隊列,一旦一個個鏈接被釋放,隊列中的請求才將獲得服務,若是要增大這個數值,必須先增大 ServerLimit。

  • MaxRequestsPerChild #每一個子進程在其生命週期內容許最大的請求數量,若是請求總數已經達到這個數值,子進程將會結束,若是設置爲0,子進程將永遠不會結束。 這裏建議設置爲非零,注意緣由:

    • 可以防止(偶然的)內存泄漏無限進行,從而耗盡內存。

    • 給進程一個有限壽命,從而有助於當服務器負載減輕的時候減小活動進程的數量(重生的機會)。

經過下面查看httpd進程就能夠看到機器默認啓動5個工做進程,還有一個是master進程主要負責調度的。

# ps aux |grep httpd |grep -v grep
root      9884  0.0  0.3 183856  3724 ?        Ss   19:18   0:00 /usr/sbin/httpd
apache    9888  0.0  0.3 183992  3128 ?        S    19:18   0:00 /usr/sbin/httpd
apache    9889  0.0  0.2 183856  2460 ?        S    19:18   0:00 /usr/sbin/httpd
apache    9890  0.0  0.2 183856  2460 ?        S    19:18   0:00 /usr/sbin/httpd
apache    9892  0.0  0.2 183856  2460 ?        S    19:18   0:00 /usr/sbin/httpd
apache    9893  0.0  0.2 183856  2460 ?        S    19:18   0:00 /usr/sbin/httpd

worker

<IfModule worker.c>
StartServers         4
MaxClients         300
MinSpareThreads     25
MaxSpareThreads     75
ThreadsPerChild     25
MaxRequestsPerChild  0
</IfModule>
  • StartServers #服務器啓動時創建的子進程數量。

  • MaxClients #限定服務器同一時間內客戶端最大接入的請求數量。

  • MinSpareThreads #空閒子進程的最小數量,默認25

  • MaxSpareThreads #空閒子進程的最大數量,默認75

  • ThreadsPerChild #每一個子進程產生的線程數量,默認是25

  • MaxRequestsPerChild #每一個子進程在其生命週期內容許最大的請求數量,若是請求總數已經達到這個數值,子進程將會結束,若是設置爲0,子進程將永遠不會結束。 這裏建議設置爲非零,注意緣由:

    • 可以防止(偶然的)內存泄漏無限進行,從而耗盡內存。

    • 給進程一個有限壽命,從而有助於當服務器負載減輕的時候減小活動進程的數量(重生的機會)。

DSO模塊的加載方式

若在httpd中加載新的或者取消相對應的模塊,首先在配置文件添加模塊的路徑,而後在從新載入httpd程序就好了,這裏在配置文件中添加模塊時模塊的路徑能夠是絕對路徑也能夠是相對路徑(對於ServerRoot所定義的位置而言,默認路徑爲:/etc/httpd)。若取消則在配置文件註釋並從新載入httpd系統便可。

相對路徑:LoadModule foo_module modules/mod_foo.so
絕對路徑:LoadMoudule php5_module /usr/lib64/httpd/modules/php.so

配置站點根目錄

DocumentRoot  "/path/to/somewhere"

DoucmentRoot指向的路徑爲URL路徑的起始位置,其至關於站點URL的根路徑;系統默認的根目錄爲/var/www/html,若想更改成別處則在配置文件中更改此選項。

站點訪問控制

可基於兩種機制指明對哪些資源進行何種訪問控制:

  • 文件系統路徑

<Directory  "">
...
</Directory>

<File  "">
...
</File>

<FileMatch  "PATTERN">
...
</FileMatch>
  • URL路徑

<Location  "">
...
</Location>

<LocationMatch "">
...
</LocationMatch>

<Directory>中「基於源地址」實現訪問控制

  1. Options

  • Indexes:缺乏指定的默認頁面時,容許將目錄中的全部文件已列表形式返回給用戶:危險:慎用

  • FollowsymLinks:容許跟隨符號連接所指向的原始文件

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

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

  • IncludesNOEXEC:容許包含但不容許執行腳本

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

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

  • None:所有禁用。

  • All:所有啓用。

  1. AllowOverride
    與訪問控制相關的那些指令能夠放在.htaccess文件(每一個目錄下均可以有一個)中;不建議使用,默認並無使用。

  • All:都放進去。

  • None:都不放進去。

  1. order和allow、deny
    order:定義生效次序;寫在後面的表示默認法則

定義站點主頁面

在搭建lamp中解析php文件須要配置此項。

DirectoryIndex  index.html  index.html.var

定義路徑別名

格式:Alias  /URL/  "/PATH/TO/SOMEDIR/"

當咱們訪問 http://www.example.com/image/1.jpg 這個資源,咱們能夠這麼配置 Alias /image/ "/opt/image/" 那麼在訪問是就會訪問到系統中的/opt/image/1.jpg 的資源。配置時必定要注意 / 必定要先後一致!

設定默認字符集

AddDefaultCharset  UTF-8

日誌設定

錯誤日誌

ErrorLog  logs/error_log

日誌級別:debug, info, notice, warn, error, crit, alert, emerg.

訪問日誌

LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
CustomLog  logs/access_log  combined

各選項簡要說明,詳細說明請見:日誌格式

  • %h:客戶端IP地址;

  • %l:Remote User, 一般爲一個減號(「-」);

  • %u:Remote user (from auth; may be bogus if return status (%s) is 401);非爲登陸訪問時,其爲一個減號;

  • %t:服務器收到請求時的時間;

  • %r:First line of request,即表示請求報文的首行;記錄了這次請求的「方法」,「URL」以及協議版本;

  • %>s:響應狀態碼;

  • %b:響應報文的大小,單位是字節;不包括響應報文的http首部;

  • %{Referer}i:請求報文中首部「referer」的值;即從哪一個頁面中的超連接跳轉至當前頁面的;

  • %{User-Agent}i:請求報文中首部「User-Agent」的值;即發出請求的應用程序;

基於用戶的訪問控制

認證在http中有個認證質詢的狀態:WWW-Authenticate 其響應碼爲401,拒絕客戶端請求,並說明要求客戶端提供帳號和密碼;在認證中客戶端用戶填入帳號和密碼後再次發送請求報文;認證經過時,則服務器發送響應的資源;

基於basic用戶名認證配置示例

  1. 定義安全域

<Directory "/opt/image/">
        Options None
        AllowOverride None
        AuthType Basic
        AuthName "Please enter the account password"
        AuthUserFile  "/etc/httpd/conf/.htpasswd"
        Require  user  bols
</Directory>

Require valid-user:容許帳號文件中的全部用戶登陸訪問。

  1. 提供帳號和密碼存儲

# htpasswd -cm /etc/httpd/conf/.htpasswd bols

選項說明:

  • -c:自動建立此處指定的文件,所以,僅應該在此文件不存在時使用;

  • -m:md5格式加密

  • -s: sha格式加密

  • -D:刪除指定用戶

  1. 測試

# curl -I http://192.168.0.210/image/15161610a24bc4b0f22393.jpg
HTTP/1.1 401 Authorization Required
Date: Sun, 20 Nov 2016 13:40:09 GMT
Server: Apache/2.2.15 (CentOS)
WWW-Authenticate: Basic realm="Please enter the account password"
Content-Type: text/html; charset=iso-8859-1

# curl -I  --user bols:bols http://192.168.0.210/image/15161610a24bc4b0f22393.jpg 
HTTP/1.1 200 OK
Date: Sun, 20 Nov 2016 13:39:51 GMT
Server: Apache/2.2.15 (CentOS)
Last-Modified: Tue, 15 Nov 2016 08:16:10 GMT
ETag: "2c78-16c1a-5415291a22680"
Accept-Ranges: bytes
Content-Length: 93210
Content-Type: image/jpeg

基於basic用戶組認證配置示例

1.定義安全域
<Directory "/opt/image/">
Options None
AllowOverride None
AuthType Basic
AuthName "Please enter the account password"
AuthUserFile "/etc/httpd/conf/.htpasswd"
AuthGroupFile "/etc/httpd/conf/.group"
Require group Japanese

2.建立用戶帳號和組帳號文件

# htpasswd -m .htpasswd longls
# cat .group 
Japanse:longls

3.測試

# curl -I --user bols:bols http://192.168.0.210/image/15161609cbeba0dea26125.jpg
HTTP/1.1 401 Authorization Required
Date: Sun, 20 Nov 2016 13:52:17 GMT
Server: Apache/2.2.15 (CentOS)
WWW-Authenticate: Basic realm="Please enter the account password"
Content-Type: text/html; charset=iso-8859-1

# curl -I --user longls:longls http://192.168.0.210/image/15161609cbeba0dea26125.jpg
HTTP/1.1 200 OK
Date: Sun, 20 Nov 2016 13:52:05 GMT
Server: Apache/2.2.15 (CentOS)
Last-Modified: Tue, 15 Nov 2016 08:16:09 GMT
ETag: "2c79-159f5-541529192e440"
Accept-Ranges: bytes
Content-Length: 88565
Content-Type: image/jpeg

上面的例子中因爲bols沒有加入到Japanese組因此不能訪問資源。

虛擬主機

前面在瀏覽器測試httpd的配置文件是否生效時,咱們是基於IP:端口進行通訊的,可是隻能當成一箇中心主機使用,然而平常中一個物理服務器能夠提供多個站點,爲避免沒必要要的浪費在一個httpd配置文件中定義使用多個虛擬主機,同時在使用虛擬主機前先取消中心主機 ,否則虛擬主機沒法使用。使用虛擬主機可分爲如下三類:

  • 基於不一樣的IP實現不一樣的虛擬主機 (須要有等多個IP,公網IP有限不建議使用)

  • 基於不一樣的port實現不一樣的虛擬主機(只需一個IP地址就行,但客戶端須要手動輸入端口,用戶體驗差不建議使用)

  • 基於不一樣主機名實現不一樣的虛擬主機(變化ServerName的值,使用方便符合需求)

注意:通常虛擬機不要與中心主機混用;所以,要使用虛擬主機,得先禁用'main'主機;禁用方法:註釋中心主機的DocumentRoot指令便可;

基於主機名的虛擬主機示例

<VirtualHost 192.168.0.210:80>
        ServerName www.a.com
        DocumentRoot "/opt/a.com/htdocs"
</VirtualHost>
<VirtualHost 192.168.0.211:80>
        ServerName www.b.org
        DocumentRoot "/opt/b.org/htdocs"
</VirtualHost>

上面只是簡單的配置基於主機名的訪問,請注意在配置後在測試系統的host 文件寫好IP 地址和主機名的解析。

status頁面

將status 頁面所須要的模塊開啓:

LoadModule  status_module  modules/mod_status.so

下面在進行配置:

<Location /server-status>
        SetHandler server-status
        Order allow,deny
        Allow from 192.168.0
</Location>

測試:
下面在瀏覽器輸入 http://IP/server-status 就能夠查看這臺機器的httpd服務的狀態了,注意實際使用中請作好權限,不要讓外網可以訪問到此頁面!

user/group

指定以哪一個用戶的身份運行httpd服務進程;

User apache
Group apache

mod_deflate模塊

實際使用中咱們爲了節約帶寬能夠用mod_deflate模塊壓縮頁面優化傳輸速度,如下是適用場景:

  • 節約帶寬,額外消耗CPU;同時,可能有些較老瀏覽器不支持。

  • 壓縮適於壓縮的資源,例如文件文件。
    配置:

SetOutputFilter DEFLATE

# mod_deflate configuration

# 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)
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

在瀏覽器進程刷新頁面測試:

Accept-Ranges:bytes
Connection:Keep-Alive
Content-Encoding:gzip
Content-Length:13221
Content-Type:text/html; charset=UTF-8
Date:Sun, 20 Nov 2016 15:13:10 GMT
ETag:"2c7a-494c6-541bce34dc6a3"
Keep-Alive:timeout=30, max=99
Last-Modified:Sun, 20 Nov 2016 15:06:46 GMT
Server:Apache/2.2.15 (CentOS)
Vary:Accept-Encoding

https 訪問設置

簡介

HTTPS(全稱:Hyper Text Transfer Protocol over Secure Socket Layer),是以安全爲目標的HTTP通道,簡單講是HTTP的安全版。即HTTP下加入SSL層,HTTPS的安全基礎是SSL,所以加密的詳細內容就須要SSL。 它是一個URI scheme(抽象標識符體系),句法類同http:體系。用於安全的HTTP數據傳輸。https:URL代表它使用了HTTP,但HTTPS存在不一樣於HTTP的默認端口及一個加密/身份驗證層(在HTTP與TCP之間)。這個系統的最初研發由網景公司(Netscape)進行,並內置於其瀏覽器Netscape Navigator中,提供了身份驗證與加密通信方法。如今它被普遍用於萬維網上安全敏感的通信,例如交易支付方面。

做用

主要做用能夠分爲兩種:一種是創建一個信息安全通道,來保證數據傳輸的安全;另外一種就是確認網站的真實性,凡是使用了 https 的網站,均可以經過點擊瀏覽器地址欄的鎖頭標誌來查看網站認證以後的真實信息,也能夠經過 CA 機構頒發的安全簽章來查詢 。

SSL會話的簡化過程

  1. 客戶端發送可供選擇的加密方式,並向服務器請求證書;

  2. 服務器端發送證書以及選定的加密方式給客戶端;

  3. 客戶端取得證書並進行證書驗正:
    若是信任給其發證書的CA:
    a. 驗正證書來源的合法性;用CA的公鑰解密證書上數字簽名;
    b. 驗正證書的內容的合法性:完整性驗正
    c. 檢查證書的有效期限;
    d. 檢查證書是否被吊銷;
    e. 證書中擁有者的名字,與訪問的目標主機要一致;

  4. 客戶端生成臨時會話密鑰(對稱密鑰),並使用服務器端的公鑰加密此數據發送給服務器,完成密鑰交換;

  5. 服務用此密鑰加密用戶請求的資源,響應給客戶端;

配置httpd支持https

1.爲服務器申請數字證書

[root@example.com ~]# cd /etc/pki/CA
[root@example.com CA]# (umask 077; openssl genrsa 2048 > private/cakey.pem)
Generating RSA private key, 2048 bit long modulus
............................................................+++
...........+++
e is 65537 (0x10001)
[root@example.com ~]# vim /etc/pki/tls/openssl.cnf
[ req_distinguished_name ]
countryName                     = Country Name (2 letter code)
countryName_default             = CN   
countryName_min                 = 2
stateOrProvinceName             = State or Province Name (full name)
#stateOrProvinceName_default    = Default Province
stateOrProvinceName_default     = Henan

localityName                    = Locality Name (eg, city)
localityName_default    = Xinyang

0.organizationName              = Organization Name (eg, company)
0.organizationName_default      = Companyname

# we can do this but it is not needed normally :-)
#1.organizationName             = Second Organization Name (eg, company)
#1.organizationName_default     = World Wide Web Pty Ltd

organizationalUnitName          = Organizational Unit Name (eg, section)
#organizationalUnitName_default =
organizationalUnitName_default  = Linuxer
[root@example.com CA]# openssl req -new -x509 -key private/cakey.pem -days 3655 -out cacert.pem
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [CN]:
State or Province Name (full name) [Henan]:
Locality Name (eg, city) [Xinyang]:
Organization Name (eg, company) [Companyname]:
Organizational Unit Name (eg, section) [Linuxer]:
Common Name (eg, your name or your server's hostname) []:ca.example.com
Email Address []:caadmin@example.com
[root@example.com CA]# touch index.txt serial crlnumber 
[root@example.com CA]# echo 01 > serial 
[root@example.com ~]# cd /etc/httpd/conf
[root@example.com conf]# mkdir ssl
[root@example.com conf]# cd ssl/
[root@example.com ssl]# (umask 077 ;openssl genrsa 2048 > httpd.key)
Generating RSA private key, 2048 bit long modulus
.................................+++
..............+++
e is 65537 (0x10001)
[root@example.com ssl]# openssl req -new -key httpd.key -out httpd.csr
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [CN]:
State or Province Name (full name) [Henan]:
Locality Name (eg, city) [Xinyang]:
Organization Name (eg, company) [Companyname]:
Organizational Unit Name (eg, section) [Linuxer]:
Common Name (eg, your name or your server's hostname) []:www.example.com
Email Address []:webadmin@example.com

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:
[root@example.com ssl]# openssl ca -in httpd.csr -out httpd.crt
Using configuration from /etc/pki/tls/openssl.cnf
Check that the request matches the signature
Signature ok
Certificate Details:
        Serial Number: 1 (0x1)
        Validity
            Not Before: Aug  3 07:41:04 2015 GMT
            Not After : Aug  2 07:41:04 2016 GMT
        Subject:
            countryName               = CN
            stateOrProvinceName       = Henan
            organizationName          = Companyname
            organizationalUnitName    = Linuxer
            commonName                = www.example.com
            emailAddress              = webadmin@example.com
        X509v3 extensions:
            X509v3 Basic Constraints: 
                CA:FALSE
            Netscape Comment: 
                OpenSSL Generated Certificate
            X509v3 Subject Key Identifier: 
                D7:C1:F8:CB:97:DE:B0:A3:EB:C0:1B:82:B5:5B:10:A0:CB:A1:5B:6D
            X509v3 Authority Key Identifier: 
                keyid:C4:67:DE:CF:AD:0B:94:03:C0:ED:5D:86:90:DE:36:B4:AE:DF:B1:2F

Certificate is to be certified until Aug  2 07:41:04 2016 GMT (365 days)
Sign the certificate? [y/n]:y


1 out of 1 certificate requests certified, commit? [y/n]y
Write out database with 1 new entries
Data Base Updated
[root@example.com ssl]# ll
總用量 16
-rw-r--r-- 1 root root 4659 8月   3 15:41 httpd.crt
-rw-r--r-- 1 root root 1070 8月   3 15:38 httpd.csr
-rw------- 1 root root 1675 8月   3 15:36 httpd.key

2.安裝mod_ssl模塊及SSL配置文件

[root@example.com ~]# yum install -y mod_ssl
[root@example.com ~]# vim /etc/httpd/conf.d/ssl.conf 
DocumentRoot "/var/www/html"       //取消註釋
ServerName www.example.com:443    //取消註釋    

SSLCertificateFile /etc/httpd/conf/ssl/httpd.crt     //更改成服務器證書路徑
SSLCertificateKeyFile /etc/httpd/conf/ssl/httpd.key   //更改成服務器證書路徑
[root@example.com ~]# cat /var/www/html/index.html
<h1>/var/www/html/:www.example.com</h1>

3.重啓httpd服務

[root@example.com ~]# service httpd restart
[root@example.com ~]# ss -tunl |grep -E "80|443"
tcp    LISTEN     0      128                   :::443                  :::*     
tcp    LISTEN     0      128                   :::80                   :::*

4.瀏覽器導入證書並測試
將linux系統的/etc/pki/CA/cacert.pem文件導入到windows系統中,並將cacert.pem文件名改成cacert.crt,在windows系統中點擊此文件按提示將其安裝到windows系統的受信任的根證書頒發機構中。

基於命令行進行測試:
[root@example.com ~]# vim /etc/hosts  //添加解析地址
192.168.1.8 www.example.com
[root@example.com ~]# openssl s_client -connect www.example.com:443 -CAfile /etc/pki/CA/cacert.pem 
***************************************
---
GET /index.html http/1.1
Host: www.example.com

HTTP/1.1 200 OK
Date: Mon, 03 Aug 2015 08:31:50 GMT
Server: Apache/2.2.15 (CentOS)
Last-Modified: Mon, 03 Aug 2015 07:49:31 GMT
ETag: "22f94-28-51c6368f30e15"
Accept-Ranges: bytes
Content-Length: 40
Connection: close
Content-Type: text/html; charset=UTF-8

<h1>/var/www/html/:www.example.com</h1>
closed

日誌切割工具rotatelogs

語法

rotatelogs [ -l ] logfile [ rotationtime [ offset ]] | [ filesizeM ]

選項

  • -l :使用本地時間代替GMT時間做爲時間基準。注意:在一個改變GMT偏移量(好比夏令時)的環境中使用-l會致使不可預料的結果。

  • logfile :它加上基準名就是日誌文件名。若是logfile中包含"%",則它會被視爲用於strftime()的格式字符串;不然它會被自動加上以秒爲單位的".nnnnnnnnnn"後綴。這兩種格式都表示新的日誌開始使用的時間。

  • rotationtime :日誌文件滾動的以秒爲單位的間隔時間。

  • offset :相對於UTC的時差的分鐘數。若是省略,則假定爲"0"並使用UTC時間。好比,要指定UTC時差爲"-5小時"的地區的當地時間,則此參數應爲"-300"。 在中國的服務器通常都是在東八區,因此在配置的時候會設置成480,這個須要注意。

  • filesizeM :指定以filesizeM文件大小滾動,而不是按照時間或時差滾動。

舉例

rotatelogs是一個配合Apache管道日誌功能使用的簡單程序。舉例:

CustomLog "|bin/rotatelogs /var/logs/logfile 86400" common

此配置會創建文件"/var/logs/logfile.nnnn",其中的nnnn是名義上的日誌啓動時的系統時間(此時間老是滾動時間的倍數,能夠用於cron腳本的同步)。在滾動時間到達時(在此例中是24小時之後),會產生一個新的日誌。

CustomLog "|bin/rotatelogs /var/logs/logfile 5M" common

此配置會在日誌文件大小增加到5兆字節時滾動該日誌。

ErrorLog "|bin/rotatelogs /var/logs/errorlog.%Y-%m-%d-%H_%M_%S 5M"

此配置會在錯誤日誌大小增加到5兆字節時滾動該日誌,日誌文件名後綴會按照以下格式建立:errorlog.YYYY-mm-dd-HH_MM_SS 。

CustomLog "|/usr/local/apache2/bin/rotatelogs -l /usr/local/apache2/logs/access_%Y%m%d%H.log 86400" combined
ErrorLog "|/usr/local/apache2/bin/rotatelogs -l /usr/local/apache2/logs/error_%Y%m%d%H.log 86400"

按天輪詢:使用絕對路徑

CustomLog "|/usr/local/apache2/bin/rotatelogs -l /usr/local/apache2/logs/access_%Y%m%d%H.log 3600" combined

按小時輪詢

ApacheBench命令

ab命令會建立不少的併發訪問線程,模擬多個訪問者同時對某一URL地址進行訪問。它的測試目標是基於URL的,所以,既能夠用來測試Apache的負載壓力,也能夠測試nginx、lighthttp、tomcat、IIS等其它Web服務器的壓力。
ab命令對發出負載的計算機要求很低,既不會佔用很高CPU,也不會佔用不少內存,但卻會給目標服務器形成巨大的負載,其原理相似CC攻擊。本身測試使用也須注意,不然一次上太多的負載,可能形成目標服務器因資源耗完,嚴重時甚至致使死機。

命令參數:

  • -A:指定鏈接服務器的基本的認證憑據;

  • -c:指定一次向服務器發出請求數;

  • -C:添加cookie;

  • -g:將測試結果輸出爲「gnuolot」文件;

  • -h:顯示幫助信息;

  • -H:爲請求追加一個額外的頭;

  • -i:使用「head」請求方式;

  • -k:激活HTTP中的「keepAlive」特性;

  • -n:指定測試會話使用的請求數;

  • -p:指定包含數據的文件;

  • -q:不顯示進度百分比;

  • -T:使用POST數據時,設置內容類型頭;

  • -v:設置詳細模式等級;

  • -w:以HTML表格方式打印結果;

  • -x:以表格方式輸出時,設置表格的屬性;

  • -X:使用指定的代理服務器發送請求;

  • -y:以表格方式輸出時,設置表格屬性。

使用舉例:

參數不少,通常咱們用 -c 和 -n 參數就能夠了。例如:

[root@node2 bin]# ./ab -n 4000 -c 1000 http://localhost/index.html
This is ApacheBench, Version 2.3 <$Revision: 655654 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/

Benchmarking localhost (be patient)
Completed 400 requests
Completed 800 requests
Completed 1200 requests
Completed 1600 requests
Completed 2000 requests
Completed 2400 requests
Completed 2800 requests
Completed 3200 requests
Completed 3600 requests
Completed 4000 requests
Finished 4000 requests


Server Software:        Apache/2.2.31
Server Hostname:        localhost
Server Port:            80

Document Path:          /index.html
#測試的頁面
Document Length:        44 bytes
#頁面大小

Concurrency Level:      1000
#測試的併發數
Time taken for tests:   1.551 seconds
#整個測試持續的時間
Complete requests:      4000
#完成的請求數量
Failed requests:        0
#失敗的請求數量
Write errors:           0
Total transferred:      1201500 bytes
#整個過程當中的網絡傳輸量
HTML transferred:       176220 bytes
#整個過程當中的HTML內容傳輸量
Requests per second:    2578.29 [#/sec] (mean)
#最重要的指標之一,至關於LR中的每秒事務數,後面括號中的mean表示這是一個平均值
Time per request:       387.853 [ms] (mean)
#最重要的指標之二,至關於LR中的平均事務響應時間,後面括號中的mean表示這是一個平均值
Time per request:       0.388 [ms] (mean, across all concurrent requests)
#每一個鏈接請求實際運行時間的平均值
Transfer rate:          756.30 [Kbytes/sec] received
#平均每秒網絡上的流量,能夠幫助排除是否存在網絡流量過大致使響應時間延長的問題

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:        0   50 205.7      1    1004
Processing:     0   57 185.5     26    1426
Waiting:        0   56 185.6     25    1426
Total:         20  107 290.3     26    1547
#網絡上消耗的時間的分解,各項數據的具體算法還不是很清楚

Percentage of the requests served within a certain time (ms)
  50%     26
  66%     28
  75%     29
  80%     30
  90%    110
  95%   1094
  98%   1103
  99%   1541
 100%   1547 (longest request)

整個場景中全部請求的響應狀況。在場景中每一個請求都有一個響應時間,其中50%的用戶響應時間小於26毫秒,66%的用戶響應時間小於28毫秒,最大的響應時間小於1547毫秒。對於併發請求,cpu實際上並非同時處理的,而是按照每一個請求得到的時間片逐個輪轉處理的,因此基本上第一個Time per request時間約等於第二個Time per request時間乘以併發請求數。
說明:-n後面的4000表明總共發出4000個請求;-c後面的1000表示採用1000個併發(模擬1000我的同時訪問),後面的網址表示測試的目標URL。

httpd 命令

httpd爲Apache HTTP服務器程序。直接執行程序可啓動服務器的服務。httpd是Apache超文本傳輸協議(HTTP)服務器的主程序,它被設計爲一個獨立運行的後臺進程,會創建一個處理請求的子進程或純種的池。一般,httpd不該該被直接調用,而應該由apachectl調用。

參數

  • -d serverroot :將ServerRoot指令設置初始值爲serverroot。它能夠被配置文件中的ServerRoot指令所覆蓋。其默認值是/usr/local/apache2 。

  • -f config:在啓動中使用config做爲配置文件。若是config不以"/"開頭,則它是相對於ServerRoot的路徑。其默認值是conf/httpd.conf 。

  • -k start|restart|graceful|stop|graceful-stop:發送信號使httpd啓動、從新啓動或中止。更多信息請參見中止Apache 。

  • -C directive:在讀取配置文件以前,先處理directive的配置指令。

  • -c directive:在讀取配置文件以後,再處理directive的配置指令。

  • -D parameter:設置參數parameter ,它配合配置文件中的<IfDefine>段,用於在服務器啓動和從新啓動時,有條件地跳過或處理某些命令。

  • -e level:在服務器啓動時,設置LogLevel爲level 。它用於在啓動時,臨時增長出錯信息的詳細程度,以幫助排錯。

  • -E file:將服務器啓動過程當中的出錯信息發送到文件file 。

  • -R directory:當在服務器編譯中使用了SHARED_CORE規則時,它指定共享目標文件的目錄爲directory 。

  • -h:輸出一個可用的命令行選項的簡要說明。

  • -l:輸出一個靜態編譯在服務器中的模塊的列表。它不會列出使用LoadModule指令動態加載的模塊。

  • -L:輸出一個指令的列表,幷包含了各指令的有效參數和使用區域。

  • -M:輸出一個已經啓用的模塊列表,包括靜態編譯在服務器中的模塊和做爲DSO動態加載的模塊。

  • -S:顯示從配置文件中讀取並解析的設置結果(目前僅顯示虛擬主機的設置)

  • -t:僅對配置文件執行語法檢查。程序在語法解析檢查結束後當即退出,或者返回"0"(OK),或者返回非0的值(Error)。若是還指定了"-DDUMP_VHOSTS",則會顯示虛擬主機配置的詳細信息。

  • -v:顯示httpd的版本,而後退出。

  • -V:顯示httpd和APR/APR-Util的版本和編譯參數,而後退出。

  • -X:以調試模式運行httpd 。僅啓動一個工做進程,而且服務器不與控制檯脫離。

htpasswd命令

htpasswd命令是Apache的Web服務器內置工具,用於建立和更新儲存用戶名、域和用戶基本認證的密碼文件。

選項

  • -c:建立一個加密文件;

  • -n:不更新加密文件,只將加密後的用戶名密碼顯示在屏幕上;

  • -m:默認採用MD5算法對密碼進行加密;

  • -d:採用CRYPT算法對密碼進行加密;

  • -p:不對密碼進行進行加密,即明文密碼;

  • -s:採用SHA算法對密碼進行加密;

  • -b:在命令行中一併輸入用戶名和密碼而不是根據提示輸入密碼;

  • -D:刪除指定的用戶。

httpd-2.4

新特性

(1) MPM支持運行爲DSO機制;以模塊形式按需加載;
(2) event MPM生產環境可用;
(3) 異步讀寫機制;
(4) 支持每模塊及每目錄的單獨日誌級別定義;
(5) 每請求相關的專用配置;
(6) 加強版的表達式分析式;
(7) 毫秒級持久鏈接時長定義;
(8) 基於FQDN的虛擬主機也再也不須要NameVirutalHost指令;
(9) 新指令,AllowOverrideList;
(10) 支持用戶自定義變量;
(11) 更低的內存消耗;

新模塊

(1) mod_proxy_fcgi
(2) mod_proxy_scgi
(3) mod_remoteip

訪問控制配置

在使用httpd-2.4時須要注意的目錄下的頁面只有顯式受權才能被訪問,如下列出訪問控制相關的配置:
容許全部主機訪問:Require all granted
拒絕全部主機訪問:Require all deny

控制特定的IP訪問

Require ip IPADDR:受權指定來源的IP訪問;
Require not ip IPADDR:拒絕

控制特定的主機訪問

Require host HOSTNAME:受權指定來源的主機訪問;
Require not host HOSTNAME:拒絕

虛擬主機配置

<VirtualHost *:80>
    ServerName www.b.net
    DocumentRoot "/apps/b.net/htdocs"
    <Directory "/apps/b.net/htdocs">
        Options None
        AllowOverride None
        Require all granted
    </Directory>
</VirtualHost>
相關文章
相關標籤/搜索