天天看點

【我的技術我做主】Apache Httpd Web伺服器詳解

一.簡介

Apache是世界使用排名第一的Web伺服器軟體。它可以運作在幾乎所有廣泛使用的計算機平台上,由于其跨平台和安全性被廣泛使用,是最流行的Web伺服器端軟體之一。Apache HTTP伺服器是一個子產品化的伺服器,源于NCSAhttpd伺服器.Apache的特點是簡單、速度快、性能穩定,并可做代理伺服器來使用。

Apache httpd Web伺服器特性

    1.事先建立程序

    2.子產品多元化,各種功能子產品的添加

    3.可以支援SSL技術

    4.支援多種方式的虛拟主機配置

            虛拟主機常用配置主要分為:

                    基于IP的虛拟主機

                    基于端口的虛拟主機

                    基于域名的虛拟主機

    5.支援多種方式的HTTP認證

    6.支援URL重寫;等多種特性

二.httpd安裝方式

            主要安裝方式分為兩種:一種為rpm包安裝;另一種為源碼包安裝

            安裝httpd軟體包時,請現将SELinux處于permssive或disabled,否則可能某些服務無法啟動

            修改SELinux配置檔案/etc/selinux/config,修改“SELINUX=permssive”

httpd軟體包安裝:yum -y install httpd   (yum的搭建不多說了,可以檢視本部落格yum源的搭建)

