Apache Http Server學習筆記

    第一次接觸Apache是數年前了,如今可能會轉向Php開發,因此抽時間又一次學習了Apache服務器的使用,不善於總結和作筆記的我老是與殘酷的時間抗衡着,時間久了,我無力反抗,那些學過的東西早已被拋到九霄雲外了,我有點痛恨本身當初爲何沒有能把全部學習的知識總結下來呢?這一次我必需要總結下昨天對Apache的學習。這裏不少東西我都參考了《細說php》 php

Apache介紹

    Apache是世界上排名第一的開源的Web服務器軟件,同類型的有Nginx反向代理服務器,不過Apache以最具穩定性獲得了廣大開發者的承認,不過在性能上Nginx會略勝一籌。Apache經過外置模塊能夠發佈CGI,PHP等網站應用。具體的能夠參考官網 http://httpd.apache.org/ 

Apache源代碼安裝

下載Apache源代碼包

cd /home/app/ 
wget http://mirrors.tuna.tsinghua.edu.cn/apache//httpd/httpd-2.2.25.tar.gz

解壓源碼包並安裝


tar xzvf httpd-2.2.45.tar.gz
cd httpd-2.2.25
./configure prefix=/usr/local/apache2
make
make install


Apache目錄結構

bin目錄

    存放apache一些可執行文件,包含 ab(用於壓力測試) , apachectl(用於操做apache服務) , htpasswd(apache的權限設置)等等。 html

cgi-bin目錄

    這裏通常存放cgi腳本,如經過perl,c等編寫cgi來發布web。 linux

error目錄

    訪問apache發佈的網站一般會出現一些錯誤頁面,全部的錯誤頁面在這裏定義。 web

htdocs目錄

    該目錄很是關鍵,它是默認apache的根目錄,安裝完apache並啓動以後,經過 http://ip:8080/index.html 即可以找到 htdocs 下的index.html,將文件內容發送給客戶端瀏覽器,瀏覽器解析並顯示。不過apache的根目錄能夠經過配置文件自定義,後面會講到。 shell

icons目錄

    網站中全部的默認的小圖標都存放在這裏,如 默認的favicon.ico小圖標等。 apache

logs目錄

    該目錄存放日誌信息,也很是重要,用於平常的分析。通常下面會至少有這兩個文件 access_log(正常訪問的日誌)  error_log(訪問錯誤的日誌)。 windows


tail -20f /usr/local/apache2/logs/access_log    // 動態查看正常訪問日誌的後20行


man目錄

    該目錄存放一些man的幫助文檔,不過重要,能夠忽略。 瀏覽器

conf目錄

    該目錄存放apache的配置文件,一樣也很重要,其中 httpd.conf 爲主配置文件,你們應該注意到了該目錄下面的 extra/ 目錄,extra/ 目錄下面有不少以功能拆分好了的 *.conf 配置,這是附加配置文件,在httpd.conf 中經過 Include extra/httpd-default.conf 來載入附加配置文件,能夠將一些配置信息寫入附加配置文件並在主配置文件中引入就Ok了。 服務器

    附加配置文件默認沒有開啓,須要修改 httpd.conf 配置文件來開啓。 app

cd /usr/local/apache2/
conf/httpd.conf                // 主配置文件
conf/extra/                    // 全部附加配置文件
httpd-autoindex.conf           // 配置目錄列表
httpd-dav.conf                 // 配置dav協議
httpd-default.conf             // 配置apache服務相關的全局參數
httpd-info.conf                // 配置服務器信息與狀態顯示
httpd-languages.conf           // 配置語言支持 
httpd-manual.conf              // 提供apache文檔訪問
httpd-mpm.conf                 // 多路處理模塊(mpm)配置
httpd-multilang-errordoc.conf  // 多語言錯誤應答配置
httpd-ssl.conf                 // https的ssl模塊配置
httpd-userdir.conf             // 用戶主目錄配置
httpd-vhosts.conf              // 虛擬主機的配置


Apache經常使用操做


