HTTP基礎及基本配置
1、配置監聽的位址和端口;
Listen [IP:]PORT
例如:Listen 80 監聽所有80端口
2、配置所選用的MPM的屬性
配置使用編譯進不同MPM的httpd,編輯/etc/sysconfig/httpd配置檔案,定義如下行:
HTTPD=/usr/sbin/httpd.worker
MPM:多道處理子產品
prefork: 一個程序響應一個請求;
主程序功能
(1) 綁定特權端口;
(2) 派發或回收子程序;
(3) 讀取分析主配置檔案;
worker:一個程序生成多個線程,一個線程響應一個請求;
預設使用的是prefork模型、如果要使用worker模型,要在配置檔案裡啟用
event: 在httpd-2.2 版本上隻是測試的
httpd指令選項:
httpd -h:列出所有選項
httpd -l:顯示核心子產品
httpd -D:顯示所有已裝載的子產品
httpd -t:測試配置檔案
# vim /etc/httpd/conf/httpd.conf打開配置檔案:
<IfModule prefork.c>條件性指令,判斷這個子產品是否存在,存在下面的配置就生效
StartServers 8 剛啟動web服務的時候,啟動幾個空閑程序
MinSpareServers 5 最小空閑程序數
MaxSpareServers 20 最大空閑程序數
ServerLimit 256 最多允許并發的程序活動個數
MaxClients 256 伺服器允許連進來的用戶端數目
MaxRequestsPerChild 4000 一個程序最多可以處理多少個請求
</IfModule>
3、配置伺服器支援keep-alived是否支援常連接配接
KeepAlive {On|Off}
對于比較空閑的伺服器,建議KeepAlive on;對于非常忙的伺服器,建議KeepAlive off
KeepAliveTimeout 2 最多允許使用2秒
MaxKeepAliveRequests 50 一次連接配接之内,最多允許50個資源請求
4、配置加載的子產品
LoadModule foo_module modules/mod_foo.so
5、配置站點根目錄
DocumentRoot "" 定義網頁存放目錄
<Directory "FS_PATH">
</Directory>
<Location "URL">
</Location>
例如/var/www/html/images/logo.jpg,根目錄為/var/www/html,那麼我們的通路路徑就是:http://www.magedu.com/images/logo.jpg
6、配置頁面檔案通路屬性
Options
Indexes: 是否允許索引頁面檔案,建議關閉;除非提供專門下載下傳可以打開
FollowSynLinks: 是否跟随軟連結檔案;不安全。
SymLinksifOwnerMatch:是屬主的話允許連結
ExecCGI:是否允許執行CGI腳本;
All:
None:
7、通路控制
基于用戶端通路控制:(基于ip位址通路控制)
Order:定義allow和deny哪個為預設法則;寫在後面的為預設法則:寫在前面的指令沒有顯式定義的即受後面的指令控制;
(1) Order allow,deny
Allow from 172.16.0.0/16 僅允許172.16.0.0/16 網段内客戶通路
(2) Order allow,deny
Deny from 172.16.4.12 拒絕所有使用者通路
(3) Order allow,deny
Deny from 172.16.4.12
Allow from 172.16.0.0/16
位址範圍比對越小的是最佳比對,172.16.4.12 最小,是以為拒絕172.16.4.12 網段内客戶通路
基于使用者通路控制
8、userdir
讓每個使用者都擁有個人站點:http://HOST/~username/
需要啟用UserDir public_html
需要設定使用者對家目錄檔案的通路控制權限
9、定義預設首頁面:
DirectoryIndexindex.php index.jsp index.html
預設先找最左側的,也就是index.php
10、配置日志功能 預設路徑在/var/log/httpd/
日志有兩類:通路日志(格式需自定義)、錯誤日志
錯誤日志:
ErrorLog "/path/to/error_log_file"
通路日志:
CustomLog /PATH/TO/CUSTEOM_LOG_FILE LOGFORMAT, 例如:
CustomLog logs/access_log combinedcombined
LogFormat 定義格式
安裝httpd-manual包,service httpd reload重新載入服務,在浏覽器中鍵入172.16.4.1/manual/就可以在本地通路了:
Log Files ==> format strings 就可以檢視定義的日志格式了
11、設定預設字元集
AddDefaultCharset UTF-8
12、路徑别名
DocumentRoot "/web/htdocs"
http://www.magedu.com/images/logo.gif ==> /web/htdocs/images/logo.gif
定義别名為/www/static/
通路路徑就是/www/static/logo.gif
首先:定義Alias /images/ "/www/static/"
然後:建立目錄/www/static/ 在目錄下建立檔案index.html 在檔案裡面編輯内容
最後:重新載入service httpd reload
我們重新通路172.16.0.1/images時,看到的内容會變成所定義别名的路徑下的内容。
13、腳本路徑别名:
CGI:協定
ScriptAlias /PATH/ /PATH/TO/SOMFEDIR/
例如:ScriptAlias /cgi-bin/ "/var/www/cgi-bin/"或者ScriptAlias /cgi-bin"/var/www/cgi-bin"
注意/cgi-bin和/var/www/cgi-bin後面要保持一緻
操作:
#cd /etc/httpd/conf
#mkdir -pv /website/cgi-bin/
#vim /website/cgi-bin/test.sh
CGI測試腳本
#!/bin/bash
#
cat << EOF
Content-Type: text/html
<pre>
The hostname is: `/bin/hostname`.
The time is: `date`.
</pre>
EOF
給腳本執行權限,腳本執行結果為:
The hostname is: station93.magelinux.com.
The time is: Sat Aug 17 01:11:13 CST 2013.
# end of cgi script file
用浏覽器通路172.16.4.1/cgi-bin/test.sh 可以通路到
14、基于使用者通路控制
DocumentRoot "/var/www/html"
<Directory "/PATH/TO/DocumentRoot_SUBDIR">
Options None
AllowOverride AuthConfig 是否允許覆寫
AuthName "Realm" 認證名稱
AuthType Basic 認證類型
AuthUserFile /path/to/passwords 使用者賬戶檔案叫什麼,
Require jerry tom 哪些使用者可以登陸
</Directory>
(1) 建立使用者帳号檔案
htpasswd -c -m /path/to/password_file USERNAME
第一次建立檔案添加使用者的時候用-c選項,以後就不能用-c選項了,否則會将原來的檔案内容覆寫的。
(2) 一個配置示例
<Directory "/website/htdocs/downloads">
Options Indexes
AllowOverride AuthConfig
AuthName "Only for employees."
AuthType Basic
AuthUserFile /etc/httpd/conf/.htpass
Require valid-user 允許所有使用者登陸
</Directory>
重新載入後,當使用者通路172.16.4.1/website/htdocs/downloads時,會提示使用者輸入密碼。
(3)組
組檔案:
組名:使用者1 使用者2 使用者3
AuthGroupFile
Require GRP_NAME
15、虛拟主機 :一個web程式服務于多個站點
虛拟主機類型:
(1)基于端口的虛拟主機:
(2)基于IP的虛拟主機:
(3)基于主機名的虛拟主機:
請求封包首部有一個Host:,保留了主機名稱,所有web伺服器收到請求後,能夠看到Host所對應的是哪個主機,這樣基于主機名的虛拟主機才能實作。
虛拟主機和主伺服器不能同時使用:關閉主伺服器,注釋主伺服器的DocumentRoot即可;
每個虛拟主機的定義:
<VirtualHost IP:PORT>
ServerName
DocumentRoot ""
</VirutalHost>
(1) 基于端口的虛拟主機
首先確定監聽在所要求的端口,然後關閉主伺服器的DocumentRoot,在配置檔案 /etc/httpd/conf/httpd.conf中定義:
<VirtualHost *:80>
ServerName www.a.com 可以随便定義,因為它不差別主機名稱
DocumentRoot "/web/host1/"
<VirtualHost *:8080>
ServerName www.b.org
DocumentRoot "/web/host2/"
配置檔案編輯完成。
目錄不存在,是以先要建立mkdir -pv /web/host{1,2}
然後編輯網頁内容進行測試#vim /web/host1/index.html
#vim /web/host2/index.html
重新開機服務。這樣基于端口就可以通路網頁了。
(2)基于IP的虛拟主機
例如:
<VirtualHost 172.16.4.1:80>
ServerName www.a.com
DocumentRoot "/web/host1/"
ServerName www.b.org
DocumentRoot "/web/host2/"
編輯網頁内容,重新開機服務。這樣基于ip的虛拟主機就可以通路網頁了。
(3)基于主機名的虛拟主機
httpd-2.2: NameVirtualHost
虛拟主機單獨配置:
CustomLog
ErrorLog
<Directory "">
ScriptAlias /cgi-bin/
Alias
#NameVirtualHost *:80修改為NameVirtualHost 172.16.4.1:80
<VirtualHost 172.16.4.1:80>
ServerName www.a.com
DocumentRoot "/web/host1/"
</VirutalHost>
ServerName www.b.org
DocumentRoot "/web/host2/"
然後service httpd restart
用本機測試先要編輯/etc/hosts
172.16.4.1www.a.com a.com
172.16.4.1 www.b.org b.org
安裝elinks包,測試
#elinks http://www.a.com進入互動式模式測試
#elinks http://www.b.org
#elinks -dump http://www.a.com可以不用進入互動式模式測試
#elinks -dump http://www.b.org
本文轉自 宋鵬超 51CTO部落格,原文連結:http://blog.51cto.com/qidian510/1280123,如需轉載請自行聯系原作者