天天看點

web服務安裝配置

    本文主要是以 CentOS 6系列為作業系統,來安裝配置web服務,并實作虛拟使用者,https,和基本的使用者認證等相關内容。

    寫在前面:

作業系統: CentOS 6.5

伺服器的IP: 172.16.10.9

httpd的版本:httpd-2.2.15 系列

SElINUX狀态:disabled

    下面開始安裝配置旅程:

一、web的安裝配置

1、安裝:yum install httpd  mod_ssl -y

    mod_ssl 是實作 https 協定時所依賴的包

2、配置檔案的相關說明:

配置檔案: 

/etc/httpd/conf/httpd.conf

/etc/httpd/conf.d/*.conf

服務腳本:

    /etc/rc.d/init.d/httpd

    腳本配置檔案:/etc/sysconfig/httpd,這裡可以定義MPM的類型

子產品目錄:

    /usr/lib64/httpd/modules

    /etc/httpd/modules

    /etc/httpd/modules是/usr/lib64/httpd/modules的連結檔案

主程式:

    /usr/sbin/httpd: prefork 模式

    /usr/sbin/httpd.event: event模式

    /usr/sbin/httpd.worker: worker模式

日志檔案:

    /var/log/httpd/access_log: 通路日志

    /var/log/httpd/error_log: 錯誤日志

站點文檔的根目錄:

/var/www/html

二、httpd的配置檔案說明

# grep "Section" httpd.conf

### Section 1: Global Environment

### Section 2: 'Main' server configuration

### Section 3: Virtual Hosts

主要分為三部分:全局配置,主伺服器配置,虛拟主機的配置。主伺服器和虛拟主機一般不同時使用;預設僅啟用了主伺服器。在每個部分中有許多指令參數,這些指令參數不區分字元大小寫,但其值有可能會區分大小寫。

三、配置檔案選項詳細說明

1、持久連接配接

    通常的參數有:

        KeepAlive {On|Off} 是否開啟持久連接配接功能。預設是 Off。

    以下這2個指令參數隻有在KeepAlive On 時才有效

        KeepAliveRequests 100 允許的一次持久連接配接的最大請求數。

        KeepAliveTimeout  2次持久連接配接時間的間隔

<a href="http://s3.51cto.com/wyfs02/M02/45/53/wKioL1PnPX-DaGHsAAHnTVLxT5M700.jpg" target="_blank"></a>

    驗證效果:

<a href="http://s3.51cto.com/wyfs02/M01/45/52/wKiom1PnPGfBAKFyAAFxXOQfpXo481.jpg" target="_blank"></a>

2、MPM 參數

     ServerStart 參數的驗證,共有9個相關的程序,其中一個是其他 8 個的父程序:

<a href="http://s3.51cto.com/wyfs02/M02/45/52/wKiom1PnPk-T7XyQAAIbD8V1_wk087.jpg" target="_blank"></a>

3、監聽的端口

    指定格式:Listen [IP:]port 預設的端口号是80 

    這個端口可以自己指定,一般使用大家熟知的端口,常用的有 80 和 8080。

4、DSO 動态共享對象

    在這裡可以實作動态庫的裝載,可以使用 httpd -D MODULES 或者 httpd -M 來檢視已加載的子產品名。

<a href="http://s3.51cto.com/wyfs02/M02/45/52/wKiom1PnP8mxIIibAAN4q9p9Tvw264.jpg" target="_blank"></a>

示例:

    使用 mod_deflate 子產品壓縮頁面來優化傳輸速度。

未使用 mod_deflate 子產品,通路 http;//192.168.1.66/messages 檔案時相應的位元組數大小是:316080 位元組。

加載 mod_deflate 子產品,并進行配置 vim /etc/httpd/conf/httpd.conf。

加載後的驗證,加載 mod_deflate 子產品後的大小是 41902 位元組,壓縮比還是相當可觀的。

<a href="http://s3.51cto.com/wyfs02/M02/45/53/wKioL1PnQjrwdKg3AAORt6-PSrY446.jpg" target="_blank"></a>

5、指定站點的根目錄

    DocumentRoot “/var/www/html” 這是 rpm 安裝方式的預設的根站點目錄。當然這個可以根據自己的需求來設定。

6、基于目錄和檔案的通路控制

<a href="http://s3.51cto.com/wyfs02/M01/45/53/wKioL1PnQweCLqjJAAKkmWLjhBI987.jpg" target="_blank"></a>

    使用 directory 指令基于本地檔案系統來實作對目錄的通路控制。

    常見的控制指令有:

    Options:

        Indexes:Indexes: 當通路的路徑下無預設的首頁面,将所有資源以清單形式呈現給使用者。

    FollowSymlinks: 跳躍符号連結

    AloowOverride: 支援在每個頁面目錄下建立.htaccess用于實作對此目錄中資源通路時的通路控制功能。

    AuthCofig:用于實作使用者認證的目的。

    Order結合deny from、allow from 一起使用,來基于 IP 位址設定通路控制

    例如:

        這是設定通路白名單的設定,隻允許 172.16 網段的用戶端來通路對應的目錄。當然 from 後面的位址是比較靈活的,像:172.16,172.16.0.0,172.16.0.0/16,172.16.0.0/255.255.0.0這種形式的都是允許的。

        Order allow,deny

        Allow from 172.16.0.0/16

    當然,上面對目錄的控制,也可以使用 Locaton 指令基于URL來實作。

        DocumentRoot “/var/www/html”

    &lt;Directory "/var/www/html/admin"&gt;

            通路控制參數

        &lt;/Directory&gt;

    等價于:

        &lt;Location "/admin"&gt;

        通路控制參數

        &lt;/Location&gt;

    對于 Option Indexex參數示例,一般此選項作為檔案伺服器,提供下載下傳使用時使用到此選項,其他情況應慎重使用。

7、指定預設通路的首頁面

    預設的使用格式如下:這裡也可以自己定義首頁面

    DirectoryIndex index.html index.html.var

8、配置日志功能

<a href="http://s3.51cto.com/wyfs02/M02/45/53/wKiom1PnQy_B8RZGAAEecxsvyCE688.jpg" target="_blank"></a>

    ErrorLog "/path/to/error_log" 指明錯誤日志的路徑,可以适應相對位址。相對于 ServerRoot 指令所定義的目錄

    LogLevel {debug|info|notice|warn|error|crit|alert|emerg} 指定日志的級别

    LogFormat  指定日志檔案的格式

    CustomLog "/path/to/access_log" LogFormat_Name 指定 access_log 的路徑個和使用的格式

%h: 用戶端位址

%l: 遠端登入名,通常為-

%u: 認證時輸入使用者名,沒有認證時為-

%t: 伺服器收到 使用者請求時的時間

%&gt;s: 響應狀态碼

%b: 響應封包的長度,機關是位元組

%{HEADER_NAME}i: 記錄指定首部對應的值

9、路徑别名

 使用指令參數:Alias     實作URL 路徑映射時,通路的路徑不在依賴于站點的根目錄。

<a href="http://s3.51cto.com/wyfs02/M00/45/53/wKioL1PnRJzg_r8bAAC8fDaKLnA531.jpg" target="_blank"></a>

10、基于使用者通路控制

    基于使用者的認證的方式有基本認證(Basic)和摘要認證(digest)。這裡是基于虛拟使用者來實作的。實作的方式有:文本檔案、資料庫、ldap、資料庫引擎來提供API接口。

    以基于檔案的形式實作使用者通路的控制來示例:

1、vim  /etc/httpd/conf/httpd.conf

        Options none# optons 選項控制

        AllowOverride AuthConfig  # 實作使用者認證

        AuthType Basic    # 認證方式是 Basic

        AuthName "Admin Area."  # 提示資訊

        #AuthBasicProvider file  # 認證方式的提供者

        AuthUserFile /etc/httpd/conf/.htpasswd  # 認證檔案的路徑

        Require valid-user  # 登陸使用者控制  require user USER_NAME

    &lt;/Directory&gt;

2、提供認證檔案

    由 htpasswd 指令得到。常用選項:

        -c: 如果此檔案事先不存在,則建立;注意,隻能在建立第一個使用者時使用

        -m: 以md5的格式編碼存儲使用者的密碼資訊

        -D: 删除指定使用者

        htpasswd -c -m /etc/hhtpd/.htpasswd tom

3、組認證

        Options none

        AllowOverride AuthConfig

        AuthType Basic

        AuthName "Admin Area."

        #AuthBasicProvider file

        AuthUserFile /etc/httpd/conf/.htpasswd

        AuthGroupFile /etc/httpd/conf/.htgroup  # 組檔案的路徑,自己手動建立

        Require group GROUP_NAME

組檔案格式:

    組名:user1 user2 user3

11、虛拟主機

虛拟主機:使用不同通路路徑

基于端口:通過不同的端口來提供不同的通路站點

基于IP:基于不同的 ip 位址來通路不同的站點

基于主機名:相同的 IP 位址通過不同的主機名來實作通路不同的站點 

(1) 使用虛拟的前提:取消主伺服器

    注釋主伺服器的站點根路徑指定:DocumentRoot

(2) 定義虛拟主機

    NameVirtualHost IP:PORT  # 指定監聽的位址和端口 

    &lt;VirtualHost IP:PORT&gt;

        ServerName  # 主機名

        ServerAlias   # 定義多個主機名,此時 ServerName 的名稱應該是 UR

        DocumentRoot  # 根站定目錄

        ServerAlias  # 主機名稱

        ErrorLog  # 錯誤日志的定義

        CustomLog # 通路日志的定義

    &lt;/VirtualHost&gt;

    配置檔案文法檢查:

        httpd -t

        service httpd configtest

    配置完成虛拟主機後,可使用 httpd -S 顯示配置的虛拟主機

    測試:crul URL

12、https協定

    由于http 協定在傳輸過程中使用的是明文傳輸。是以就出現了 https 協定來實作加密的 https 協定。ssl會話基于IP位址建立,是以,每一個IP僅建立一個SSL會話。https協定:是基于SSL二進制編碼, 監聽于443/tcp。

    ssl握手要完成的工作:

交換協定版本号

選擇雙方都支援的加密方式

用戶端對伺服器端實作身份驗正

密鑰交換

用戶端驗正伺服器端證書:

有效性檢測:證書是否仍然在有效期内

CA的可信度檢測

證書的完整性檢測

持有者的身份檢測

配置httpd工作于https:

(1) 安裝mod_ssl子產品

    # yum install mod_ssl

(2) 為服務端生成私鑰,并為其提供證書;

在服務端(172.16.10.9):

    # (umask 077;openssl genrsa -out /etc/pki/CA/private/cacert.key 2048)

    # openssl req -new -x509 -key /etc/pki/CA/private/cakey.pem -out /etc/pki/CA/cacert.pem -days 1000

    # touch index.txt

    # echo "01" &gt; serial

在用戶端:

    #(umask 077;openssl genrsa -out /etc/httpd/httpd.key 2048)

    #openssl req -new -key /etc/httpd/httpd.key -out /etc/httpd/httpd.csr

    将 httpd.csr 傳到服務端簽名:

在服務端:

    # openssl ca -in /root/httpd.csr -out /root/httpd.crt -days 1000

将簽好的證書,httpd.crt 傳回到用戶端,放到 /etc/httpd/ 目錄下

(3) 配置使用https的虛拟主機

    &lt;VirtualHost IP:443&gt;   

            SSLCertificateFile   # 證書路徑

            SSLCertificateKeyFile  # 證書私鑰檔案

            DocumentRoot  # 虛拟主機的根站點

            ServerName    # 虛拟主機的主機名

        &lt;/VirtualHost&gt;

(4) 重新裝載配置

    httpd reload

(5) 測試

# openssl s_client -connect IP:PORT -CAfile /path/to/ca_certificate

13、status頁面

    httpd内嵌有handler,其中有一個handler用于輸出目前httpd服務相關狀态資訊handler: server-status

    啟用handler要使用SetHandler指令

    handler: 當檔案被調用時,apache内部表示形式;一般每種檔案類型都有其隐式處理器

示例:基于 10、11、12、13

1

2

3

4

5

6

<code>建立httpd伺服器(基于編譯的方式進行),要求:</code>

<code>提供兩個基于名稱的虛拟主機:</code>

<code>a www1.stu10.com,頁面檔案目錄為</code><code>/web/vhosts/www1</code><code>;錯誤日志為</code><code>/var/log/httpd/www1</code><code>.err,通路日志為</code><code>/var/log/httpd/www1</code><code>.access;</code>

<code>(b)www2.stu10.com,頁面檔案目錄為</code><code>/web/vhosts/www2</code><code>;錯誤日志為</code><code>/var/log/httpd/www2</code><code>.err,通路日志為</code><code>/var/log/httpd/www2</code><code>.access;</code>

<code>(c)為兩個虛拟主機建立各自的首頁檔案index.html,内容分别為其對應的主機名;</code>

<code>(d)通過www1.stu10.com</code><code>/server-status</code><code>輸出httpd工作狀态相關資訊,且隻允許提供帳号密碼才能通路(status:status);</code>

1、配置檔案的的編輯,vim /etc/httpd/httd.conf 

    還的注釋主配置下的 DocumentRoot "/var/www/html"

2、 建立對應的站點和提供密碼檔案

7

8

9

10

<code># 建立對應的站點目錄并提供預設的頁面</code>

<code>mkdir</code> <code>/web/vhosts/www1/</code> <code>-p</code>

<code>mkdir</code> <code>/web/vhosts/www2/</code> <code>-p</code>

<code>echo</code> <code>"&lt;h1&gt;welcom www1.guotig.com&lt;h1&gt;"</code> <code>&gt; </code><code>/web/vhosts/www1/index</code><code>.html</code>

<code>echo</code> <code>"&lt;h1&gt;welcom www2.guotig.com&lt;h1&gt;"</code> <code>&gt; </code><code>/web/vhosts/www2/index</code><code>.html</code>

<code># 提供使用者認證檔案</code>

<code>htpasswd -cm </code><code>/etc/httpd/conf/</code><code>.htpasswd status</code>

<code>mkdir</code>  <code>/web/hosts/www1/server-status</code>

<code>chowm apache.apache </code><code>/web/hosts/www1/server-status</code>

3、提供主機名解析檔案 在/etc/hosts中添加:(在測試用戶端)

<code>172.16.10.9  www1.stu10.com www2.stu10.com</code>

 4、測試結果如下:

<a href="http://s3.51cto.com/wyfs02/M00/45/53/wKiom1PnWKjjGSQ4AAFLNmBiKeY406.jpg" target="_blank"></a>

使用者認證測試:

<a href="http://s3.51cto.com/wyfs02/M01/45/54/wKiom1PnZhLT4cUYAAErbkbtwAY511.jpg" target="_blank"></a>

<a href="http://s3.51cto.com/wyfs02/M00/45/54/wKioL1PnZyyj7h37AAHfMR68ANE524.jpg" target="_blank"></a>

<code>為上面的第2個虛拟主機提供https服務,使得使用者可以通過https安全的通路此web站點;</code>

<code>(1)要求使用證書認證,證書中要求使用的國家(CN)、州(Henan)、城市(Zhengzhou)群組織(MageEdu)</code>

<code>(2)設定部門為Ops,主機名為web.magedu.com,郵件為[email protected]</code>

1、編輯 vim /etc/httpd/conf.d/ssl.conf 添加以下内容

    當然在 /etc/httpd/conf/httpd.conf,要加載 mod_ssl 子產品

<a href="http://s3.51cto.com/wyfs02/M00/45/54/wKiom1PnZr2TbFUGAAKvSJ-TWvA944.jpg" target="_blank"></a>

使用 httpd -S 來檢視已經配置好的虛拟機

2、提供證書

<code>mkdir</code> <code>/etc/httpd/ssl</code> <code>&amp;&amp; </code><code>cd</code> <code>/etc/httpd/ssl</code>

<code>(</code><code>umask</code> <code>077; openssl genrsa -out httpd.key 1024)</code>

<code>openssl req -new -key httpd.key -out httpd.csr</code>

<code>去服務端簽署證書:</code>

<code>openssl ca -</code><code>in</code>  <code>httpd.csr -out </code><code>/httpd</code><code>.crt -days 300</code>

<code>簽署後的證書存放到:</code><code>/etc/httpd/ssl/httpd</code><code>.crt</code>

3、驗證結果

    首次通路時會出現導入證書的問題,導入證書就可通路。

<a href="http://s3.51cto.com/wyfs02/M00/45/54/wKiom1Pnas6C2q3iAAKYgoKWekI339.jpg" target="_blank"></a>

    導入證書就可以通路了。

<a href="http://s3.51cto.com/wyfs02/M01/45/55/wKioL1Pna-ezxd5sAAB6dJW9hT8750.jpg" target="_blank"></a>

14、httpd程式包自帶的工具介紹

httpd: apache伺服器程式

         -t: 測試配置檔案

         -l: 清單靜态子產品

        -D DUMP_MODULES:列出DSO子產品

        -M:等價于 -t -D DUMP_MODULES

        -D DUMP_VHOSTS: 列出所有虛拟主機

htpasswd:  為基于檔案的basic認證建立和更新使用者認證檔案

apachectl:  腳本,httpd服務控制工具,可啟動,關閉,重新加載配置檔案。

ab: (apache benchmark)httpd的基準性能測試工具; 

apxs:  httpd得以擴充使用第三方子產品的工具;

 htcacheclean: 磁盤緩存清理工具;

htdigest: 為digest認證建立和更新使用者認證檔案

httxt2dbm: 為rewrite map建立dbm格式的檔案

 rotatelogs: 日志滾動,不關閉httpd而切換其使用日志檔案的工具

 suexec: 當httpd程序需要以另外的使用者的身份去通路某些資源時,可以以suexec作臨時切換;

15、ab工具的初步使用

    同類工具:http_load, webbench, seige

     Usage: ab [options] [http[s]://]hostname[:port]/path

常用的參數:

    -c #: 模拟的并發數;

    -n #: 總的請求數,-n的值一定要大于等于-c的值; 

<a href="http://s3.51cto.com/wyfs02/M02/45/55/wKiom1Pnb9uioFzLAAIqD9N-XMc871.jpg" target="_blank"></a>

    但是當我們把并發量提高到2000的時候,就會出現以下的錯誤。

<a href="http://s3.51cto.com/wyfs02/M01/45/55/wKioL1PndMPCZ9vGAAEXN38X8OM248.jpg" target="_blank"></a>

    這是由于資源限定的問題,一般情況下,Linux預設打開的檔案數是1024。

<a href="http://s3.51cto.com/wyfs02/M01/45/56/wKiom1PnfNPhLslMAACUEWp1mOQ213.jpg" target="_blank"></a>

16、資源限定

    軟限定:可臨時超出一定時長的上限

    硬限定:絕對不可超出的上限

管理者可使用ulimit指令臨時性地修改各種資源的軟限制;

ulimit -n #:能同時打開的檔案數

   -u #: 能同時啟動的程序數

配置檔案:

/etc/security/limits.conf,裡面限定了資源的各種屬性,包括核心檔案的大小,最大檔案數,最大程序數等資訊。如果想針對某個使用者最限制,在domain字段使用@USER_NAME,如果針對全局的話,使用*就可以實作。/etc/security/limits.d/*.conf 也可以定義各種資源限定。

<a href="http://s3.51cto.com/wyfs02/M02/45/56/wKiom1PngiezBAIDAANFLxh_weI807.jpg" target="_blank"></a>

在 15 中使用ab 測試時,會出現打開過多檔案的錯誤。使用以下設定就可以解決。

<a href="http://s3.51cto.com/wyfs02/M01/45/56/wKiom1PniCKRZEbZAAHRdzQvizM425.jpg" target="_blank"></a>

    關于httpd的基本搭建介紹到這裡。其他的搭建在後續博文中介紹,像實作負載均衡。

本文轉自 羊木狼 51CTO部落格,原文連結:http://blog.51cto.com/guoting/1538362,如需轉載請自行聯系原作者

繼續閱讀