LAMP平臺架構之:apache配置必知必會

LAMP架構之:apache配置必知必會

         在前面的博文中,聊了關於LAMP架構的搭建,httpd.conf配置文件的解析,這裏再聊一聊關於apache配置的必知必會的內容...所謂必知必會,基本上我覺得是應該知道和掌握的知識。這裏要說

明一下的是,此文還是針對apache 2.2的版本,雖然2.4中有所變化,但總體上能實現的功能是一致的。在此之後,還會出一篇關於2.22.4中有所區別的個人總結,也是給自己理一下思路。

         接下來,將針對性的聊一聊,apache配置中必知必會的東西

測試環境:

Hostnametest1.lxm.com

OSCentOS6.5x64

Soft: httpd-2.2.15

 

:本實驗中所有的軟件包,都是CentOS6.5x64 ISO中自帶的rpm軟件包

 

安裝httpd軟件包:

#yum –y install  httpd

 

.基本站點配置

         對於一個基本站點來說,基本上安裝好httpd軟件就已經搭建了一個基本站點,此時只要啓動httpd服務即可。但是這裏會遇到這樣一個錯誤:

[root@test1 conf]# service httpd start

Starting httpd: httpd: apr_sockaddr_info_get() failed for test1.lxm.com

httpd: Could not reliably determine the server's fully qualified domain name, using 127.0.0.1 for ServerName

                                                           [  OK  ]

[root@test1 conf]#

從上面的信息可以看出,啓動報錯了,但是此時查看httpd進程發現也啓動了,如下信息所示:
[root@test1 conf]# ps aux | grep httpd

root      1387  0.0  0.7 177772  3876 ?        Ss   17:00   0:00 /usr/sbin/httpd

apache    1389  0.0  0.4 177772  2484 ?        S    17:00   0:00 /usr/sbin/httpd

apache    1390  0.0  0.4 177772  2484 ?        S    17:00   0:00 /usr/sbin/httpd

apache    1391  0.0  0.4 177772  2484 ?        S    17:00   0:00 /usr/sbin/httpd

apache    1392  0.0  0.4 177772  2484 ?        S    17:00   0:00 /usr/sbin/httpd

apache    1393  0.0  0.4 177772  2484 ?        S    17:00   0:00 /usr/sbin/httpd

apache    1394  0.0  0.4 177772  2484 ?        S    17:00   0:00 /usr/sbin/httpd

apache    1395  0.0  0.4 177772  2484 ?        S    17:00   0:00 /usr/sbin/httpd

apache    1396  0.0  0.4 177772  2484 ?        S    17:00   0:00 /usr/sbin/httpd

root      1411  0.0  0.1 103244   844 pts/0    S+   17:01   0:00 grep httpd

[root@test1 conf]#

 

所以這個情況比較特殊,記得在以前的版本中,還沒有這個問題,基本上安裝後,啓動httpd服務即可。所以爲了解決這個問題,有兩種方式,其實這個我已經在LAMP架構搭建中說過,這裏在重複一下:

1.是修改httpd.conf文件中的ServerName,可以是IP形式,也可以是域名形式,當然如果你要使用默認站點配置域名主機,肯定是使用域名形式了,我這裏爲了方便測試,使用ip

wKioL1QZXI-Cr7tXAABqzs264Pc855.jpg

 

2./etc/hosts文件中,增加一條到主機名的解析

10.0.10.11        test1.lxm.com 

 

不管你使用那種方式,此時在重新啓動httpd服務:

[root@test1 conf]# service httpd restart

Stopping httpd:                                            [  OK  ]

Starting httpd:                                            [  OK  ]

[root@test1 conf]#

這裏信息顯示,已經不在報錯了,看一下瀏覽器在默認情況下的訪問頁面:
wKiom1QZXHjR8yapAAEoyCs7-ww986.jpg

 

信息顯示,默認訪問的是apache的歡迎測試頁面,如果能訪問到這個頁面,基本上站點訪問是沒有問題了。這裏是因爲還沒有配置自己的頁面,所以apache默認調用了歡迎頁面。

 

下面設置一個自己的測試頁面,看看效果:

[root@test1 conf.d]# cd /var/www/html

