1. 程式人生 > >第十八課預習任務

第十八課預習任務

anache預設虛擬主

一臺伺服器可以訪問多個網站,每個網站都是一個虛擬主機。概念:域名(主機名)、DNS、解析域名、hosts 虛擬主機:任何一個域名,指向到這個ip,他都會訪問到這站點,這個站點就叫預設虛擬主機

windows下寫hosts這個檔案在儲存的位置在windiws/system32/drives/etc下,用記事本開啟,在 For example:下先寫入ip,然後後面寫網站,儲存退出。這樣網站就會指向指定的ip

開啟apache的配置檔案vim /usr/local/apache2.4/conf/httpd.conf查詢extra,找到# Virtual hosts然後將Include conf/extra/httpd-vhosts.conf

前面的“#”去掉。#Virtual hosts Include conf/extra/httpd-vhosts.conf儲存退出

然後我們開啟一個二級配置檔案,這個二級配置檔案就是虛擬主機的配置檔案。在這個配置檔案中我們可以配置多個servename。他們都是以<VirtualHost :80>開始,以</VirtualHost>結束虛擬主機配置檔案:vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf <VirtualHost :80> ServerAdmin [email protected](管理員郵箱,可以刪除

DocumentRoot "/usr/local/apache2.4/docs/dummy-host.example.com"

(定義網站的根目錄)我們可以修改為 DocumentRoot "/data/wwwroot/123.com",這還是要根據我們的實際網站名需求去改。

ServerName dummy-host.example.com

(伺服器名)可以改為123.com。可以根據實際情況,修改成網站名

ServerAlias www.dummy-host.example.com(伺服器別名) www.123.com www.abc.com 可以根據實際情況,修改成網站名,而且可以寫多個

ErrorLog "logs/dummy-host.example.com-error_log"

錯誤日誌,可根據實際情況改名。

CustomLog "logs/dummy-host.example.com-access_log" common

訪問日誌,可根據實際情況修改

</VirtualHost>一對一對出現,這就代表著一臺虛擬主機。一個主機就是一個網站。定義一個網站最核心的是DocumentRoot ServerNameserveralias可以寫多個,但ServerName只能寫一個

修改完後我們去建立對應的目錄[[email protected] ~]# mkdir /data/wwwroot/ [[email protected] ~]# mkdir /data/wwwroot/123.com [[email protected] ~]# mkdir /data/wwwroot/111.com可根據網站名具體修

然後在對應的站點根目錄下建立一個index.php [[email protected] ~]# vim /data/wwwroot/123.com/index.php然後在vim中編輯<?php echo "123.com";然後儲存退出

[[email protected] ~]# vim /data/wwwroot/111.com/index.php <?php echo "111.com";儲存退

然後檢查語法是否有錯[[email protected] ~]# /usr/local/apache2.4/bin/apachectl -t AH00526: Syntax error on line 33 of /usr/local/apache2.4/conf/extra/httpd-vhosts.conf: ServerName takes one argument, The hostname and port of the server這裡面出現了一個錯誤,是在第33行。進入檢視後發現是多寫了一個網站名。所以要刪除一個。修改完後,重新載入

我們可以用curl -x來測試,如果我們直接去ping域名的話,會直接ping到外網,[[email protected] ~]# ping 123.com PING 123.com (61.132.13.130) 56(84) bytes of data. 64 bytes from 61.132.13.130 (61.132.13.130): icmp_seq=1 ttl=116 time=44.4 ms 64 bytes from 61.132.13.130 (61.132.13.130): icmp_seq=2 ttl=116 time=44.3 ms 64 bytes from 61.132.13.130 (61.132.13.130): icmp_seq=3 ttl=116 time=44.5 ms

這時我們用curl -x [[email protected] ~]# curl -x192.168.1.106:80 www.llt.com 123.com[[email protected] ~]# curl -x192.168.1.106:80 www.789.com 123.com[[email protected] ~]# curl -x192.168.1.106:80 www.123.com 123.com[[email protected] ~]# curl -x192.168.1.106:80 www.1111.com 123.com[[email protected] ~]# curl -x192.168.1.106:80 www.111.com這時,我們可以看到無論什麼網站,現在都會指定到123.com了。我們輸入網址,它就會搜尋所有的配置段,如果配置段不存在,那麼它就會自動跳轉到我們的虛擬主機上。(這裡的虛擬主機為123.com

結論1.要想虛擬主機生效,首先要在apache的配置檔案中找到虛擬主機,虛擬主機名為# Virtual hosts Include conf/extra/httpd-vhosts.conf,並將前面的“#”刪除。這時虛擬主機配置檔案生效了。2.每一個虛擬主機都有多個virtualhost,每個virtualhost都有一個對應的ServerNameDocumentRoot,每一個virtualhost都有一個站點,每一個站點都代表一個虛擬主機。3.在虛擬主機上有一個比較特殊的,叫虛擬預設主機,預設虛擬主機就是無論什麼域名解析到這個ip上,它都會去訪問這個預設虛擬主機。

Apache使用者認證

有的網站在訪問的時候需要我們輸入賬戶名和密碼,這樣做的好處是增加了安全性,但是使用者體驗會很差。但是在我們在工作中還需要在一些重要的地方做一些安全認證。
首先我們編輯虛擬主機的配置文

vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf我們用第二個虛擬主機做實驗,然後在 ServerName下面下上如下的內容<Directory /data/wwwroot/123.com> //指定認證的目錄(這裡的網址要和前面配置檔案的網址一定要一致,負責不會成功)  AllowOverride AuthConfig //這個相當於開啟認證的開關  AuthName "123.com user auth" //自定義認證的名字,作用不大  AuthType Basic //認證的型別,一般為Basic,其他型別阿銘沒用過  AuthUserFile /data/.htpasswd //指定密碼檔案所在位置  require valid-user //指定需要認證的使用者為全部可用使用者  </Directory>

儲存退出後我們要建立一個htpasswd檔案,這個我們需要用apache自帶的命令去生成。/usr/local/apache2.4/bin/htpasswd -cm /data/.htpasswd aming(這裡我們暫定使用者名稱為aming,工作中還是要按照實際情況去定義)(-ccreate。是建立 -mmd5加密模式)按回車後就可以輸入密碼,然後重複輸入密碼。如果我們再次建立一個使用者和他的密碼,那麼我們就不用加引數-c了,以內我們已經建立過了。然後我們從新載入做測試[[email protected] ~]# /usr/local/apache2.4/bin/apachectl -t(語法檢查)Syntax OK [[email protected] ~]# /usr/local/apache2.4/bin/apachectl graceful(重新載入

curl-x測試[[email protected] ~]# curl -x127.0.0.1:80 111.com <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN"> <html><head> <title>401 Unauthorized</title>401就表示訪問的內容需要做使用者認證)</head><body> <h1>Unauthorized</h1> <p>This server could not verify that you are authorized to access the document requested. Either you supplied the wrong credentials (e.g., bad password), or your browser doesn't understand how to supply the credentials required.</p> </body></html>這樣在檢視網站的時候機會出現對話方塊,讓你輸入使用者名稱和密

如何在linux下輸入密碼[[email protected] ~]# curl -x127.0.0.1:80 -uaming:19860127 111.com-u後面加有戶名,後面接密碼)。HTTP/1.1 200 OK(當密碼正確的時候,狀態碼就為200,如果不對,則還是401Date: Sun, 15 Apr 2018 12:56:22 GMT Server: Apache/2.4.33 (Unix) PHP/5.6.30 X-Powered-By: PHP/5.6.30 Content-Length: 7 Content-Type: text/html; charset=UTF-8

使用者認證還可以針對某個檔案進行認證還可以針對單個檔案進行認證<VirtualHost *:80>  DocumentRoot "/data/wwwroot/www.123.com"  ServerName www.123.com  <FilesMatch admin.php> 和網站認證不同的是,這裡用的是FilesMatch而不是Directory,並且開始和結束都要一致。  AllowOverride AuthConfig  AuthName "123.com user auth"  AuthType Basic  AuthUserFile /data/.htpasswd  require valid-user  </FilesMatch>  </VirtualHost>

域名跳

一個網站會有多個域名,比如A可以訪問一個域名,B也可以訪問一個域名,而用A訪問時瀏覽器的網址直接變成了B。這就是域名跳轉過程。,那麼他有什麼作用呢?第一,一個網站有多個域名對SEO有影響,就是百度搜索關鍵詞的排名有影響,如果把多個域名集中在一起,以一個域名為中心,這樣就可以把權重集中在這個域名上,所以排名就靠前了。第二,如果之前的老域名不再使用,但搜尋域名還留著以前的老域名,這樣使用者會搜尋到我們的老域名並點選它,需要把老域名做一個跳轉到新域名,這樣使用者搜尋時候,也可以跳轉到新域名

具體操作如下首先開啟虛擬主機機配置檔案vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf然後新增配置檔案<IfModule mod_rewrite.c> //需要mod_rewrite模組支援,這個模組在我們編譯apache的時候用到的一個moust模組,這個模組會將大部分模組編譯進來。如果不加,那麼這個模組也就不會有了。  RewriteEngine on //開啟rewrite功能  RewriteCond %{HTTP_HOST} !^www.111.com$ //定義rewrite的條件,當主機名(域名)不是www.111.com時,會自動跳轉到111.com !表示取反 ,這裡我們要定義開頭和結尾,如果不定義開頭和結尾,只要當域名中有111時就會認為他是正確的域名。所以我們一定要在主域名的前後加上^$定義rewrite規則,當滿足上面的條件時,這條規則才會執行 301為永久跳轉,302為臨時跳轉,我們一般都用301</IfModule>

改完配置檔案以後我們需要檢測語法和重新載入然後我們還需要到Apache的配置檔案中檢視LoadModule rewrite_module modules/mod_rewrite.so是否載入,如果被註釋了,那麼我們還需要將它重新載入。[[email protected] ~]# /usr/local/apache2.4/bin/apachectl -M |grep rewrite rewrite_module (shared)(載入成功)如果修改了,我們在儲存退出後還要進行語法檢測和重新載入。然後我們檢測[[email protected] ~]# curl -x192.168.1.106:80 2111.com.cn -I HTTP/1.1 301 Moved Permanently Date: Sun, 15 Apr 2018 14:54:17 GMT Server: Apache/2.4.33 (Unix) PHP/5.6.30 Location: http://111.com/ Content-Type: text/html; charset=iso-8859-1狀態碼為301,現在已經成功的跳轉了

apache訪問日誌

cat /usr/local/apache2.4/logs/111.com-access_log有我們需要看的訪問日誌[[email protected] ~]# cat /usr/local/apache2.4/logs/111.com-access_log 192.168.1.106 - - [15/Apr/2018:13:56:22 +0800] "GET HTTP://www.example.com/ HTTP/1.1" 200 7 192.168.1.106 - - [15/Apr/2018:14:19:25 +0800] "GET HTTP://www.789.com/ HTTP/1.1" 200 7 192.168.1.106 - - [15/Apr/2018:20:34:16 +0800] "GET HTTP://www.111.com/ HTTP/1.1" 200 7上面試我們訪問日誌的格式,而這個格式我們是可以定義格式的,在Apache的主配置檔案中搜索LogFormat,在這下面有兩個格式定義,分別是combinedcommoncombined內容會更豐富一些,它多了 referer user-agent,我們將編輯虛擬主機配置檔案,將common更改為combined ,重新訪問測試,檢視日誌<VirtualHost *:80>  DocumentRoot "/data/wwwroot/www.123.com"  ServerName www.123.com  ServerAlias 123.com  CustomLog "logs/123.com-access_log" combined(以前為common</VirtualHost>