yum安裝apache服務器

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服務器裏面來。




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章