[root@test1 html]# ls

 [root@test1 html]# echo "<h1> this is a web test page !!! </h1>" > index.html

echo "<h1> this is a web test page ls! </h1>" > index.html

[root@test1 html]# ls

index.html

[root@test1 html]# cat index.html

<h1> this is a web test page ls! </h1>

[root@test1 html]#

 

這裏不用重啓httpd服務,站點的內容配置跟httpd服務沒有關係,只有當httpd的自身配置文件發生了變化,才需要重新啓動httpd服務以便應用新的設置。

 

測試:

wKioL1QZXJCgrWbHAADXzH2gsvI162.jpg

 

從訪問結果來看,能夠正常的訪問了。細心的人可能發現了,我輸入的是三個!號,怎麼出來變成ls!了。哈,這是因爲!!shell中有特殊的意義,表示調用最後一次指向的命令。

 

基本上一個默認站點,就是httpd的默認設置即可。但是這裏我要說的一個問題就是關於歡迎頁面的問題。有時候當你的配置發生問題的時候,你可能很容易打開的就是歡迎頁面的內容,此時你不知道到底是什麼問題?這個時候你要做的就是不讓它顯示歡迎頁面。

 

關於歡迎頁面的配置是在/etc/httpd/conf.d/welcome.conf,如果你不想顯示歡迎頁面,就刪除該配置文件,或者將其中的配置給註釋掉。

看一下該配置文件的內容,有個映像:

wKiom1QZXHiTKsdcAAEVkmI7raw936.jpg

 

這裏面其實有幾個要注意的地方,一個是LocationMatch,一個是-Indexes,一個是ErrorDocument,不知你是否都會,這個在後面會聊到,這裏就不贅述了。

 

.個人站點配置

         個人站點配置應該說是httpd的一個特色,不過除了提供個人站點的網站來說,基本上在公司裏面,我還沒見到過用到這個功能,不過了解一下還是有必要的。

 

對於剛接觸的人,這個配置還是有點晦澀的,其實httpd.conf配置文件中已經給了很充分的說明,先看一看:
wKioL1QZXJDx99GkAAEnyc_SXb0093.jpg

這個是httpd.conf關於用戶個人站點的一段註釋內容,這裏面很清楚的介紹了要怎麼樣配置個人站點,怎麼樣來訪問個人站點。(這裏我插一句,有人可能覺得我說的好多啊,我的本意就是不光要讓你知道怎麼配,還要讓你知道怎麼學習他怎麼配,學知識最後還要靠自己)

 

1.要想啓用個人站點功能,就必須開啓UserDir的功能,取消配置文件中對public_html相關的註釋

2.通過瀏覽器訪問的時候,如果接收到一個關於~user的訪問請求,就會調用這裏的配置,這裏的user在訪問的時候就是具體的用戶名,這裏的用戶名必須是系統上存在的用戶名

3.配置用戶的個人站點,必須開啓下面的public_html的目錄訪問設置,而且在每個用戶的家目錄下都必須創建public_html目錄,其實這裏的public_html目錄可以根據自己的意願進行修改,只要符合要求就行

4.關於用戶個人站點權限的設置,首先要知道的是用戶的個人站點所在的目錄是每個用戶自身的家目錄,對於氣家目錄必須是711的權限,其次在每個個人站點的家目錄下要創建public_html目錄,該目錄的權限必須是755的權限,而在public_html目錄下的內容都必須保證全局可讀的權限

 

下面以搭建tom用戶的個人站點爲例,來說明具體的過程:

第一步:創建需要搭建個人站點的用戶

wKioL1QZXQihbkprAAEPKQJCf0I330.jpg

第二步:打開httpd.conf配置文件中關於用戶個人站點的設置

wKioL1QZXQiAX592AAIqufRj1RE917.jpg

 

第三步:創建用戶個人站點目錄和測試文件

wKiom1QZXPCiQ61XAADj5z-zitk854.jpg

第四步:設置權限

[root@test1 tom]# cd /home

[root@test1 home]# ls -ld tom

drwx------ 3 tom tom 4096 Sep 17 09:33 tom

[root@test1 home]# chmod 711 tom

[root@test1 home]# ls -ld tom

drwx--x--x 3 tom tom 4096 Sep 17 09:33 tom

