HTTP概述
WWW的目的就是使信息更易於獲取,而不管它們的地理位置在哪裡。當使用超文本作為WWW文檔的標准格式後,人們開發了可以快速獲取這些超文本文檔的協議—HTTP協議,即超文本傳輸協議。
HTTP是應用級的協議,主要用於分布式、協作的信息系統。HTTP協議是通用的、無狀態的,其系統的建設和傳輸與數據無關。HTTP也是面向對象的協議,可以用於各種任務,包括名字服務、分布式對象管理、請求方法的擴展、命令等。
在Internet上,HTTP通信往往發生在TCP/IP連接上,其默認的端口為80,也可以使用其他端口。
web服務
web服務的實現采用客戶/服務器模型
客戶機運行www客戶程序-浏覽器,它提供良好、統一的用戶界面。浏覽器的作用就是解釋和顯示web頁面,響應用戶的輸入請求,並通過HTTP協議將用戶請求傳遞給web服務器。
web服務器運行服務器程序,它最基本的功能是偵聽和響應客戶端的HTTP請求,向客戶端發出請求處理結果信息。
web服務通常可以分為兩種:靜態web服務和動態web服務。
web服務工作原理
Web浏覽器使用HTTP命令向一個特定的服務器發出Web頁面請求。
若該服務器在特定端口(通常是TCP 80端口)處接收到Web頁面請求後,就發送一個應答並在客戶和服務器之間建立連接
服務器Web查找客戶端所需文檔,若Web服務器查找到所請求的文檔,就會將所請求的文檔傳送給Web浏覽器。若該文檔不存在,則服務器會發送一個相應的錯誤提示文檔給客戶端。Web浏覽器接收到文檔後,就將它顯示出來。
當客戶端浏覽完成後,就斷開與服務器的連接。
LAMP平台概述
什麼是LAMP
目前最為成熟的一種企業網站應用模式,可提供動態Web站點應用及開發環境
構成組件
Linux、Apache、MySQL、PHP/Perl/Python
LAMP的優勢
成本低廉
可定制、易於開發
方便易用、安全和穩定
Apache簡介
Apache起源
根據NCSA的服務器發展而來
源於 A Patchy Server,著名的開源Web服務軟件
1995年時,發布Apache服務程序的1.0版本
由Apache軟件基金會(ASF)負責維護
最新的名稱為 “Apache HTTP Server”
市場占有率60%左右
官方站點:http://httpd.apache.org/
主要特點
開發源代碼、跨平台應用
支持多種網頁編程語言
模塊化設計、運行穩定、良好的安全性
LAMP環境安裝軟件
httpd (提供 Apache 主程序)
mysql (MySQL 客戶端程序)
mysql-server (MySQL 服務器程序)
php (PHP 主程序含給 apache 使用的模塊)
php-devel (PHP 的發展工具,這個與 PHP 外掛的加速軟件有關)
php-mysql (提供給 PHP 程序讀取 MySQL 數據庫的模塊)
Apache主要的文件:
/var/www/cgi-bin/
默認給一些可執行的 CGI (網頁程序) 程序放置的目錄;當你輸入http://localhost/cgi-bin/ 時所顯示的數據所在。
/var/log/httpd/ 日志所放置的位置
/usr/sbin/apachectl
這個就是 Apache 的主要執行腳本,它可以主動的偵測系統上面的一些設定值,好讓你啟動 Apache 時更簡單。
/usr/sbin/httpd 是主要的 Apache 二進制執行文件
/usr/bin/htpasswd 做用戶驗證來生成驗證文件的命令
/var/www/cgi-bin/
默認給一些可執行的 CGI (網頁程序) 程序放置的目錄;當你輸入http://localhost/cgi-bin/ 時所顯示的數據所在。
/var/log/httpd/ 日志所放置的位置
/usr/sbin/apachectl
這個就是 Apache 的主要執行腳本,它可以主動的偵測系統上面的一些設定值,好讓你啟動 Apache 時更簡單。
/usr/sbin/httpd 是主要的 Apache 二進制執行文件
/usr/bin/htpasswd 做用戶驗證來生成驗證文件的命令
mysql主要的文件
/etc/my.cnf
這個是 MySQL 的配置文件,包括你想要進行 MySQL 數據庫的優化,或者是針對 MySQL 進行一些額外的參數指定, 都可以在這個文件裡面達成
/var/lib/mysql/
這個目錄則是 MySQL 數據庫文件放置的位置,通過備份這個目錄就可以備份數據庫
PHP主要的文件
/etc/httpd/conf.d/php.conf 安裝後自動生成
/etc/php.ini
PHP的主要配置文件,包括你的 PHP 能不能允許使用者上傳檔案?能不能允許某些低安全性的標志等等, 都在這個配置文件當中設定!
/usr/lib64/httpd/modules/libphp5.so
PHP這個軟件提供給 Apache 使用的模塊,必須存在!
/etc/php.d/mysql.ini, /usr/lib64/php/modules/mysql.so
PHP是否可以支持 MySQL 接口?是由 php-mysql 軟件提供的
/usr/bin/phpize, /usr/include/php/
如果你想要安裝類似 PHP 加速器以讓浏覽速度加快的話,那麼這個文件與目錄就得要存在,否則加速器軟件無法編譯成功,這兩個數據是 php-devel 軟件所提供的。
httpd.conf配置文件
httpd.conf配置文件主要由全局環境、主服務器配置和虛擬主機3個部分組成。每部分都有相應的配置語句,該文件所有配置語句的語法為“配置參數名稱 參數值”的形式。
httpd.conf中每行包含一條語句,行末使用反斜槓“\”可以換行,但是反斜槓與下一行中間不能有任何其他字符(包括空白)。
httpd.conf的配置語句除了選項的參數值以外,所有選項指令均不區分大小寫,可以在每一行前用“#”號表示注釋。
/usr/local/apache2/conf/httpd.conf
全局配置
ServerRoot
用於指定指定守護進程httpd的運行目錄,httpd在啟動之後自動將進程的當前目錄改變為這個目錄,因此如果設置文件中指定的文件或目錄是相對路徑,那麼真實路徑就位於這個路徑之下。
Timeout 60
用於定義客戶程序和服務器連接的超時間隔,超過這個時間間隔(以秒計)後,服務器將斷開與客戶機的連接。
PidFile run/httpd.pid 存放PID的文件位置。
Listen 80 設定http服務的默認端口。
User/Group 設定服務器程序的執行者與屬組。
KeepAlive On
在HTTP1.0中,一次連接只能作傳輸一次HTML請求,而KeepAltve參數用於支持HTTP1.1版本的一次連接、多次傳輸功能,這樣就可以在一次連接中傳遞多個HTML請求。雖然只有較新的浏覽器才支持這個功能,但最好還是使用“on”這個選項。
MaxKeepAliveRequests 500
MaxKeepAliveRequests為一次連接可以進行的HTML請求的最大請求次數。將其值設為0,將支持在一次連接內進行無限次的傳輸請求。事實上沒有客戶程序在一次連接中請求大多的頁面,通常達不到這個上限就完成連接了。
KeepAliveTimeout 15
KeepAliveTimeout測試一次連接中的多次請求傳輸之間的時間,如果服務器已經完成了一次請求,但一直沒有接收到客戶程序的下一次請求,當時間間隔超過了這個參數設置的值之後,服務器就斷開連接。
prefork 和 work 與內存管理有關
默認采用prefork,由/etc/sysconf/httpd文件決定
/usr/sbin/httpd:使用 prefork 模塊;
/usr/sbin/httpd.worker:使用 worker 模塊。
worker 模塊占用的內存較小,對於流量較大的網站來說,是一個比較好的選擇。prefork 雖然占用較大的內存,不過速度與 worker 差異不大,並且 prefork 內存使用設計較為優秀,可以在很多無法提供 debug 的平台上面進行自我除錯,默認適合小型網站。
MaxClients
服務器的能力畢竟是有限的,不可能同時處理無限多的連接請求,因此參數MaxClients就用於規定服務器支持的最多並發訪問的客戶數,如果這個值設置得過大,系統在繁忙時不得不在過多的進程之問進行切換來為這些客戶進行服務,這樣對每個客戶的反應就會減慢,並降低了整體的效率。如果這個值設置得較小,那麼系統繁忙時就會拒絕一些客戶的連接請求。當服務器性能較高時,可以適當增加這個值的設置。
MaxRequestsPerChild
使用於進程方式的Web務,常用的方式是一個子進程為一次連接服務,這樣造成的問題就是每次連接都需要生成、退出於進程的系統操作,這些額外的處理過程占據了計算機的大量處理能力。因此最好的方式是一個子進程可以為多次連接請求服務,這樣就不會造成這些生成、退出進程引起的系統消耗。Apache就采用了這樣的方式,一次連接結束後,子進程並不退出,而是停留在系統中等待下一次服務請求,這樣就極大地提高了性能。
ServerAdmin:管理員郵箱
ServerName:網站服務器的域名
DocumentRoot:網頁文檔的根目錄
DirectoryIndex:默認的索引頁文件
ErrorLog:錯誤日志文件的位置
CustomLog:訪問日志文件的位置
LogLevel:記錄日志的級別,默認為warn
Include:需要包含進來的其他配置文件
AddDefaultCharset UTF-8 強制客戶端用UTF-8 來顯示網頁
局部配置參數
可以使用和這對語句為主目錄或虛擬目錄設置權限,它們是一對容器語句,必須成對出現,它們之間封裝的是具體的設置目錄權限語句,這些語句僅對被設置目錄及其子目錄起作用。
AllowOverride (允許的覆寫參數功能): 表示是否允許額外配置文件 .htaccess 的某些參數覆寫
測試性能
ab命令:
Apache Benchmark,Apache基准測試工具
格式:ab [-q] -c 並發請求數 -n 總的請求數 [http://]域名[:端口]/路徑
構建虛擬web主機
虛擬Web主機
即在同一台服務器中運行多個Web站點的應用,其中每一個站點並不獨立占用一台真正的計算機
httpd支持的虛擬主機類型
基於域名的虛擬主機
構建2個虛擬Web站點:
www.benet.com,IP地址為 173.17.17.11
www.accp.com,IP地址為 173.17.17.11
在浏覽器中訪問這兩個域名時,分別顯示不同的內容
[root@www htdocs]# vim /etc/httpd/conf/httpd.conf
……
NameVirtualHost 173.17.17.11
DocumentRoot /var/www/html/benetcom
ServerName www.benet.com
DocumentRoot /var/www/html/accpcom
ServerName www.accp.com
基於IP地址的虛擬主機
構建2個虛擬Web站點:
www.benet.com,IP地址為 173.17.17.11
www.accp.com,IP地址為 192.168.4.1
在浏覽器中訪問這兩個IP時,分別顯示不同的內容
[root@www htdocs]# vi /etc/httpd/conf/httpd.conf
……
DocumentRoot /var/www/html/benetcom
ServerName www.benet.com
DocumentRoot /var/www/html/accpcom
ServerName www.accp.com
基於端口的虛擬主機
構建2個虛擬Web站點:
www.benet.com,IP地址、端口為 173.17.17.11:80
www.accp.com,IP地址、端口為 173.17.17.11:8080
在浏覽器中訪問這兩個端口時,分別顯示不同的內容
[root@www htdocs]# vi /etc/httpd/conf/httpd.conf
……
Listen 173.17.17.11:80
Listen 173.17.17.11:8080
DocumentRoot /var/www/html/benetcom
ServerName www.benet.com
DocumentRoot /var/www/html/accpcom
ServerName www.accp.com
建立系統用戶的個人主頁
1. 修改httpd.conf,啟用個人主頁功能
UserDir public_html
確認目錄區域設置
2. 建立個人主頁測試網頁
~/public_html/index.html
添加權限:chmod o+x /home/jerry/
3. 重新啟動httpd服務
service httpd restart
4. 訪問測試
http://www.benet.com/~user
httpd服務的訪問控制
基於用戶的訪問控制
添加認證授權設置
[root@www ~]# vi /etc/httpd/conf/httpd.conf
……
……
AuthName "AWSTATS "
AuthType Basic
AuthUserFile /usr/local/awstats/wwwroot/.htpasswd
require valid-user
……
基於用戶的訪問控制
創建存儲認證用戶賬號及口令的文件
需使用htpasswd工具
[root@www apache2]# htpasswd -c \
> /usr/local/awstats/wwwroot/.htpasswd awuser
基於用戶的訪問控制,也可以在用戶訪問的目錄下建立.htaccess文件來進行控制
還要針對目錄的AllowOverride 寫成authconfig
也要建立用戶認證文件
基於客戶端地址的訪問控制
Order配置項,定義控制順序
先允許後拒絕,默認拒絕所有:Order allow,deny
先拒絕後允許,默認允許所有:Order deny,allow
Allow、Deny配置項,設置允許或拒絕的地址
https安全訪問
HTTPS(全稱:Hypertext Transfer Protocol over Secure Socket Layer),是以安全為目標的HTTP通道,簡單講是HTTP的安全版。即HTTP下加入SSL層,HTTPS的安全基礎是SSL,因此加密的詳細內容就需要SSL。
HTTPS默認使用TCP的443端口
SSL工作時分為2個階段:
服務器認證階段
客戶端認證階段(可選)
Apache要安裝openssl
Apache要安裝mod_ssl模塊
Apache的ssl配置文件與ssl相應的模塊會被相應的存放在以下的目錄中。
/etc/httpd/conf.d/ssl.conf
/etc/httpd/modules/mod_ssl.so
默認安裝後就支持https了
生成自簽名證書
先建立一把private key預備提供給SSL證書簽名要求所用;
最後建立SSL證書文件(test certificates)。
使用字簽證書
[root@www certs]# vim /etc/httpd/conf.d/ssl.conf SSLCertificateFile /etc/pki/tls/certs/benet.crt SSLCertificateKeyFile /etc/pki/tls/certs/benet.key
如想實現https和http訪問分開,直接修改ssl.conf文件,啟用虛擬主機即可
PHP簡介
特點:
1、 跨平台:PHP程序可以運行在UNIX、Linux或Windows操作系統下。
2、嵌入HTML:因為PHP語言可以嵌入到HTML內部,所以PHP很容易學習。
3、簡單的語言:與Java和C++不同,PHP語言堅持以基本語言為基礎,然而它的功能強大到足以支持任何類型的Web站點。
4、效率高:和其他的解釋性語言相比,PHP系統消耗較少的系統資源。當PHP作為Apache Web服務器的一部分時,運行代碼不需要調外部二進制程序,服務器解釋腳本不需要承擔任何額外負擔。
5、支持各種數據庫:用戶可以使用PHP存取Oracle、Sybase、MS-SQL、MySQL、PostgreSQL、dBase、FilePro和Informix等類型的數據庫。
6、文件存取:PHP有許多支持文件存取函數。
7、文本處理:PHP有許多函數處理字符串,其中包括模式匹配的能力。
8、復雜的變量:PHP支持標量、數組、關聯數組等變量,這給用戶提供了支持其他的高級數據結構的堅實基礎。
9、支持圖像處理:用戶可以使用PHP動態創建圖像。
測試同php和mysql的結合
安裝論壇進行測試
准備論壇要安裝的數據庫
下載論壇程序代碼並解壓到網站根目錄
訪問網站,進行圖形界面安裝
使用管理中心對論壇進行設置