cd /usr/local/apache2/bin/
apachectl -l  列出apache的信息,模塊之類的
apachectl -t  檢查配置文件
apachectl start  啓動apache
apachectl restart 重啓apache
apachectl stop   關閉apache
在啓動apache以前要學習apache配置的配置與其虛擬主機的設置。

在linux平臺下,apache默認會啓動一個主進程,主程會打開5個子進程,客戶端鏈接會與某個子進程通訊,各個子進程由主進程管理並共享主進程。(apache會保證至少有5個空閒子進程)

root@debian:/home/app/httpd/bin# ps aux | grep httpd
root      2979  0.0  0.1  48972  2668 ?        Ss   08:53   0:00 /home/app/httpd/bin/httpd -k start
daemon    2980  0.1  0.3  52300  4856 ?        S    08:53   0:00 /home/app/httpd/bin/httpd -k start
daemon    2981  0.1  0.3  52300  4856 ?        S    08:53   0:00 /home/app/httpd/bin/httpd -k start
daemon    2982  0.2  0.3  52300  4856 ?        S    08:53   0:00 /home/app/httpd/bin/httpd -k start
daemon    2983  0.2  0.3  52300  4856 ?        S    08:53   0:00 /home/app/httpd/bin/httpd -k start
daemon    2984  0.1  0.3  52300  4856 ?        S    08:53   0:00 /home/app/httpd/bin/httpd -k start
daemon用戶開啓的進程所有爲對應root進程的子進程,具體的能夠本身深刻研究。


注意:啓動apache可能報以下錯誤


httpd: Syntax error on line 502 of /usr/local/apache2/conf/httpd.conf: Cannot load /usr/local/apache2/modules/libphp5.so into server: /usr/local/apache2/modules/libphp5.so: cannot restore segment prot after reloc: Permission denied
解決辦法: 關閉selinux便可。
setenforce 0
具體緣由能夠參考:http://soft.chinabyte.com/os/104/12170104.shtml 


Apache配置文件

apache的主配置文件中各個關鍵詞的做用:

其中配置文件的語法是 指令 + 值 (多個值用空格分開);# 爲註釋(#前不能有字符);指令太長能夠用 "\" 續行;建議指令首字母大寫,使用駝峯法,參數值區分大小寫;


ServerRoot "/usr/local/apache2"                      // apache安裝的路徑

Listen 80                                            // 監聽本機80端口(多網卡下,多個ip均可以訪問)
Listen 192.168.1.200:80                              // 服務器多網卡狀況,監聽某個網卡ip的的80端口
Listen 192.168.1.200:443 https                       // 非http協議的狀況
                     
// IfModule對靜態模塊的判斷,靜態模塊是編譯apache時引入的,動態模塊(*.so 如:libphp5.so)是安裝完成以後手動外掛上去的,IfModule 能夠嵌套,具體這裏再也不詳細列舉。 
<IfModule !mpm_netware_module>  
<IfModule !mpm_winnt_module>                   // 非windows平臺
User daemon                                          // 啓動apache的用戶與組
Group daemon
</IfModule>
</IfModule>

ServerAdmin  ahern88@163.com                         // 使用管理員郵箱便可

ServerName                           // 服務器名,如有host寫入host名,無host寫本機ip便可

DocumentRoot "/usr/local/apache/htdocs"              // apache根目錄

-----其餘配置段在下節介紹-----

ErrorLog "logs/error_log"                            // 定義錯誤日誌

LogLevel warn                                        // 定義錯誤日誌級別

DefaultType  text/plain                              // 定義默認http響應文件類型

Include  extra/httpd-vhosts.conf                     // 引入附加配置文件

LoadModule  wsgi_module  modules/mod_wsgi.so         // 載入動態模塊,語法 : LoadModule module名 module路徑

Apache配置段


<IfDefine ClosedForNow>
</Ifdefine>

<IfModule !mod_mime_magic.c>
      <IfModule !bbb>     // 配置段容許嵌套
      </ifModule>
</IfModule>

<IfVersion >=2.1>            // Apache版本信息
</IfVersion>

