HTTP基础及基本配置
HTTP基礎(chǔ)及基本配置
1、配置監(jiān)聽(tīng)的地址和端口;
? ? Listen [IP:]PORT
? ? ? ? ? ? 例如:Listen 80?監(jiān)聽(tīng)所有80端口
2、配置所選用的MPM的屬性
配置使用編譯進(jìn)不同MPM的httpd,編輯/etc/sysconfig/httpd配置文件,定義如下行:
? ? HTTPD=/usr/sbin/httpd.worker
MPM:多道處理模塊
prefork: 一個(gè)進(jìn)程響應(yīng)一個(gè)請(qǐng)求;
? 主進(jìn)程功能
? ? ?(1) 綁定特權(quán)端口;
? ? ?(2) 派發(fā)或回收子進(jìn)程;
? ? ?(3) 讀取分析主配置文件;
worker:一個(gè)進(jìn)程生成多個(gè)線程,一個(gè)線程響應(yīng)一個(gè)請(qǐng)求;
? ? ? ? 默認(rèn)使用的是prefork模型、如果要使用worker模型,要在配置文件里啟用
event:?在httpd-2.2?版本上只是測(cè)試的
? ? ? ?httpd命令選項(xiàng):
? ? ? ? ? ? ?httpd -h:列出所有選項(xiàng)
? ? ? ? ? ? ?httpd -l:顯示核心模塊
httpd -D:顯示所有已裝載的模塊 ?
httpd -t:測(cè)試配置文件
? ? ?# vim?/etc/httpd/conf/httpd.conf打開(kāi)配置文件:
? ? ?<IfModule prefork.c>條件性指令,判斷這個(gè)模塊是否存在,存在下面的配置就生效
? ? ?StartServers ? ? ? 8?? ?剛啟動(dòng)web服務(wù)的時(shí)候,啟動(dòng)幾個(gè)空閑進(jìn)程
? ? ?MinSpareServers ? ?5?? 最小空閑進(jìn)程數(shù)
? ? ?MaxSpareServers ? 20?? 最大空閑進(jìn)程數(shù)
? ? ?ServerLimit ? ? ?256?? ?最多允許并發(fā)的進(jìn)程活動(dòng)個(gè)數(shù)
? ? ?MaxClients ? ? ? 256?? 服務(wù)器允許連進(jìn)來(lái)的客戶端數(shù)目
? ? ?MaxRequestsPerChild ?4000?一個(gè)進(jìn)程最多可以處理多少個(gè)請(qǐng)求
? ? ?</IfModule>
3、配置服務(wù)器支持keep-alived是否支持常連接
? ? ? KeepAlive {On|Off}
? ? ? ? ?對(duì)于比較空閑的服務(wù)器,建議KeepAlive?on;對(duì)于非常忙的服務(wù)器,建議KeepAlive?off
? ? ? KeepAliveTimeout 2??最多允許使用2秒
? ? ? MaxKeepAliveRequests 50??一次連接之內(nèi),最多允許50個(gè)資源請(qǐng)求
4、配置加載的模塊
? ? ? LoadModule foo_module modules/mod_foo.so
5、配置站點(diǎn)根目錄
? ? ? DocumentRoot ""?? ? 定義網(wǎng)頁(yè)存放目錄
? ? ?<Directory "FS_PATH">
? ? ?</Directory>
? ? ?<Location "URL">
? ? ?</Location>
例如/var/www/html/images/logo.jpg,根目錄為/var/www/html,那么我們的訪問(wèn)路徑就是:http://www.magedu.com/images/logo.jpg
6、配置頁(yè)面文件訪問(wèn)屬性
? ? ?<Directory "FS_PATH">
? ? ?Options
? ? ?Indexes: 是否允許索引頁(yè)面文件,建議關(guān)閉;除非提供專門(mén)下載可以打開(kāi)
? ? ?FollowSynLinks: 是否跟隨軟鏈接文件;不安全。
? ? ?SymLinksifOwnerMatch:是屬主的話允許鏈接
? ? ?ExecCGI:是否允許執(zhí)行CGI腳本;
? ? ?All:
? ? ?None:
? ? ?</Directory>
7、訪問(wèn)控制
基于客戶端訪問(wèn)控制:(基于ip地址訪問(wèn)控制)
Order:定義allow和deny哪個(gè)為默認(rèn)法則;寫(xiě)在后面的為默認(rèn)法則:寫(xiě)在前面的指令沒(méi)有顯式定義的即受后面的指令控制;
? ? (1) Order allow,deny
? ? ? ? ? Allow from 172.16.0.0/16?? 僅允許172.16.0.0/16?網(wǎng)段內(nèi)客戶訪問(wèn)
? ? (2) Order allow,deny
? ? ? ? ? Deny from 172.16.4.12 拒絕所有用戶訪問(wèn)
? ? (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 網(wǎng)段內(nèi)客戶訪問(wèn)
基于用戶訪問(wèn)控制
8、userdir
? ?讓每個(gè)用戶都擁有個(gè)人站點(diǎn):http://HOST/~username/
? ?需要啟用UserDir public_html
? ? ? ? 需要設(shè)定用戶對(duì)家目錄文件的訪問(wèn)控制權(quán)限
9、定義默認(rèn)主頁(yè)面:
? ? ? ? ?DirectoryIndexindex.php index.jsp index.html
? ? ? ? ?默認(rèn)先找最左側(cè)的,也就是index.php
10、配置日志功能 ? ? ? 默認(rèn)路徑在/var/log/httpd/
日志有兩類:訪問(wèn)日志(格式需自定義)、錯(cuò)誤日志
? ?錯(cuò)誤日志:
? ? ? ?ErrorLog "/path/to/error_log_file"
? ?訪問(wèn)日志:
? ? ? ?CustomLog /PATH/TO/CUSTEOM_LOG_FILE LOGFORMAT, 例如:
? ? ? ?CustomLog logs/access_log combinedcombined
? ?LogFormat?定義格式
? ? ? 安裝httpd-manual包,service httpd reload重新載入服務(wù),在瀏覽器中鍵入172.16.4.1/manual/就可以在本地訪問(wèn)了:
? ? ?Log Files?==>?format strings 就可以查看定義的日志格式了
11、設(shè)定默認(rèn)字符集
? ? ? AddDefaultCharset UTF-8
12、路徑別名
? ? ? DocumentRoot "/web/htdocs"
? ? ? http://www.magedu.com/images/logo.gif ?==> /web/htdocs/images/logo.gif
? ? ? 定義別名為/www/static/
? ? ? 訪問(wèn)路徑就是/www/static/logo.gif
? ?首先:定義Alias /images/ "/www/static/"
? ?然后:創(chuàng)建目錄/www/static/??在目錄下創(chuàng)建文件index.html ? ?在文件里面編輯內(nèi)容 ? ?
? ?最后:重新載入service httpd reload
? ?我們重新訪問(wèn)172.16.0.1/images時(shí),看到的內(nèi)容會(huì)變成所定義別名的路徑下的內(nèi)容。
13、腳本路徑別名:
CGI:協(xié)議
? ? 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測(cè)試腳本
#!/bin/bash
#
cat << EOF
Content-Type: text/html
<pre>
The hostname is: `/bin/hostname`.
The time is: `date`.
</pre>
EOF
給腳本執(zhí)行權(quán)限,腳本執(zhí)行結(jié)果為:
Content-Type: text/html
<pre>
The hostname is: station93.magelinux.com.
The time is: Sat Aug 17 01:11:13 CST 2013.
</pre>
# end of cgi script file
用瀏覽器訪問(wèn)172.16.4.1/cgi-bin/test.sh 可以訪問(wèn)到
14、基于用戶訪問(wèn)控制
? ? ? DocumentRoot "/var/www/html"
? ? ? <Directory "/PATH/TO/DocumentRoot_SUBDIR">
? ? ? Options None
? ? ? AllowOverride AuthConfig?? 是否允許覆蓋
? ? ? AuthName "Realm"?? ? ? ? ?認(rèn)證名稱
? ? ? AuthType Basic?? ? ? ? ? ? ?認(rèn)證類型
? ? ? AuthUserFile /path/to/passwords?用戶賬戶文件叫什么,
? ? ? Require jerry tom?? ? ? ? ? ? 哪些用戶可以登陸
? ? ? </Directory>
(1) 建立用戶帳號(hào)文件
? ? ?htpasswd -c -m /path/to/password_file USERNAME
? ? ?第一次創(chuàng)建文件添加用戶的時(shí)候用-c選項(xiàng),以后就不能用-c選項(xiàng)了,否則會(huì)將原來(lái)的文件內(nèi)容覆蓋的。
(2) 一個(gè)配置示例
<Directory "/website/htdocs/downloads">
? ?Options Indexes
? ?AllowOverride AuthConfig
? ?AuthName "Only for employees."
? ?AuthType Basic
? ?AuthUserFile /etc/httpd/conf/.htpass
? ?Require valid-user?? ? ? ?允許所有用戶登陸
</Directory>
重新載入后,當(dāng)用戶訪問(wèn)172.16.4.1/website/htdocs/downloads時(shí),會(huì)提示用戶輸入密碼。
(3)組
? ?組文件:
? ?組名:用戶1?用戶2?用戶3
? ?AuthGroupFile
? ?Require GRP_NAME
15、虛擬主機(jī)?:一個(gè)web程序服務(wù)于多個(gè)站點(diǎn)
虛擬主機(jī)類型:
(1)基于端口的虛擬主機(jī):
(2)基于IP的虛擬主機(jī):
(3)基于主機(jī)名的虛擬主機(jī):
請(qǐng)求報(bào)文首部有一個(gè)Host:,保留了主機(jī)名稱,所有web服務(wù)器收到請(qǐng)求后,能夠看到Host所對(duì)應(yīng)的是哪個(gè)主機(jī),這樣基于主機(jī)名的虛擬主機(jī)才能實(shí)現(xiàn)。
虛擬主機(jī)和主服務(wù)器不能同時(shí)使用:關(guān)閉主服務(wù)器,注釋主服務(wù)器的DocumentRoot即可;
每個(gè)虛擬主機(jī)的定義:
? ?<VirtualHost IP:PORT>
? ? ? ? ServerName
? ? ? ? DocumentRoot ""
? ?</VirutalHost>
(1) 基于端口的虛擬主機(jī)
首先確保監(jiān)聽(tīng)在所要求的端口,然后關(guān)閉主服務(wù)器的DocumentRoot,在配置文件?/etc/httpd/conf/httpd.conf中定義:
? ?<VirtualHost?*:80> ?
? ? ? ? ?ServerName?www.a.com ?可以隨便定義,因?yàn)樗粎^(qū)別主機(jī)名稱
? ? ? ? ?DocumentRoot "/web/host1/"
? ?</VirutalHost>
? ?<VirtualHost?*:8080>
? ? ? ? ?ServerName?www.b.org ?
? ? ? ? ?DocumentRoot "/web/host2/"
? ?</VirutalHost>
? ?配置文件編輯完成。
目錄不存在,所以先要?jiǎng)?chuàng)建mkdir -pv /web/host{1,2}
? ? 然后編輯網(wǎng)頁(yè)內(nèi)容進(jìn)行測(cè)試#vim /web/host1/index.html
? ? ? ? ? ? ? ? ? ? ? ? ? ? ?#vim /web/host2/index.html
重啟服務(wù)。這樣基于端口就可以訪問(wèn)網(wǎng)頁(yè)了。
(2)基于IP的虛擬主機(jī)
例如:
? ?<VirtualHost 172.16.4.1:80>
? ? ? ? ? ServerName?www.a.com ?
? ? ? ? ? DocumentRoot "/web/host1/"
? ?</VirutalHost>
? ?<VirtualHost 172.16.4.1:80>
? ? ? ? ? ServerName?www.b.org ?
? ? ? ? ? DocumentRoot "/web/host2/"
? ?</VirutalHost>
編輯網(wǎng)頁(yè)內(nèi)容,重啟服務(wù)。這樣基于ip的虛擬主機(jī)就可以訪問(wèn)網(wǎng)頁(yè)了。
(3)基于主機(jī)名的虛擬主機(jī)
httpd-2.2: NameVirtualHost
虛擬主機(jī)單獨(dú)配置:
? ? ?CustomLog
? ? ?ErrorLog
? ? ?<Directory "">
? ? ?</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>
? ? ?<VirtualHost 172.16.4.1:80>
? ? ? ? ? ? ServerName?www.b.org ?
? ? ? ? ? ? DocumentRoot "/web/host2/"
? ? ?</VirutalHost>
然后service httpd restart
用本機(jī)測(cè)試先要編輯/etc/hosts
172.16.4.1www.a.com??a.com
172.16.4.1?www.b.org?? b.org
安裝elinks包,測(cè)試
#elinks http://www.a.com進(jìn)入交互式模式測(cè)試
#elinks http://www.b.org
#elinks -dump http://www.a.com可以不用進(jìn)入交互式模式測(cè)試
#elinks -dump http://www.b.org
本文轉(zhuǎn)自 宋鵬超 51CTO博客,原文鏈接:http://blog.51cto.com/qidian510/1280123,如需轉(zhuǎn)載請(qǐng)自行聯(lián)系原作者
總結(jié)
以上是生活随笔為你收集整理的HTTP基础及基本配置的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Java iText PDF:用 iTe
- 下一篇: lua程序设计