modules -> Functions 安裝與配置apache ########################################################################################### 獲取apache 從http://www.apache.org 獲取apache 2.0.44 安裝apache ------------------------------ 使用APACI配置a
modules -> Functions
安裝與配置apache
###########################################################################################
獲取apache
從http://www.apache.org獲取apache 2.0.44
安裝apache
------------------------------
使用APACI配置apache的安裝:
./configura
常用選項:
--help #可以查看所有的可用選項
--prefix=<PATH> #指定安裝目錄
--enable-module = <xxx|all|most> #xxx為名字為mod_xxx.c的模塊
--disable-module = xxx #xxx為名字為mod_xxx.c的模塊
--enable-shared = <xxx|max> #起用DSO(Dynamic Share Object),需要mod_so.c的支持
開始安裝
-------------------------------------------------------------------
make
make install
oks
與php 4.3.1 的集成
-------------------------------------------------------------------
---/configure --with-apxs2=/usr/local/apache2/bin/apxs <假如想安裝
mysql的話 --with-mysql=/usr/local/mysql >
make
make install
配置apache
-------------------------------------------------------------------
apache的主要配置文件:
httpd.conf
srm.conf
a
clearcase/" target="_blank" >ccess.conf
mime.types
magic
編輯httpd.conf
基本指令:
ServerType #為standalone或者是ine
td ServerRoot #apache的安裝目錄,默認為/usr/local/apache
LockFile #
服務器串行模式的加鎖文件位置,一般不需要改動
PidFile #記錄服務器運行時的pid的文件路徑
ResourceConfig #資源文件所在,讓srm.conf為空,則httpd.conf的相關值生效
AccessConfig #訪問權限文件的所在路徑
LoadModule #加載模塊
AddModule #加載模塊的順序
Port #監聽端口,默認為80
ServerAdmin #管理員信箱
ServerName #服務器名稱
DocumentRoot #站點文件所在路徑
測試配置是否正確
-------------------------------------------------------------------
apachectl configtest
啟動apache
-------------------------------------------------------------------
apachectl start 或者 httpd -k start
重起apache
-------------------------------------------------------------------
apachectl graceful 或者 httpd -k graceful
停止apache
-------------------------------------------------------------------
apachectl stop 或者 httpd -k stop
創建web site
###########################################################################################
apache默認的用戶和組為為apache
將站點的目錄和文件的權限賦予apache
find /usr/local/apache/ -exec chown apache {}find /usr/local/apache/ chgrp apache {}find /usr/local/apache/ -type -d chmod 755 {}find /usr/local/apache/ -type -f chmod 640 {} 給適當的文件適當的權限是一個管理員的責任所在。
內容處理
###########################################################################################
目錄內容處理
-------------------------------------------------------------------
DirectoryIndex index.htm index.html #默認文擋
當默認文檔不存在,且<Directory>Options中Indexes生效時:
HeaderName #頁面題頭文件
ReadmeName #頁面頁尾文件
IndexIgnore #隱藏文件規則
IndexOptions #控制目錄列表的外觀
目錄其他
-------------------------------------------------------------------
Alias /path/ "/<path>/" #別名定義
配置
MIME(multipropuse internet mail extend protocol)
-------------------------------------------------------------------
因為不常會修改,只做浏覽
AddHandler
SetHandler send-as-is # 按原狀發送
配置CGI(comment gateway interface)
-------------------------------------------------------------------
<Directory>Options +ExecCGI #以允許使用CGI
SetHandler cgi-script #設定CGI腳本類型
配置SSI
-------------------------------------------------------------------
因為apache方面的
性能專家Dean Gaudet不鼓勵使用SSI,所以我只是浏覽了一下,沒有詳細地記錄下來
使用日志
###########################################################################################
-------------------------------------------------------------------
LogLevel <emerg|alert|crit|warn|notice|info|de
bug> 簡略-->詳細 嚴重-->輕微
ErrorLog <path|pipe|syslog>
日志發送到文件:ErrorLog /var/www/log
日志發送到syslog:ErrorLog syslog:local <1-7> 默認為local 7
日志發送給管道:ErrorLog "|/usr/local/apache/bin/errordb insert"
日志傳輸
-------------------------------------------------------------------
文檔傳送日志告訴你服務器在與誰交互,交互什麼,是什麼時候交互,同哪裡交互TransferLog用法類似ErrorLog
自定義日志格式
-------------------------------------------------------------------
LogFormat
%a client ip
%A server ip
%b 響應http標頭以外的字節數
%{eviron}e 以eviron命名的變量的值
%f 被請求文件的路徑
%h client hostname
%{reqheader}i 名字為reheader的標頭的值
%l client的系統環境,IdentifyCheck為On且內容協商成功
%{modnote}n 名字為 modnote的短信的值
%p server port
%P server PID
%r 請求的第一行,包括URLmodth
%s 原始響應信息
%>s 返回浏覽器的響應狀態
%t 請求的發生時間[18/Nov?1999:13:02:58-0600]
%{timefmt}t 定義時間的顯示格式,因為基本不需要修改,所以省略了...
%T 處理請求的秒數
%u 請求用戶的登陸名
%U 被請求的URL,不包括參數
%v server name
%V 根據UseCanonicalName得到服務器名稱
通用日志的默認格式等價於
LogFormat "%h %l %u %t \" %r \" %>s %b"
LogFormat "%401u" #記錄未認證的用戶名
apache 預先定義了四種日志的格式:<combined|common|referer|agent>
CustomLog
-------------------------------------------------------------------
CoustomLog "/var/logs/httpd/access_logs" env = myCheck #否定為 env =! myCheck
SetEnvIf <Remote_Addr|Remote_host|Remote_user|Request_Method|Request_protocol|Request_URL> "condition" VarName
只要檢查屬性中符合Condition,就定義名字為VarName的變量
condition為
unix中的正則表達式(Regular Expression),可以查看man regex獲取詳細資料
LogFormat CustomLog 由mod_log_config.c提供<默認>
SentEnvIf mod_setenvif.c提供<默認>
CookieTracking CookieName CookieExpires
-------------------------------------------------------------------
由mod_usertrack.c提供<非默認>
<IfModule mod_usertrack>
CookieTracking <on|off>
CookieName myCookie
</IfModule>
CookieExpires 600 #也可以用 CookieExpires "3 weeks 2 days 4 hours 22 seconds"
注意CookieExpires不可以在<Directory>中,該選項為全局
AllowOverride
-------------------------------------------------------------------
All 允許.htaccess覆蓋httpd.conf中的所有目錄設置
Authconfig 允許覆蓋認證指令AuthName AuthType AuthUserFile AuthGroupFile 等
FileInfo 允許覆蓋目錄存取文件設置AddEncodeing AddLanguage AddType CookieTracking CookieName等
Indexes 允許覆蓋目錄索引設置
Limit 允許覆蓋allow deny order require
None 不允許覆蓋httpd.conf中的所有目錄設置
Options 允許覆蓋Options的設置
例子:用戶單擊流事件,引用記錄,代理記錄
虛擬主機
###########################################################################################
基於IP的虛擬主機
-------------------------------------------------------------------
<VirtualHost 202.119.219.28>
ServerName www.njfu.edu.cn
ServerAdmin
[email protected] DocumentRoot /var/www/
ServerAlias njfu.edu.cn
</VirtualHost>
基於域名的虛擬主機
-------------------------------------------------------------------
NameVirtualHost 202.119.219.28
<VirtualHost 202.119.219.28>
ServerName www.njfu.edu.cn
ServerAdmin
[email protected] DocumentRoot /var/www/
ServerAlias njfu.edu.cn main.njfu.edu.cn
</VirtualHost>
VirtualDocumentRoot
-------------------------------------------------------------------
mod_vhost_alias.c模塊提供
大大簡化了配置虛擬主機
一個好的管理員會為沒個虛擬站點分別設置不同的的按全性設置
安全性
###########################################################################################
IP構成
-------------------------------------------------------------------
首先拒絕一切,接著允許可以放行的服務
ICMP (ping / pong)
DNS DHCP
WWW SMTP POP PROXY.i.e
網絡配置文件
-------------------------------------------------------------------
/etc/sysconfig/network-script/ifcfg-eth0
------------------------------
DEVICE=eth0
onBOOT=yes
BOOTPROTO=static
IPADDR=131.107.200.1
NETMASK=255.255.0.0
GATEWAY=131.107.200.6
/etc/sysconfig/network
------------------------------
NETWORKING = YES
FORWARD_IPV4 = YES
HOSTNAME = NICOWARE
GATEWAYDEV = eth0
安全配置文件
-------------------------------------------------------------------
/etc/securetty
/etc/ftpuser
/etc/ssh
/etc/hosts.allow
/etc/hosts.deny #詳細可以查看man 5 host_access
防止root直接登陸是一個上策,便於發生惡性時間時的偵察
保護內容的安全性
-------------------------------------------------------------------
User apache #運行的用戶帳戶
Group apache #運行的用戶帳戶組
<Directory>
<Location>
<Files>
使用order,allow和deny總是並行處理的
<Directory>
Order allow,deny
Deny from all
Allow 192.168.0.1/255.255.255.0
</Directory>
身份驗證
-------------------------------------------------------------------
AuthType <Basic|Digest> #驗證方式
Basic驗證方式是用BASE64編碼,即是明文傳輸的
AuthName "nico's zone" #驗證區域名稱
AuthUserFile /var/www/authenticaton/.htuser #用戶密碼文件,使用htpasswd創建
AuthGroupFile /var/www/authenticaton/.htuser #用戶組文件,需要手工創建
require < user| group | valid-user > #需要滿足的條件
mod_digest.c<非默認>
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
AuthDigestFile
使用
數據庫文件保持用戶帳號和密碼
使用BSD DB2 格式,數據使用crypt()加密
dbmmanage可以創建BSD DB2 和DBM格式的數據庫
mod_auth_db.c <非默認>
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
AuthDBUserFile
AuthDBGroupFile
mod_auth_anon.c <非默認>
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Anonymous #允許匿名登陸的用戶名稱
Anonymous_MustGiveEmail <on/off> #匿名用戶必須提交E-MAIL
Anonymous_LogEmail <on/off> #記錄E-mail到log中
Anonymous_VerifyEmail <off/on> #檢查E-mail的有效性
Anonymous_NoUserId <off/on> #允許不用用戶名登陸
mod_digest.c<非默認>
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
因為覺得不常用所以沒有記錄
密碼文件創建程序
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
htpasswd htdigest dbmmanage
Satisfy
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
對在封閉模塊(如 <Directory> ),中認證策略的滿足條件
Satisfy <all|any>
<Limit> <LimitExcept>
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
<Limit> <LimitExcept>是邏輯上的對立
參數:CONNECT COPY DELETE GET(HEAD) OPTIONS LOCK MKCOL MOVE PATCH POST PROPFIND PROPPATCH PUT TRACE UNLOCK SSL
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
因為感覺商業應用比較常用,我暫時很用不到,等以後要用的時候在看好了
建立站點空間
###########################################################################################
決定規模 訪問量,站點內容
決定提供的服務 html cgi php perl
空間分配 設立quota
設置用戶主目錄 UserDir,用戶帳戶安全
與其他程序配合 DNS FTP SSH
故障處理
###########################################################################################
server-status
------------------------------
由模塊mod_status.c提供
報告服務器的狀態可以用命令 apachectl status
但是server-status可以提供更多的信息
ExtendedStatus On
<Location /server-status>
SetHandLer server-status
Options None
AllowOverride None
Order allow,deny
Deny from all
Allow from 127.0.0.1
</Location>
server-info
------------------------------
由模塊mod_info.c提供
<Location /server-info>
SetHandLer server-info
Options None
AllowOverride None
Order allow,deny
Deny from all
Allow from 127.0.0.1
</Location>