[root@test1 home]# cd tom

[root@test1 tom]# ls -l public_html/

total 4

-rw-r--r-- 1 root root 31 Sep 17 09:33 index.html

[root@test1 tom]# ls -ld public_html/

drwxr-xr-x 2 root root 4096 Sep 17 09:33 public_html/

[root@test1 tom]# chown -R tom.tom /home/tom/

[root@test1 tom]# ls -ld public_html/

drwxr-xr-x 2 tom tom 4096 Sep 17 09:33 public_html/

[root@test1 tom]#

 

第五步:重新啓動httpd服務

[root@test1 tom]# service httpd restart

Stopping httpd:                                            [  OK  ]

Starting httpd:                                            [  OK  ]

[root@test1 tom]#

 

第六步:瀏覽器測試訪問

 wKioL1QZXQjDtFazAADRyA4EbvY426.jpg

 

到這裏爲止,可以看到tom的個人站點搭建成功。這裏的步驟隨你個人的習慣,不一定非要一樣。

 

但是對於有些人似乎會有點疑問,我也大概知道你會有什麼疑問。接下來就針對這些疑問討論一下:

1.如果系統中有很多用戶,默認情況***釋掉UserDir disabled這個配置會開啓所有用戶的個人站點功能,這似乎會存在一種安全隱患,那此時怎麼辦?怎麼樣只開啓某些人的個人站點呢?

針對這個問題,配置如下:

wKiom1QZXPCwa86vAAAudyfvSPM146.jpg

從上面的配置可見,不再註釋掉本身的disabled的設置,然後添加一條UserDir enable username 用來開啓具體的用戶個人站點即可,這個測試請自行測試了。

 

 

2.從上面的測試可以發現,訪問個人站點時必須是~user的形式來訪問,有人覺得這樣麻煩,能不能就只要加用戶名就行,例如:http://10.0.10.11/tom,當然可以,這裏有一下幾種解決方案.

注意:下面的幾種方案配置都是在server config中配置的,不是具體在某個目錄中的,也就是在全局中配置的

方案1:使用Alias

配置如下:

Alias /tom/ "/home/tom/public_html/"

上面的配置是做一個/tom/到具體目錄的目錄別名,當瀏覽器中訪問/tom/時就相當於訪問後面的真實目錄

但是這種做法有一個問題就是你這裏寫的是/tom/,則瀏覽器訪問時必須是http://10.0.10.11/tom/,如果你寫成了http://10.0.10.11/tom則會報錯,如下:

wKioL1QZXWTxbquRAAD9GTau2oY367.jpg

 

方案2:使用Redirect的重定向功能

配置如下:

wKiom1QZXUuCIePpAABp9YqtdLY875.jpg

 

這個配置的好處是,不管你輸入的是/tom還是/tom/都會有效,測試如下:

wKioL1QZXWShbLIYAADK8bjP3tc621.jpg

咦,是不是感覺有點熟悉啊,這就是默認訪問的形式,當你在瀏覽器中輸入:http://10.0.10.13/tom/時會自動轉換成http://10.0.10.11/~tom/ ,從這裏也可以看出Redirect會讓瀏覽器中的url發現跳轉的,用戶可以知道真實的文件路徑信息

 

3.使用Rewrite重寫規則

         關於Rewrite的重寫功能實在是太強大了,這裏不做敘述,在後面將針對性的聊一聊,因爲強大,所以膚淺,哈哈…..

 

配置如下:
wKiom1QZXUyD_HAkAADEWh-B3EU686.jpg

 

至於這裏的配置信息量還是很大的,這裏不做解釋,你知道使用rewrite能實現這個功能就行

瀏覽器的測試:

wKioL1QZXWSTOW5jAADOOMjd99w515.jpg

看到沒,這裏瀏覽器中輸入是什麼就是什麼,沒有跳轉,但也實現了功能。這就是rewrite相對Redirect的好處所在。

 

好,關於個人站點的配置就聊到這裏。

 

 

.SSL站點配置

         SSL站點也是互聯網上重要業務的一個安全途徑,使用證書的形式來對客戶端進行認證,相比用戶名密碼認證要安全的多,但是在互聯網上對於關鍵業務,通常會綜合好幾種認證方式,不單單是一種。

         要想搭建SSL站點,就必須有證書,要有證書就必須配合CA機構,這裏採用自建的CA機構來頒發證書

 

