httpd:
安裝方法:yum -y install httpd
rpm -ql httpd #查看有哪些配置文件的;
/etc/httpd/conf/magic #定義本地主機如何識別mime格式的,通過mime編碼而來的其他的非純文本文檔。
/etc/rc.d/init.d/httpd #服務腳本的啓動文件
/etc/sysconfig/httpd #服務腳本的配置文件
我們將/etc/sysconfig/httpd下面的配置文件進行更改,我們的服務腳本就可以允許在不同的模式下了。
/usr/bin/ab #apache壓力測試所用的配置文件;
/usr/bin/htpasswd #基於權限進行創建;
下面我們查看下服務是否開啓使用這個命令:
[root@localhost test]# netstat -tnlp |grep 80
tcp 0 0 :::80 :::* LISTEN 27259/httpd
[root@localhost test]# ps -aux |grep http
[root@localhost test]# ps -aux |grep http
Warning: bad syntax, perhaps a bogus '-'? See /usr/share/doc/procps-3.2.7/FAQ
root 27259 0.0 0.3 175308 3192 ? Ss 17:46 0:00 /usr/sbin/httpd
apache 27260 0.0 0.2 175308 2380 ? S 17:46 0:00 /usr/sbin/httpd
apache 27261 0.0 0.2 175308 2380 ? S 17:46 0:00 /usr/sbin/httpd
apache 27262 0.0 0.2 175308 2380 ? S 17:46 0:00 /usr/sbin/httpd
apache 27263 0.0 0.2 175308 2380 ? S 17:46 0:00 /usr/sbin/httpd
apache 27264 0.0 0.2 175308 2380 ? S 17:46 0:00 /usr/sbin/httpd
apache 27266 0.0 0.2 175308 2380 ? S 17:46 0:00 /usr/sbin/httpd
apache 27267 0.0 0.2 175308 2380 ? S 17:46 0:00 /usr/sbin/httpd
apache 27268 0.0 0.2 175308 2380 ? S 17:46 0:00 /usr/sbin/htt
這個時候就可以在客戶端查看web服務器的歡迎頁面了;這個時候我們看到的這個歡迎頁面的默認地址爲/etc/httpd/conf.d/welcom.conf
修改web服務器的頁面路徑下的配置文件:
[root@localhost html]# pwd
/var/www/html
[root@localhost html]# cat a.html
<html>
<tittle>haha</tittle>
<body>
welcom to my test file.
</body>
</html>
[root@localhost html]# service httpd restart
這個時候,我們去訪問的時候,給個頁面。發現還是沒法查看,因爲默認的頁面需要手動去指定。
[root@localhost conf]# pwd
/etc/httpd/conf
[root@localhost conf]# grep "Section" httpd.conf
### Section 1: Global Environment
### Section 2: 'Main' server configuration
### Section 3: Virtual Hosts
注意:要有主服務器段,就不能有虛擬主機,有虛擬主機就不能有主服務器段。因爲我們安裝的apache是系統自帶的,所以版本比較低。
[root@localhost conf]# more /etc/httpd/conf/httpd.conf
KeepAlive Off #是否開啓長鏈接;
長鏈接的時間針對不同的服務器來講,需要進行不同的測試。
我們可以使用ab參數進行測試,LoadRunner。
APACHE MPM模塊:
Apache HTTP 服務器被設計爲一個功能強大,並且靈活的 web 服務器, 可以在很多平臺與環境中工作。不同平臺和不同的環境往往需要不同 的特性,或可能以不同的方式實現相同的特性最有效率。Apache httpd 通過模塊化的設計來適應各種環境。這種設計允許網站管理員通過在 編譯時或運行時,選擇哪些模塊將會加載在服務器中,來選擇服務器特性。
Apache HTTP 服務器 2.0 擴展此模塊化設計到最基本的 web 服務器功能。 它提供了可以選擇的多處理模塊(MPM),用來綁定到網絡端口上,接受請求, 以及調度子進程處理請求。
擴展到這一級別的服務器模塊化設計,帶來兩個重要的好處:
Apache httpd 能更優雅,更高效率的支持不同的平臺。尤其是 Apache httpd 的 Windows 版本現在更有效率了,因爲 mpm_winnt 能使用原生網絡特性取代在 Apache httpd 1.3 中使用的 POSIX 層。它也可以擴展到其它平臺 來使用專用的 MPM。
Apache httpd 能更好的爲有特殊要求的站點定製。例如,要求 更高伸縮性的站點可以選擇使用線程的 MPM,即 worker 或 event; 需要可靠性或者與舊軟件兼容的站點可以使用 prefork。
在用戶看來,MPM 很像其它 Apache httpd 模塊。主要是區別是,在任何時間, 必須有一個,而且只有一個 MPM 加載到服務器中。可用的 MPM 列表位於 模塊索引頁面
下表列出了不同系統的默認 MPM。如果你不在編譯時選擇,那麼它就是你將要使用的 MPM。
Netware mpm_netware
OS/2 mpmt_os2
Unix prefork,worker 或 event,取決於平臺特性
Windows mpm_winnt
在 Unix 或類似平臺中,MPM 可以構建爲動態模塊,與其它動態模塊一樣在運行時加載。 構建 MPM 爲動態模塊允許通過修改 LoadModule 指令內容來改變 MPM,而不用重新構建服務器程序。
在執行 configure 腳本時,使用 --enable-mpms-shared 選項可以啓用此特性。 當給出的參數爲 all 時,所有此平臺支持的 MPM 模塊都會被安裝。還可以在參數中給出模塊列表。
默認 MPM,可以自動選擇或者在執行 configure 腳本時通過 --with-mpm 選項來指定,然後出現在生成的服務器配置文件中。 編輯 LoadModule 指令內容可以選擇不同的 MPM。
MPM: Multi Path Modules (多道處理模塊)定義apache來處理多個用戶請求時候的模型 98分鐘
mpm_winnt
prefork (一個請求用一個進程響應)
worker (一個請求用一個線程響應) (web服務器生成多個進程,同時每個進程可以生成多個線程,用一個線程響應一個用戶請求。默認情況下,服務啓動的時候,
生成兩個進程。linux上經過測試發現worker模型沒有event模型好)
event (一個進程處理多個請求) 2.4以後默認就支持event這個機制。多路複用多線程web服務器
2.2默認使用的是prefork,穩定性可以。
當前服務器使用的模塊有哪些:可以使用如下命令:這些都是編譯好的。
[root@localhost conf]# httpd -l
Compiled in modules:
core.c
prefork.c
http_core.c
mod_so.c
/usr/sbin/httpd.event
/usr/sbin/httpd.worker
[root@localhost conf]# rpm -ql httpd|grep bin
/usr/sbin/httpd.event
/usr/sbin/httpd.worker
如果想使用某一個模型只需要更改另外一個配置文件即可:
[root@localhost conf]# cat /etc/sysconfig/httpd #全局的配置文件
# Configuration file for the httpd service.
#
# The default processing model (MPM) is the process-based
# 'prefork' model. A thread-based model, 'worker', is also
# available, but does not work with some modules (such as PHP).
# The service must be stopped before changing this variable.
#
#HTTPD=/usr/sbin/httpd.worker
2.2中event不建議用,bug多。測試版本。2.4以後使用event比較好。
以上說明了如何在redhat上切換MPM可執行的對應程序的。而這個可執行程序編譯完成後,就確定使用哪一些MPM了。因此紅帽編譯了三次,生成了三個MPM。
同時在主配置文件中,有三個模型.下面說明模塊的使用屬性:
<IfModule prefork.c>
StartServers 8
MinSpareServers 5
MaxSpareServers 20
ServerLimit 256 #最多允許多少個用戶請求
MaxClients 256 #最多允許多少個用戶,修改這個參數之後需要將此進程kill掉,然後再開啓。
MaxRequestsPerChild 4000 #一個進程最多響應多少個用戶請求,達到這個次數之後,無論如何將其kill掉,再生成一個新的進程。
</IfModule> #注意所有的數據都需要自己進行測試。
<IfModule worker.c>
StartServers 2 #默認啓動的進程數
MaxClients 150
MinSpareThreads 25 #最小空閒線程
MaxSpareThreads 75 #最大空閒線程數
ThreadsPerChild 25 #一個進程可以生成多少個線程
MaxRequestsPerChild 0 #每一個進程最多響應多少個請求,因爲進程不處理用戶請求,所以設置爲0,表示不做限定。
</IfModule>
#Listen 12.34.56.78:80
Listen 80#說明監聽當前主機上的所有80端口。listen指令可以出現多次。
LoadModules#指定apache要裝載的模塊;
Include conf.d/*.conf
User apache #開啓服務器所用的用戶
Group apache #開啓服務所用的組名
httpd屬性配置:
[root@localhost conf]# grep "Section" httpd.conf
### Section 1: Global Environment
### Section 2: 'Main' server configuration
### Section 3: Virtual Hosts
分爲三段當你,2,3段是衝突的。只能啓用一個。
UseCanonicalName Off #使用正式名稱;
DocumentRoot "/var/www/html" #文檔根目錄,這個目錄也是可以更改的;
URL路徑與本地系統路徑不是一個概念;URL路徑是對應於DocumentRoot路徑而言的。同時默認需要定義它可以被那些用戶訪問。
options定義其下的路徑如何被訪問,默認路徑的權限這裏也做限定。
這個就是做默認路徑的訪問控制的;
<Directory "/var/www/html">
#
# Possible values for the Options directive are "None", "All",
# or any combination of:
# Indexes Includes FollowSymLinks SymLinksifOwnerMatch ExecCGI MultiViews
#
# Note that "MultiViews" must be named *explicitly* --- "Options All"
# doesn't give it to you.
#
# The Options directive is both complicated and important. Please see
# http://httpd.apache.org/docs/2.2/mod/core.html#options
# for more information.
#
Options Indexes FollowSymLinks #定義索引文件,將該目錄下的所有內容都看到,默認是開放的,需要禁用。但是
當我們做下載的時候不需要禁用。Indexes 允許索引目錄的。Options後面加none表示所有都不支持。
FollowSymLinks是否支持鏈接文件。這裏的是允許使用符號鏈接。
Options有五個默認沒有任何功能;
Indexes Includes FollowSymLinks SymLinksifOwnerMatch ExecCGI MultiViews
None: 不支持任何選項
Indexes: 允許索引目錄
FollowSynLinks: 允許訪問符號鏈接指向的原文件
Includes: 允許執行服務端包含(SSI)SEVER SIDE INCLUDE #這個也不安全,除非特殊需要
SymLinksifOwnerMatch:允許執行符號鏈接,同時制定屬主跟httpd進程一直;
ExecCGI: 允許運行CGI腳本;是否允許CGI腳本。有的時候需要打開這個功能;
MultiViews:多視圖的一種機制;
All: 支持所有選項;
#
# AllowOverride controls what directives may be placed in .htaccess files.
# It can be "All", "None", or any combination of the keywords:
# Options FileInfo AuthConfig Limit
#
AllowOverride None #是否允許覆蓋
AllowOverride Authconfig #
#
# Controls who can get stuff from this server.
#
# Order allow,deny #用於定義IP或基於主機的訪問控制功能的。定義列表,先allow,後deny。deny是默認值。allow和deny的次序很關鍵。
# Allow from all #僅允許172.16.100.0訪問;
#拒絕:192.168.0.1訪問;
Order deny,allow
deny from 192.168.0.1 172.16.100.1
</Directory>
地址的表示方式:
IP
network/netmask
HOSTNAME: www.a.com
DOMAINNAME: zledu.com
Partial IP: 172.16, 172.16.0.0/16
在http2.4之後,不使用allow和deny的機制了。
修改完配置文件之後,可以使用httpd -t這個選項來查看配置文件的語法是否正確。
自己如何訪問自己?使用elinks純文本的瀏覽器。在純文本的界面下,瀏覽網頁的一個工具。
遠程鏈接的情況下,由於語言不匹配可能會出現亂碼。
elinks http://172.16.100.1
-dump 表示把網頁內容顯示完成之後,立即退出。
-source 顯示網頁的源碼;
AllowOverride Authconfig #如果改成none,就不會去讀取.htaccess配置文件。
AuthType Basic
AuthName "Restricted Files"
AuthUserFile /usr/local/apache/passwd/passwords
Require user zl
這個文件的創建只能用某一特定命令:
htpasswd -c -m AuthUserFile /usr/local/apache/passwd/passwords zl
如果要添加第二個用戶將-c參數去掉即可。
htpasswd -m AuthUserFile /usr/local/apache/passwd/passwords zl2
option:-D刪除用戶時使用。
AuthType Basic
AuthName "By Invitation Only"
# Optional line:
AuthBasicProvider file
AuthUserFile /usr/local/apache/passwd/passwords
AuthGroupFile /usr/local/apache/passwd/groups
Require group GroupName
如果使用Group驗證,則需要事先將這幾個用戶進行創建,創建完成後,編輯某一文件,在其下面寫上:
GroupName: rbowen dpitts sungo rshersey
Require valid-user #說明只要是AuthUserFile或者AuthGroupFile裏面有的用戶都可以拿過來使用。
httpd -M 查看系統裝的http的的模塊文件有哪些。
PV:page view頁面訪問量。網站統計值裏面經常用的指標;PV是按照天數來統計的;每天的頁面訪問量。必須是一個完整的頁面才行。
UV:USER VIEW ;每天的獨立IP訪問量。
apache:服務器
虛擬主機:
apache服務:
中心主機
虛擬主機
基於IP
IP1:80
IP2:80
基於端口
IP:80
IP:8080
基於域名
IP:80
主機名不同
www.zldu.com
www.a.org
www2.a.org
www.b.net
基於主機名,雖然也經過地址解析,但是http協議自身所帶的http頭信息裏面的host能夠幫我們找到正確的資源。
apache:
中心主機
虛擬主機
apache 2.4以後想定義什麼樣的主機就定義什麼樣的主機。
ServerName:
ServerAlias: #服務器也是可以有別名的;
DocumentRoot /www/a.org/
<Directory "/www/a.org"> #Directory封裝的是文件系統路徑
Option
AllowOverride
</Directory>
Alias
ErrorLog
CustomLog
<Location "/p_w_picpaths"> #定義URL的時候用的;所使用的方法只有Get方法,其他任何方法都不支持。
ScriptAlias #允許執行CGI腳本的路徑;有了CGI技術,我們的APACHE進程就能夠通過CGI協議調用另外一個進程,使其允許一段程序;將其允許結果返回給apache。
</Location>
html,text。
MVC
那麼如何將這所有的屬性用一個容器進行封裝:virtualhost
如何使用虛擬主機,得先取消中心主機,註釋中心主機的DocumentRoot即可。
虛擬主機的定義:
<VirtualHost HOST>
</VirtualHost>
HOST的格式:
基於IP,HOST的寫法
HOST
IP1:80
IP2:80
基於端口:
HOST
IP:80
IP:8080
基於域名:
*:80
ServerName 不同
如何建立自己的虛擬主機呢?方法如下:
編輯vim /etc/httpd/conf/httpd.conf將裏面的主配置文檔DocumentRoot進行註釋;
然後在/etc/httpd/conf.d目錄下面建個文件:
virtual.conf
[root@localhost conf.d]# cat virtual.conf
<VirtualHost 172.16.100.1:80>
ServerName www.zledu.com
DocumentRoot "/www/zledu.com"
CustomLog /var/www/httpd/zledu.com/access_log combined
<Directory "/www/d.gov">
Options None
AllowOverride none
Deny from 172.16.100.177
</Directory>
</VirtualHost>
<VirtualHost 172.16.100.2:80>
ServerName www.a.org
DocumentRoot "/www/a.org"
<Directory "/www/a.org">
Options None
AuthOverride authconfig
AuthType basic
AuthName "Restrict area"
AuthUserFile "/etc/httpd/.htpasswd"
Required valid-user
</Directory>
</VirtualHost>
htpasswd -c -m /etc/httpd/.htpasswd tom
htpasswd -m /etc/httpd/.htpasswd jerry
<VirtualHost 172.16.100.2:80>
ServerName www.d.goy
DocumentRoot "/www/d.goy"
</VirtualHost>
<VirtualHost 172.16.100.1:8080>
ServerName www.a.org
DocumentRoot "/www/b.net"
</VirtualHost>
[root@localhost conf.d]#
設定默認虛擬主機
<VirtualHost _default_:80>
DocumentRoot /www/default80
# ...
</VirtualHost>
<VirtualHost _default_:*>
DocumentRoot /www/default
# ...
</VirtualHost>
<Location /status>
SetHandler server-status
Order Deny,Allow
Deny from all
Allow from .foo.com
</Location>
服務器的狀態信息,一般情況下不開啓。只開啓給特定IP的特定用戶。
基於OPENSSL的HTTPS服務:
client server(443)
ssl協商完成之後,將公鑰信息發送給客戶端,客戶端對整數進行驗證,客戶端驗證完成後,發送一個對稱祕鑰給服務器端。
客戶端要信任證書頒發機構,能夠信任別人發的證書所用。
SSL會話在建立的時候跟主機名關係不大。ssl是沒法基於主機名進行區分的。
如果服務器只有一個IP地址,ssl的功能只能提供給一個虛擬主機。
yum install mod_ssl
rpm -ql mod_ssl
[root@localhost ~]# rpm -ql mod_ssl
/etc/httpd/conf.d/ssl.conf
/usr/lib64/httpd/modules/mod_ssl.so
/var/cache/mod_ssl
/var/cache/mod_ssl/scache.dir
/var/cache/mod_ssl/scache.pag
/var/cache/mod_ssl/scache.sem
下面模擬100.8做CA;
cd /etc/pki
ls
cd CA/
(umask 077;openssl genrsa -out private/cakey.pem 2048) #生成一個私有鑰匙對
ls -l private/
openssl req -new -x509 -key private//cakey.pem -out cacert.pem -days 3655
生成一個自簽證書,發給自己。
[root@localhost CA]# mkdir certs crl newcerts
[root@localhost CA]# touch index.txt
[root@localhost CA]# echo 01 >serial
more /etc/pki/tls/openssl.cnf
# the resulting certificates are compatible with Netscape
string_mask = MASK:0x2002
# req_extensions = v3_req # The extensions to add to a cer
tificate request
[ req_distinguished_name ]
countryName = Country Name (2 letter c
ode)
countryName_default = CN
countryName_min = 2
countryName_max = 2
stateOrProvinceName = State or Province Name (
full name)
stateOrProvinceName_default = Henan
localityName = Locality Name (eg, city)
localityName_default = Zhengzhou
0.organizationName = Organization Name (eg, c
ompany)
0.organizationName_default = zl
# we can do this but it is not needed normally :-)
#1.organizationName = Second Organization Name
(eg, company)
#1.organizationName_default = World Wide Web Pty Ltd
organizationalUnitName = Organizational Unit Name
(eg, section)
organizationalUnitName_default =Tech
[root@localhost CA]# openssl ca -in /tmp/httpd.csr -out /tmp/httpd.crt -days 3650
[root@localhost tmp]# rm httpd.c* -f
在172.16.100.1上進行配置:
[root@localhost httpd]# ls
conf conf.d logs modules run
[root@localhost httpd]# mkdir ssl
[root@localhost httpd]# cd ssl
[root@localhost ssl]# ls
[root@localhost ssl]# pwd
/etc/httpd/ssl
[root@localhost ssl]
(umask 077;openssl genrsa 1024 >httpd.key)
[root@localhost ssl]# openssl req -new -key httpd.key -out httpd.csr #生成一個證書頒發請求,注意裏面的內容跟配置文件一致;
[root@localhost ssl]# scp httpd.csr 172.16.100.8:/tmp #將證書申請放到172.16.100.8這個服務器上面去;
[root@localhost ssl]# scp 172.16.100.8:/tmp/httpd.crt ./ #將簽發好的證書放到本地;
[root@localhost ssl]# cd /etc/httpd/conf.d/
vi ssl.conf
<VirtualHost 172.16.100.1:443>
# General setup for the virtual host, inherited from global configuration
#DocumentRoot "/var/www/html"
#ServerName www.example.com:443
ServerName www.zledu.com
SSLCertificateFile /etc/httpd/ssl/httpd.crt
SSLCertificateKeyFile /etc/httpd/ssl/httpd.key
將如下目錄下的證書給windows進行傳輸一份,並改名字叫.crt結尾即可。直接安裝即可。受信任的證書頒發。
[root@localhost CA]# pwd
/etc/pki/CA
[root@localhost CA]# ls
cacert.pem
做測試的時候,要將這個證書頒發機構給加入到windows服務器裏面來。