三.Httpd端口,目錄介紹   

    httpd預設端口為tcp/80端口;ssl 協定端口為443/tcp端口

    httpd工作的預設根目錄為/etc/httpd

    http的配置檔案目錄為/etc/httpd/conf

            httpd主配置檔案為httpd.conf檔案

           以 /etc/httpd/conf.d/*.conf結尾的配置檔案均為httpd.conf的主配置檔案的組成部分

    Apache Httpd子產品化目錄為/etc/httpd/modules

    Apache Httpd日志目錄為/etc/httpd/logs -->/var/log/httpd  指向/var/log/httpd目錄檔案

            日志檔案分為:通路日志access_log;錯誤日志err_log 兩種

    Apache Httpd網頁目錄為/var/www目錄 

            /var/www目錄下分為html目錄和cgi-bin目錄:html目錄為靜态網頁目錄如html語言開發的;

                    cgi-bin目錄為動态網頁目錄如asp,php,jsp,Java等開發的網站程式。

     CGI簡介:               

     Common Gateway Interface,簡稱CGI。在實體上是一段程式,運作在伺服器上,提供同用戶端HTML頁面的接口。cgi是外部應用程式(CGI程式)與Web伺服器之間通信的接口,CGI規範允許Web伺服器執行外部程式,并将它們的輸出發送給Web浏覽器,CGI将Web的一組簡單的靜态超媒體文檔變成一個完整的新的互動式媒體。

四.httpd主配置檔案/etc/httpd/conf/httpd.conf 詳解

### Section 1: Global Environment  全局配置

        ServerRoot "/etc/httpd"  httpd伺服器根目錄

        PidFile run/httpd.pid       httpd服務程序pid,儲存在httpd.pid檔案中

        KeepAlive Off                  是否啟用長連結【on  or off】使用長連接配接可以有效的提高性能

        MaxKeepAliveRequests 100       在啟用長連接配接後使用者最多一次請求的資源數,0表示無限制請求

        KeepAliveTimeout 15      長連接配接的斷開時常

 # prefork MPM 多處理子產品

        mpm_winnt  windows下多線程處理機制;

        prefork Linux下預先生成程序處理機制,一個請求用一個程序進行響應;

        worker多個線程處理,一個請求一個線程響應;

        event一個程序處理多個請求

     可以使用httpd -l指令檢視目前Linux所支援那些mpm處理子產品

     httpd伺服器預設使用worker處理子產品,如果更改其他處理子產品可修改httpd啟動腳本來實作,httpd啟動腳本配置檔案為/etc/sysconfig/httpd,修改配置檔案中#HTTPD=/usr/sbin/httpd.worker

       <IfModule prefork.c>

        StartServers       8                  伺服器啟動時啟動8個空閑程序

        MinSpareServers    5             最少空閑5個程序接受使用者請求

        MaxSpareServers   20           最大空閑程序

        ServerLimit      256                為MaxClients指定最大上限,修改時目前伺服器必須關閉伺服器kill所有程序,在重新啟動

        MaxClients       256               最大用戶端數,最多隻允許256個用戶端同時請求,不能超過Serverlimit限定數  

        MaxRequestsPerChild  4000 一個程序最多響應4000次的使用者請求            

        </IfModule>

        <IfModule worker.c>

        StartServers         4                 伺服器啟動時啟動4個程序

        MaxClients         300              最大用戶端數,最多隻允許300個用戶端同時請求

        MinSpareThreads     25          最小空閑線程

        MaxSpareThreads     75         最大空閑線程

        ThreadsPerChild     25            每 一個程序生成25個線程

        MaxRequestsPerChild  0         不做限定的使用者請求

        #Listen 12.34.56.78:80

        Listen 80  Httpd伺服器預設監聽端口80,可以同時監聽多個端口

        Listen 8080    或  127.0.0.1:8080

 ### Section 2: 'Main' server configuration  server主配置       

         DocumentRoot "/var/www/html"         網站文檔根目錄,可直接修改目錄路徑

        如要修改預設www文檔根目錄,必須要定義<Directory />Apache服務和功能是否被允許和通路

        也可修改相應的配置檔案中<Directory "/var/www/html"> 中的目錄即可。

        自定義<Directory />,格式如下

                <Directory />

                Options FollowSymLinks

                AllowOverride None

                </Directory>

 Options選項參數

# Possible values for the Options directive are "None", "All",

# or any combination of:

#   Indexes Includes FollowSymLinks SymLinksifOwnerMatch ExecCGI MultiViews

#

# Note that "MultiViews" must be named *explicitly* --- "Options All"

# doesn't give it to you.

# The Options directive is both complicated and important.  Please see

# http://httpd.apache.org/docs/2.2/mod/core.html#options

# for more information.

    Options Indexes FollowSymLinks

                  Indexes  索引網站目錄,在網站安全中Indexes不可啟用

                  None      不支援任何選項

                  FollowSymLinks      允許符号連結所指向的源檔案

                  Includes    允許執行服務端包含SSI

                  ExecCGI     允許運作

                  MultiViews   多視圖模式,耗費資源

                  ALL                支援所有選項

AllowOverride參數

# AllowOverride controls what directives may be placed in .htaccess files.

# It can be "All", "None", or any combination of the keywords:

#   Options FileInfo AuthConfig Limit

                AllowOverride None  允許覆寫伺服器控制通路清單

                                        AuthConfig 使用者認證,提供使用者帳号密碼提供登入

                        Order:用于定義基于主機的通路功能的Ip,網絡位址或主機定義通路控制

                列子:如有一網站不想被192.168.100.1 和192.168.100.4 兩個Ip位址通路如何配置Order?

                            AllowOverride None

                            Order deny,allow

                            Deny from 192.168.100.1 192.168.100.4

  httpd -t 檢測配置檔案文法是否正确 

 純文字浏覽器   elinks 127.0.0.1

                        elinks -dump 127.0.0.1  打開網站後直接退出

                         elinks -source 127.0.0.1 顯示網站源碼

列子:基于使用者認證,本地有baishouqijia 、白手起家、zhang,3個使用者在通路網站時必須輸入帳号密碼進行通路,否則無法通路,該如何做?配置檔案如下

      建立htpasswd中的使用者帳号密碼

        [root@localhost httpd]# htpasswd -c -m /etc/httpd/htpasswd baishouqijia

       [root@localhost httpd]# htpasswd -m /etc/httpd/htpasswd 白手起家

      [root@localhost httpd]# htpasswd -m /etc/httpd/htpasswd zhang

     [root@localhost httpd]# httpd -t

    [root@localhost httpd]# /etc/init.d/httpd restart

   [root@localhost httpd]#

   -m選項md5加密方式

   -c選項建立htpasswd檔案,建立第一個使用者時使用,第二個使用者則無效加-c,否則重新建立htpasswd檔案并替換第一次添加使用者時所建立的檔案

測試:

   開始登入提示輸入帳号密碼 

<a href="http://s3.51cto.com/wyfs02/M00/71/1E/wKiom1XGI7uzUHR8AAG9p9YukHY116.jpg" target="_blank"></a>

輸入帳号密碼後

<a href="http://s3.51cto.com/wyfs02/M00/71/1E/wKiom1XGI7ySIrlFAADKv3RgUzw002.jpg" target="_blank"></a>

删除使用者 htpasswd -D

        DirectoryIndex index.html index.html.var   首頁索引檔案,如果一個網站程式中都包含,自左往右開始索引

        ErrorLog logs/error_log  錯誤日志目錄

        LogLevel warn                日志級别

        LogFormat "%h %l %u %t \"%r\" %&gt;s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined

        LogFormat "%h %l %u %t \"%r\" %&gt;s %b" common

        LogFormat "%{Referer}i -&gt; %U" referer

        LogFormat "%{User-agent}i" agent

                %h    用戶端位址

                %l     遠端主機登入名稱

                %u    登入網站時登入的使用者名稱

                %t     日志産生的時間

                %r     請求封包的第一行

                %&gt;s   最後一次的請求的狀态碼

                %b     響應封包的大小

                %{Referer}i  網站來源

                %{User-Agent}i  用戶端浏覽器的類型

        Alias /icons/ "/var/www/icons/"  路徑别名

   列子:在/mnt/www/bbs下建立index.html 并使用别名/bbs通路

<a href="http://s3.51cto.com/wyfs02/M02/71/1A/wKioL1XGOOyTY7hSAADBPKTRYLE704.jpg" target="_blank"></a>

四、建立添加虛拟主機

<code> </code><code>[root@localhost conf]</code><code># vim /etc/httpd/conf/httpd.conf</code>

<code>### Section 2: 'Main' server configuration</code>

<code>#DocumentRoot "/var/www/html"        注釋掉</code>

<code>### Section 3: Virtual Hosts         添加以下部分</code>

<code>NameVirtualHost *:80</code>

<code>&lt;V&lt;VirtualHost *:80&gt;</code>

<code>        </code><code>ServerName www.a.net</code>

<code>        </code><code>DocumentRoot </code><code>"/var/www/html/a.net"</code>

<code>&lt;</code><code>/VirtualHost</code><code>&gt;</code>

<code>&lt;VirtualHost *:80&gt;</code>

<code>        </code><code>ServerName www.b.com</code>

<code>        </code><code>DocumentRoot </code><code>"/var/www/html/b.com"</code>

“51cto十周年部落格活動”正在進行,你也來參加吧~ 

本文轉自 zhangguangyi 51CTO部落格,原文連結:http://blog.51cto.com/bosszhang/1683080