<Directory /dir/>
    AllowOverride None        // 容許.htaccess 覆蓋此配置
    Options None         // 不容許列出文件列表,開啓使用 Options Indexes
    Order allow,deny          // 先容許再拒絕
    Allow from all        // 容許全部請求
    Deny  from 192.168.1.200  // 拒絕ip訪問
</Directory>

<DirectoryMatch 'regx'>
</DirectoryMatch>

<Files demo.html>
</Files>

<FilesMatch "^\.ht">         // 禁止直接訪問 .htaccess文件等
    Order allow,deny
    Deny from all
    Satisfy All
</FilesMatch>

<Location '/pic' >          // Location經過配置  rewriter.so 模塊重寫url地址
</Location>

<LocationMatch 'regx'>
</LocationMatcn>


// 作幾個例子
1.載入php模塊
LoadModule php5_module modules/libphp5.so
<IfModule dir_module>
    DirectoryIndex index.php index.html     // 這裏能夠在給一個通用錯誤頁面屏蔽,目錄訪問  commons/error.html
    AddType application/x-httpd-php .php
</IfModule>

2. 發佈一個目錄  /var/www/html/(注意該目錄必須是擁有 daemon 用戶和組的權限) ,經過 http://ip:8080/dir/
/var/www/html/下有abc.html bbb.html

Alias /dir/ "/var/www/html/"   // 注意,這裏必定不要寫成  /var/www/html ,最後的 / 必須加上
<Directory "/var/www/html">  AllowOverride None  (All) 不容許被覆蓋 .htaccess文件
Options Indexes FolowSymLinks   容許索引,容許符號連接
Order Allow,Deny
Allow from all
Deny from 192.168.1.101

<Files "bbb.html">         // 這裏設置了以後沒法訪問 bbb.html
Order Allow,Deny
Deny from all
</Files>
</Directory>

一樣也能夠經過 <Location> 限制URI地址


Apache虛擬主機配置

    若是想在一臺電腦上發佈多個web應用,那麼就必需要學會虛擬主機的配置,虛擬主機的配置能夠分爲兩種:
1. 基於IP地址
這種不多用,由於IP地址缺少,這樣作很浪費IP資源。

2. 基於域名
經過dns解析,將多個域名指向同一個ip地址。好比 (www.a.com   www.b.com   www.c.com)


// 這裏咱們能夠修改 httpd.conf 一樣也能夠修改 extra/httpd-vhosts.conf 而後將httpd.conf 中的Include打開

NameVirtualHost *:80  <VirtualHost *:80>              // 容許經過ip訪問本機
ServerName 192.168.1.200 
DocumentRoot /var/www/html
ErrorLog /usr/local/apache2/logs/error_log
CustomLog /user/local/apache2/logs/access_log combined
</VirtualHost>

<VirtualHost *:80>
ServerName www.a.com
DocumentRoot /var/www/a/
ErrorLog /var/www/a/logs/error_log
CustomLog /var/www/a/logs/access_log combined
</VirtualHost>

<VirtualHost *:80>
ServerName www.b.com
DocumentRoot /var/www/b/
ErrorLog /var/www/b/logs/error_log
CustomLog /var/www/b/logs/access_log combined
</VirtualHost>

<VirtualHost *:80>
ServerName www.c.com
DocumentRoot /var/www/c/
ErrorLog /var/www/c/logs/error_log
CustomLog /var/www/c/logs/access_log combined
</VirtualHost>
有時候咱們但願主機的配置有應用發佈者本身控制,而不但願他擁有修改apache配置的權力,那麼咱們能夠經過 .htaccess 文件控制。
前提須要開啓 AccessFileName .htaccess ,這個默認是開啓的;還有  AllowOverride  All 必須開啓。
.htaccess 文件內容以下
Options +Includes
AddType text/html shtml
AddHandler server-parsed shtml  
AuthName "Password Required"
AuthUserFile /www/passwords/password.file
AuthGroupFile /www/passwords/group.file 
Require Group admins

這樣該應用會覆蓋apache中的配置文件,完成應用本身控制訪問設置。
相關文章
相關標籤/搜索