1.創建自己的CA機構

 [root@test1 conf.d]# cd /etc/pki/

[root@test1 pki]# ls

CA  ca-trust  java  nssdb  rpm-gpg  rsyslog  tls

[root@test1 pki]#cd tls

[root@test1 tls]# ls

cert.pem  certs  misc  openssl.cnf  private

[root@test1 tls]# vim openssl.cnf

修改其中的一個內容:

dir             = /etc/pki/CA

//注意:這裏面CentOS6.5系統中,自帶的版本已經是絕對路徑了,在早期的版本中都是相對路徑,如果不修改成絕對路徑,在你簽發證書的時候,如果路徑不對會報錯

 

[root@test1 pki]# cd /etc/pki/CA/

[root@test1 CA]# ls

certs  crl  newcerts  private

[root@test1 CA]# touch index.txt

[root@test1 CA]# echo "01" > serial

[root@test1 CA]# ls

certs  crl  index.txt  newcerts  private  serial

[root@test1 CA]# cd private/

[root@test1 private]# ls

[root@test1 private]# cd ..

[root@test1 CA]# ls

certs  crl  index.txt  newcerts  private  serial

 [root@test1 CA]# (umask 077;openssl genrsa -out private/cakey.pem 2048)

Generating RSA private key, 2048 bit long modulus

.............................+++

......................+++

e is 65537 (0x10001)

[root@test1 CA]# openssl req -new -x509 -key private/cakey.pem -out cacert.pem -days 3650

You are about to be asked to enter information that will be incorporated

into your certificate request.

What you are about to enter is what is called a Distinguished Name or a DN.

There are quite a few fields but you can leave some blank

For some fields there will be a default value,

If you enter '.', the field will be left blank.

-----

Country Name (2 letter code) [XX]:CN

State or Province Name (full name) []:jiangsu

Locality Name (eg, city) [Default City]:suzhou

Organization Name (eg, company) [Default Company Ltd]:woniu

Organizational Unit Name (eg, section) []:IT

Common Name (eg, your name or your server's hostname) []:test1.lxm.com

Email Address []:

[root@test1 CA]#

 

到這裏爲止,一個簡單的CA證書機構就基本構建好了

2.web站點申請證書

[root@test1 CA]# cd /etc/httpd

[root@test1 httpd]# ls

conf  conf.d  logs  modules  run

[root@test1 httpd]# mkdir ssl

[root@test1 httpd]# cd ssl

[root@test1 ssl]# openssl genrsa -out httpd.key 2048

Generating RSA private key, 2048 bit long modulus

............................................................................+++

.......................+++

e is 65537 (0x10001)

[root@test1 ssl]# openssl req -new -key httpd.key -out httpd.csr -days 3650

You are about to be asked to enter information that will be incorporated

into your certificate request.

What you are about to enter is what is called a Distinguished Name or a DN.

There are quite a few fields but you can leave some blank

For some fields there will be a default value,

If you enter '.', the field will be left blank.

-----

Country Name (2 letter code) [XX]:CN

State or Province Name (full name) []:jiangsu

Locality Name (eg, city) [Default City]:suzhou

Organization Name (eg, company) [Default Company Ltd]:woniu

Organizational Unit Name (eg, section) []:IT

Common Name (eg, your name or your server's hostname) []:10.0.10.11    //這裏的主機名一定要注意,必須和你的瀏覽器中訪問的主機名一致,我這裏圖方便就用ip了,那麼瀏覽器中訪問的時候就必須用ip來訪問

Email Address []:

 

Please enter the following 'extra' attributes

to be sent with your certificate request

A challenge password []:

An optional company name []:

[root@test1 ssl]# openssl ca -in httpd.csr -out httpd.crt

Using configuration from /etc/pki/tls/openssl.cnf

Check that the request matches the signature

Signature ok

Certificate Details:

        Serial Number: 1 (0x1)

        Validity

            Not Before: Sep 17 03:52:53 2014 GMT

            Not After : Sep 17 03:52:53 2015 GMT

        Subject:

            countryName               = CN

            stateOrProvinceName       = jiangsu

            organizationName          = woniu

            organizationalUnitName    = IT

            commonName                = 10.0.10.11

        X509v3 extensions:

            X509v3 Basic Constraints:

                CA:FALSE

            Netscape Comment:

                OpenSSL Generated Certificate

            X509v3 Subject Key Identifier:

                4C:6D:2E:B1:BD:8E:D7:9F:1C:A1:33:CC:32:BD:26:09:1E:0D:C2:48

            X509v3 Authority Key Identifier:

                keyid:AD:5F:E5:75:D2:B7:EC:51:9D:D9:F8:AB:38:09:98:3E:B0:44:DD:6F

 

Certificate is to be certified until Sep 17 03:52:53 2015 GMT (365 days)

Sign the certificate? [y/n]:y

 

1 out of 1 certificate requests certified, commit? [y/n]y

Write out database with 1 new entries

Data Base Updated

[root@test1 ssl]# ls

httpd.crt  httpd.csr  httpd.key

[root@test1 ssl]#

 

到這裏爲止,證書申請就完成了。

 

3.配置ssl

         對於使用rpm安裝的httpd來說,還要安全另外一個軟件包來提供ssl站點的功能。

[root@test1 ssl]# yum -y install mod_ssl

[root@test1 ssl]# cd /etc/httpd/

[root@test1 httpd]# ls

conf  conf.d  logs  modules  run  ssl

[root@test1 httpd]# cd conf.d

[root@test1 conf.d]# ls

README  ssl.conf  welcome.conf

[root@test1 conf.d]#

從上面的信息可見,多出了一個ssl.conf的文件,這個文件就是用來配置ssl站點的

 

[root@test1 conf.d]# vim ssl.conf

修改下面兩句話爲你要使用的證書和私鑰文件

SSLCertificateFile /etc/httpd/ssl/httpd.crt

SSLCertificateKeyFile /etc/httpd/ssl/httpd.key

 

[root@test1 conf.d]# service httpd restart

Stopping httpd:                                            [  OK  ]

Starting httpd:                                            [  OK  ]

[root@test1 conf.d]# netstat -nultp | grep httpd

tcp        0      0 :::80                       :::*                        LISTEN      1934/httpd         

tcp        0      0 :::443                      :::*                        LISTEN      1934/httpd         

[root@test1 conf.d]#

[root@test1 conf.d]#

保存退出後,重啓httpd進程,此時發現443端口已經正常監聽了。

 

4.瀏覽器訪問測試

wKiom1QZXbGC96CXAAG0WhaN9p8715.jpg

此時瀏覽器說安全證書有問題,這個先不管,到這一步可以說明證書訪問已經生效,只是因爲CA機構是自己建立的,默認情況下瀏覽器還不信任,所以會出現這個界面,先點擊:繼續瀏覽此網站,看是否能夠訪問。

wKioL1QZXcrjmY6WAAD1vO9lXN8666.jpg

 

從上面的信息顯示,是可以訪問的,但是提示證書錯誤的信息。這個不要緊,下面問題討論會解決這個問題。

 

到這裏基本上ssl站點,配置就完成了,但是還不夠完美,有幾個問題需要解決下:

1.提示網站安全證書有問題

         這個問題是因爲瀏覽器不信任自建的CA機構,此時只要將自建的CA機構的根證書導入到瀏覽器中即可。

步驟一:先從CA中導出cacert.pem文件

         這裏其實就是將linux中的cacert.pem文件傳到客戶端

步驟二:導入cacert.pem到受信任的根證書頒發機構

wKiom1QZXbLxd6zaAAFtPgtH9tc458.jpg

 

如上圖所示,打開瀏覽器選項這個選項卡,找到其中的內容,然後找到證書,並點擊:

wKioL1QZXcrxRJc2AAJD3Aj9rgU085.jpg

 

如上信息所示,選擇受信任的根證書頒發機構,然後點擊導入證書:

wKiom1QZXbKRW4MQAAFC8S_RwZw017.jpg

如上圖所示,點擊下一步:

wKiom1QZXfni-B13AAEo0w95zTg171.jpg

如上圖所示,選擇所要導入的證書文件,然後點擊下一步:

 

 

wKioL1QZXhHS74E_AADq7y1efe0812.jpg

如上圖所示選擇,然後點擊下一步:

wKiom1QZXfnhGi9YAAE_w0aS3Xw743.jpg

如上圖所示,點擊完成

wKioL1QZXhHws1knAAGvOt0lx70386.jpg

如上圖所示,點擊是:

wKiom1QZXfmS3BNdAABA06xFOcs549.jpg

如上圖所示,導入成功,此時點擊確定就完成了CA機構根證書的導入工作。

 

wKioL1QZXmTAeImMAAIjywdRswM588.jpg

 

如上圖可見,此時在受信任的根證書頒發機構中就有了我們自建的CA根證書。

到這裏在使用瀏覽器訪問測試:
wKiom1QZXkvgw87WAADnD0hw_eE686.jpg

這是訪問的時候不在提示證書存在安全問題了,而且此前提示證書錯誤的信息已經沒有了,變成了一把小鎖,看看小鎖的內容:

wKioL1QZXmSTlrqiAACQdhlbiJs751.jpg

 

到這裏,基本上使用https協議來訪問是沒有問題了。

 

2.使用了ssl站點之後,不想在使用明文訪問

         對於這個問題好解決,只要在配置文件中,取消對80端口或者其他端口的監聽即可。

 

到此,SSL站點的搭建,就聊到這裏。這裏可能有一個問題就是CA證書機構的問題,這個在後續博文中再做介紹。

 

.日誌配置

         關於日誌的配置比較簡單,在配置文件中,主要是這幾個配置指令:ErrorLog,CustomLog,LogFormat

ErrorLog:該指令用來配置錯誤日誌

CustomLog:該指令用來配置站點的訪問日誌

LogFormat:該指令用來配置訪問日誌的記錄格式,最後一個參數是日誌格式的名稱,用來在CustomLog中進行調用的。

 

配置文件中默認的LogFormat配置如下:

wKiom1QZXkyCGRgCAABoN8YMr9E261.jpg

默認的配置基本上已經夠用,對與日誌記錄格式的配置跟nginx是一樣的,都是內置變量的組合,因此要想根據需要配置合適自己的日誌格式,可能要了解一下httpd內部都有那些變量可以使用,這在man手冊中是有的

 

這裏我要說一下的就是,當處於後端服務器的角色時,爲了在日誌記錄真實的客戶端地址,可能需要加一個變量,例子如下:
LogFormat "%{X-Forwarded-For} %h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined

 

還有一個問題可能就是日誌的切割問題了,對於日誌的切割可以寫第三方腳本來切割,這裏就不談了,但是這裏要講一下的就是httpd配置文件裏面使用rotatelogs來切割日誌文件的使用。這個也比較簡單,下面給出一個簡單的例子:

CustomLog "|/usr/sbin/rotatelogs /var/log/httpd/access_log 10"  combined

這裏要注意的是必須以管道符|開頭,其他的就是rotatelogs這個命令的用法,請自行查看了。

 

.web頁面列表索引配置

         這個功能的配置,通常用在提供下載服務的站點上,將目錄下的內容列出來供下載,配置也比較簡單 ,但是有些注意點,如果你不知道,可能你配不出來。

  1. 必須先開啓相應目錄的Indexes功能

Options Indexes

2.DirectoryIndex 設置的目錄索引的文件在該目錄下必須不存在,也就是說這兩個必須不能想對應,否則會顯示找到的文件的內容,而不是列表

3.刪除歡迎信息頁面,否則在找不到索引文件的情況下,會默認顯示歡迎頁面

 

一個配置小例子:

<Directory  “/var/www/html”>

Options Indexes FollowSymLinks

…… //這裏沒寫全

</Directory>

 

DirectoryIndex a  //把索引文件改成其它的

 

#mv /etc/httpd/conf.d/welcome.conf /root  //將歡迎頁面的配置內容移除

 

瀏覽器訪問測試:

wKioL1QZXmSB4FLBAAE2ohj0JPs586.jpg

從上面的信息可以看出,列表能夠正常顯示,如果你不這樣做,你可能會出這樣或那樣的錯誤,自己測試看效果。

 

 

.htaccess配置

         htaccess這個文件是httpd中默認的一個安全機制,放在某個特定的目錄下面,可以對該目錄以及其下面的子目錄進行訪問權限的控制,還可以設置重寫規則等。下面用一個常用的例子來說明氣使用,並且還要用非htaccess文件名來實現功能。

案例:實現用戶訪問默認站點時需要用戶名密碼認證

 

1.修改默認的htaccess訪問控制文件

 

wKiom1QZXqCjBwo-AABBmPcWnl4567.jpg

 

如上所示,修改配置文件,註釋掉默認的htaccess的配置,修改成.httest文件

 

2.修改默認站點目錄/var/www/html支持.httest文件的掃描

wKioL1QZXrmQFmb-AAAacPirhrg692.jpg

當然這裏並不一定要設置爲All,比如你想設置用戶認證則開始AuthConfig,如果想使用rewrite,則開啓FileInfo

 

3.創建/var/www/html/.httest文件,內容如下:

wKiom1QZXqHT3NzEAACz9jFpHm0795.jpg

 

4.創建htpasswd.user 文件:

wKioL1QZXrnzsqRUAABm4JoRKnI689.jpg

 

5.瀏覽器訪問測試

wKiom1QZXqHzRICVAAFsNKJdyK8571.jpg

看到沒,要求認證,輸入用戶名和密碼,點擊確定後,則正常訪問:

wKioL1QZXu6SdFfoAADbwPnCGbU411.jpg

 

到這裏,已經能夠驗證htaccess訪問是個什麼樣的機制了,而且這裏是改了這個文件名一樣可以控制,這一點是你需要知道的,不要認爲就必須使用.htaccess這個文件名。

 

 

.ErrorDocument實現錯誤頁面重定向

         httpd.conf配置文件裏面,內置了ErrorDocument這個指令來實現錯誤的重定向,根據不同的錯誤代碼重定向到不同的錯誤頁面,這些頁面都是可以自己設計的,這樣可以給客戶一個更好的錯誤體驗。

         至於配置很簡單,看一下httpd.conf配置文件的默認例子就可以了,一些要點在httpd.conf配置文件解析中也做了說明,這裏就不在贅述了。

 

 

.Alias url映射配置

         這個功能更具體的說應該是擴展站點內容,映射url到系統特定的目錄區域。本來在域名所對應的站點外的內容是無法訪問的,爲了不改變默認站點的內容而又能擴展訪問到另一個目錄中,這個配置有很有用了。

 

這裏做一個案例,對比看一下效果:

 

wKiom1QZXtbAqN7mAAC1s5GVAJA210.jpg

從上面的信息可見,現在默認站點目錄下,只有上面所示內容,此時如果我在瀏覽器中輸入:http://10.0.10.11/test/會有什麼情況呢?

wKioL1QZXu_jxo2lAAEHT_q3fzU900.jpg

從上面的信息很明顯返回了404的錯誤,這也是預料之中的,如果想這個url能夠訪問,此時就必須在默認站點目錄下創建test這個文件或者test這個目錄,在該目錄下在創建站點文件。

         此時如果在根目錄下有一個test目錄,當輸入上面的url地址時,想訪問這個目錄怎麼辦呢?這時就利用了Alias的功能。

[root@test1 html]# cd /

[root@test1 /]# pwd

/

[root@test1 /]# ls

bin  boot  dev  etc  home  lib  lib64  lost+found  media  mnt  opt  proc  root  sbin  selinux  srv  sys  tmp  usr  var

[root@test1 /]# mkdir test

[root@test1 /]# cd test

[root@test1 test]# pwd

/test

[root@test1 test]# echo "<h1>this is a test for alias</h1>" > index.html

[root@test1 test]# chown -R apache.apache /test/

[root@test1 test]# ls -l

total 4

-rw-r--r-- 1 apache apache 34 Sep 17 16:04 index.html

[root@test1 test]# pwd

/test

[root@test1 test]#

 

上面的配置創建了相應的test目錄和測試文件,接下來配置httpd.conf文件,設置Alias url和目錄的映射

wKiom1QZXteyOM5YAACHZUVfPaY412.jpg

配置文件中,配置如上,這裏順便說下的是,只要是針對目錄,一般都會設置一下目錄的權限,如上面的Direcotry的設置。

 

接下來重啓httpd進程,瀏覽器訪問測試:
wKioL1QZXu-yhK_1AADc8h8wVCM746.jpg

到此,可以正常訪問了。

 

關於Alias還有一個對應的是ScriptAlias的設置,這個設置表示該目錄的內容都是可執行的CGI腳本,這裏就不做介紹了。

 

.Redirect 重定向配置

         Redirect重定向的配置功能比較簡單,而且是針對url的重定向。如今用的不多,多數都是用的rewrite,因爲Redirect會導致瀏覽器中的url跳轉。但是其功能還是需要知道的,這裏就不在配置了,在上面將個人站點配置時應經涉及了。

         這裏聊一下幾個選項的含義:

使用語法:
Redirect [status] URL-path URL

如果沒有指定status參數,則重定向是"臨時的"(HTTP status 302)。也就是對客戶端來說,此資源的位置變動是臨時性的。此status參數可以返回以下HTTP狀態碼:

 

permanent

返回一個永久性重定向狀態碼(301),表示此資源的位置變動是永久性的。

temp

返回一個臨時性重定向狀態碼(302),這是默認值。

seeother

返回一個"參見"狀態碼(303),表示此資源已經被替代。

gone

返回一個"已廢棄"狀態碼(410),表示此資源已經被永久性地刪除了。如果指定了這個狀態碼,則URL參數將被忽略。

status可以被指定爲數字狀態以返回其他狀態碼。如果此狀態在300-399之間,則必須提供URL參數,否則將被忽略。注意,此狀態碼必須是Apache已知的(參見http_protocol.c中的send_error_response函數)

 

上面的內容貼的是手冊中的,更多的信息請看手冊。

 

.虛擬主機配置

         虛擬主機的配置可以說是任何web軟件的重重之重,一個服務器可能會有搭建很多個web站點,這是就需要區分不同的站點。區分不同的站點通常有三種方式:基於IP的,基於端口號的,基於域名的虛擬主機。用的最多的就是基於域名的虛擬主機,這裏也只介紹基於域名的虛擬主機的配置。

1.一個常規的基於域名的虛擬主機配置

NameVirtualHost *:80  //這一行必須開啓

<VirtualHost *:80>

    DocumentRoot /data/website

    ServerName tv.lxm.com

    ErrorLog logs/tv.lxm.com-error_log

    CustomLog logs/tv.lxm.com-access_log common

</VirtualHost>

上面就是一個基於域名的虛擬主機的配置,如果有多個站點就配置多個就行。然後創建相應的站點目錄和web文件即可

 

2.泛域名匹配

         在站點使用過程中,可能會存在互聯網上一些惡意的解析,將服務器上沒有的域名也解析過來,此時如果沒有配置相應的措施,則會顯示第一個站點的內容,這個就會被不良的人所利用,也可以說是一個安全問題。

         爲了解決這個問題,通常會配置一個默認的站點,放在所有站點的前面,來匹配惡意的解析,配置如下:

<VirtualHost _default_:80>

    DocumentRoot /data/default

</VirtualHost>

 

看到沒,這樣設置一個默認的站點,顯示你想告知惡意用戶的任何信息。

 

 

十一.Rewrite配置

         Rewrite的功能實在是太強大,官方有專門解釋URL重寫規則的文章,這裏呢我也不做深入解釋,只是提個醒,這是你必須知道和掌握的東西,大概的使用,在前面的個人站點中已經可見一番。

另外給兩個連接,可以看看:

http://apache.jz123.cn/rewrite/rewrite_guide.html

http://apache.jz123.cn/rewrite/rewrite_guide_advanced.html

 

 

 

十二.proxy配置

         關於apache的代理功能,用的不是很多,尤其是在現在前端代理盛行的情況下。但是在和tomcat的整合情況下,用的就是apache的代理功能。這裏因爲沒有測試環境,就不說了,在下次博文介紹tomcat的時候再聊一聊。哈哈,有點偷懶了

 

 

到此,關於httpd2.2必知必會內容就介紹到這裏了,當然不一定全面,但是以上內容是必會的內容。所以有必要去掌握它。

 

結束!!!

         笨蛋的技術------不怕你不會!!!

 

 

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