LAMP架構 【2】
阿新 • • 發佈:2018-12-16
一、Apache預設虛擬主機
- 一臺伺服器可以訪問多個網站,每個網站都是一個虛擬主機
- 概念:域名(主機名)、DNS、解析域名、hosts
- 任何一個域名解析到這臺機器,都可以訪問的虛擬主機就是預設虛擬主機
- windows的hosts的檔案路徑:C:\Windows\System32\drivers\etc\hosts
- 設定hosts可以臨時將域名指定到設定的ip上去。
- 開啟虛擬主機,在/usr/local/apache2.4/conf/httpd.conf 配置檔案中,將httpd-vhosts.conf這一行的註釋去除。
- 在虛擬主機配置檔案中,可以自定義虛擬主機:vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf
<VirtualHost *:80> 與結尾成對出現,表示為一個虛擬主機 ServerAdmin
[email protected] 定義管理員的郵箱,可以刪除。 DocumentRoot "/usr/local/apache2/docs/dummy-host.example.com" 自定義的網站的根目錄 ServerName dummy-host.example.com 自定義的網站名 ServerAlias www.dummy-host.example.com 自定義的網站別名 ErrorLog "logs/dummy-host.example.com-error_log" 錯誤日誌 CustomLog "logs/dummy-host.example.com-access_log" common 訪問日誌 </VirtualHost> 與首行成對出現,表示為一個虛擬主機
測試虛擬主機
- curl -x命令
- 比如說,現在要訪問abc,com,若不去繫結hosts,那麼在虛擬機器中ping www.abc.com會ping到外網上去,並沒有在這臺機器上。若想要訪問abc.com在在這臺機器上,可以編輯/etc/hosts檔案去指定下,或者使用curl -x選項
- 一旦讓虛擬主機配置檔案生效了,那麼之前定義的www.example.com就會失效了
虛擬主機配置:
<VirtualHost *:80>
DocumentRoot "/data/wwwroot/abc.com"
ServerName abc.com
ServerAlias www.abc.com www.123.com
ErrorLog "logs/abc.com-error_log"
CustomLog "logs/abc.com-access_log" common
</VirtualHost>
<VirtualHost *:80>
DocumentRoot "/data/wwwroot/111.com"
ServerName 111.com
ServerAlias www.example.com
ErrorLog "logs/111.com-error_log"
CustomLog "logs/111.com-access_log" common
</VirtualHost>
- 建立兩個虛擬主機的網站根目錄: mkdir -p /data/wwwroot/abc.com ;mkdir /data/wwwroot/111.com
- 在兩個根目錄下,分別建立一個php檔案,並編輯內容。
<?php
echo "111.com";
和
<?php
echo "abc.com";
- 檢查httpd配置檔案是否正確:/usr/local/apache2/bin/apachectl -t
- 重新載入配置檔案:/usr/local/apache2/bin/apachectl graceful
- 當輸入的域名沒有在虛擬主機配置檔案中設定時,都會去訪問預設的虛擬主機(第一個虛擬主機就是預設虛擬主機)。
- curl -x192.168.199.128:80 abc.com 輸出如圖:
[[email protected] ~]# curl -x192.168.199.128:80 www.abc.com
abc.com[[email protected] ~]# curl -x192.168.199.128:80 www.abcd.com
abc.com[[email protected] ~]# curl -x192.168.199.128:80 www.abcde.com
abc.com[[email protected] ~]# curl -x192.168.199.128:80 www.456.com
abc.com[[email protected] ~]# curl -x192.168.199.128:80 www.example.com
111.com[[email protected] ~]# curl -x192.168.199.128:80 111.com
二、Apache使用者認證
- 修改虛擬主機配置檔案: vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf
- 本章使用瀏覽器進行檢測的前提是在物理機hosts檔案新增虛擬機器IP和虛擬主機域名。
- 編輯成如下內容:
[[email protected] ~]# vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf
……
<VirtualHost *:80>
DocumentRoot "/data/wwwroot/111.com"
ServerName 111.com
ServerAlias www.example.com
<Directory /data/wwwroot/111.com>
#指定認證的目錄
Allowoverride AuthConfig
#該行相當於開啟使用者認證的開關
AuthName "111.com user auth"
#自定義認證的名字,作用不大
AuthType Basic
#認證型別,一般為basic
AuthUserFile /data/.htpasswd
#指定密碼檔案所在位置(需要手動新增)
require valid-user
#設定需要認證的使用者為“AuthUserFile”中定義的所有可用使用者
</Directory>
ErrorLog "logs/111.com-error_log"
CustomLog "logs/111.com-access_log" common
</VirtualHost>
- /usr/local/apache2.4/bin/htpasswd -c -m /data/.htpasswd qwe 生成密碼檔案
- 配置完成後重新載入
- /usr/local/apache2.4/bin/apachectl -t
- /usr/local/apache2.4/bin/apachectl graceful
- 在linux使用命令curl可以訪問加密的伺服器:curl -x192.168.229.128:80 -uaming:73748196 111.com -I
htpasswd命令
- htpasswd命令是Apache的Web伺服器內建工具,用於建立和更新儲存使用者名稱、域和使用者基本認證的密碼檔案
- 語法: htpasswd [option] [引數]
- Options:
- -c:=create,建立一個加密檔案
- -n:不更新加密檔案,只將更新後的使用者名稱密碼顯示在螢幕上
- -m:使用MD5演算法對密碼進行加密(預設)
- -d:使用CRYPT演算法對密碼進行加密
- -p:不對密碼進行加密,即明文密碼
- -s:使用SHA演算法對密碼進行加密
- -b:在命令列一併輸入使用者名稱和密碼,而不是根據提示輸入密碼
- -D:刪除指定使用者
對網站中指定檔案設定使用者認證!
- 在windows遊覽器下訪問時,需更改windows的hosts檔案將111.com指向192.168.229.128
- 註釋掉< Directory >,取消對目錄設定的使用者認證,更改為< FilesMatch>,即對檔案設定使用者認證。
- <FilesMatch admin.php> 指定某個檔案需要使用者認證
- 針對單個檔案進行認證,新增內容如下:
[[email protected] ~]# vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf
<VirtualHost *:80>
DocumentRoot "/data/wwwroot/111.com"
ServerName 111.com
ServerAlias www.example.com
#<Directory /data/wwwroot/111.com>
<FilesMatch 123.php>
Allowoverride AuthConfig
AuthName "111.com user auth"
AuthType Basic
AuthUserFile /data/.htpasswd
require valid-user
</FilesMatch>
#</Directory>
ErrorLog "logs/111.com-error_log"
CustomLog "logs/111.com-access_log" common
</VirtualHost>
三、域名跳轉
域名跳轉分類及區別
- 種類:
- 301表示永久跳轉;302表示臨時跳轉。
- 區別:
- 使用效果不同
- 302跳轉是暫時的跳轉,搜尋引擎會抓取新的內容而保留舊的網址。因為伺服器返回302程式碼,搜尋引擎認為新的網址只是暫時的。
- 301重定向是永久的重定向,搜尋引擎在抓取新內容的同時也將舊的網址替換為重定向之後的網址。
- SEO使用方式不同
- 在搜尋引擎優化中302跳轉被眾多黑帽SEO優化人員追求,對網站進行惡意302跳轉至非使用者目標訪問網站,因此搜尋引擎對於網站的302跳轉通常是比較不友好,所以要慎用302跳轉!
SEO
- SEO(Search Engine Optimization)搜尋引擎優化,在瞭解搜尋引擎自然排名機制的基礎上,對網站進行內部及外部的調整優化,改進網站在搜尋引擎中的關鍵詞自然排名,獲得更多流量,從而達成網站銷售及品牌建設的預期目標。
域名跳轉配置
- 開啟rewrite模組,修改vim /usr/local/apache2.4/conf/httpd.conf 去除#註釋符號
- 配置虛擬主機配置檔案:httpd-vhosts.conf。
[[email protected] ~]# vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf
……
<VirtualHost *:80>
DocumentRoot "/data/wwwroot/111.com"
ServerName 111.com
ServerAlias www.example.com
<IfModule mod_rewrite.c>
#需要mod_rewrite的支援
RewriteEngine on
#開啟rewrite功能
RewriteCond %{HTTP_HOST} !^111.com$
#Cond=condition,定義rewrite條件:所有非111.com的主機名(域名)
RewriteRule ^/(.*)$ http://111.com/$1 [R=301,L]
#定義rewrite規則:當滿足上面條件時才執行當前規則,即跳轉到111.com。
</IfModule>
ErrorLog "logs/111.com-error_log"
CustomLog "logs/111.com-access_log" common
</VirtualHost>
- 載入前使用選項-t檢視配置檔案是否正確
- 選項-M檢視rewrite模組是否開啟
- 載入配置檔案 graceful
[[email protected] ~]# /usr/local/apache2.4/bin/apachectl -t
Syntax OK
[[email protected] ~]# /usr/local/apache2.4/bin/apachectl graceful
[[email protected] ~]# /usr/local/apache2.4/bin/apachectl -M
- 使用curl檢測:
- 此時,狀態碼為301,即設定了域名永久跳轉!
- 在瀏覽器進行檢測時,訪問“www.2111.com.cn”會直接跳轉到“111.com”。
[[email protected] ~]# curl -x192.168.8.131:80 www.2111.com.cn -I
HTTP/1.1 301 Moved Permanently
Date: Mon, 31 Jul 2017 07:17:37 GMT
Server: Apache/2.4.27 (Unix) PHP/5.6.30
Location: http://111.com/
Content-Type: text/html; charset=iso-8859-1
四、Apache訪問日誌
- 在虛擬主機配置檔案中可以指定日誌的名稱,預設日誌路徑為/usr/local/apache2.4/logs/(即apache的安裝目錄):
系統自帶日誌格式:
- 即:有combine和common兩種格式,預設使用common模式。
[[email protected] ~]# vim /usr/local/apache2.4/conf/httpd.conf
.........
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
LogFormat "%h %l %u %t \"%r\" %>s %b" common
#h表示host來源IP,l表示login使用者,u表示user使用者密碼,t表示time時間,r表示request(行為),s表示status狀態碼,b表示byte大小
其中referer:表示從哪一個連結跳轉過來的。
user-agent:使用者代理( 瀏覽器標識 (作業系統標識; 加密等級標識; 瀏覽器語言) 渲染引擎標識 版本資訊)。
- 編輯虛擬主機配置檔案“httpd-vhosts.conf”:將虛擬主機配置檔案中日誌結尾處的common修改為combined,即可修改日誌檔案格式為第一種格式。
[[email protected] ~]# vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf
<VirtualHost *:80>
DocumentRoot "/data/wwwroot/111.com"
ServerName 111.com
ServerAlias www.example.com
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{HTTP_HOST} !^111.com$
RewriteRule ^/(.*)$ http://111.com/$1 [R=301,L]
</IfModule>
ErrorLog "logs/111.com-error_log"
CustomLog "logs/111.com-access_log" combined
</VirtualHost>
重新載入測試:
[[email protected] ~]# /usr/local/apache2.4/bin/apachectl -t
Syntax OK
[[email protected] ~]# /usr/local/apache2.4/bin/apachectl graceful
五、訪問日誌不記錄靜態檔案
- apache的訪問日誌會記錄網站每個檔案被獲取的資訊,這樣日誌資訊量會很大,我們排查日誌的時候不容易篩選有用的記錄。我們可以把靜態檔案的日誌設定為不記錄,提高我們排查日誌資訊的效率
- 編輯虛擬主機配置檔案“httpd-vhosts.conf”:
- 重新載入配置檔案後(-t,graceful),即可在日誌中不記錄設定的靜態檔案。
[[email protected] ~]# vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf
……
<VirtualHost *:80>
DocumentRoot "/data/wwwroot/111.com"
ServerName 111.com
ServerAlias www.example.com
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{HTTP_HOST} !^111.com$
RewriteRule ^/(.*)$ http://111.com/$1 [R=301,L]
</IfModule>
ErrorLog "logs/111.com-error_log"
SetEnvIf Request_URI ".*\.gif$" img
SetEnvIf Request_URI ".*\.jpg$" img
SetEnvIf Request_URI ".*\.png$" img
SetEnvIf Request_URI ".*\.bmp$" img
SetEnvIf Request_URI ".*\.swf$" img
SetEnvIf Request_URI ".*\.js$" img
SetEnvIf Request_URI ".*\.css$" img
#以上為定義變數:將所有關於圖片的請求定義為變數img
CustomLog "logs/111.com-access_log" combined env=!img
#“env=!img”表示非img變數。本行命令的含義是:不記錄關於變數img的請求日誌。感嘆號取反,即不記錄標籤img所包含的靜態檔案。
</VirtualHost>
六、訪問日誌切割
- 日誌一直記錄總有一天會把整個磁碟佔滿,所以有必要讓它自動切割,並刪除老的日誌檔案
- 把虛擬主機配置檔案改成如下:
- 開啟配置檔案
- vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf
[[email protected] ~]# vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf
更改CustomLog配置
1.首先指定一個工具rotatelogs
2.在定義一個日誌的名稱%Y%m%d
3.規定時間去生成,時間段就為1天,換算成秒,就是86400秒
4.雙引號中即日誌切割的相關配置
5.選項-l 以當前系統的時間為基準(apache2.4版本中可以不加該選項)
CustomLog "|/usr/local/apache2.4/bin/rotatelogs -l logs/123.com-access_%Y%m%d.log 86400" combined env=!img
然後儲存退出
- 然後檢視配置檔案語法有無錯誤,並重新載入配置檔案 (-t,graceful)
- rotatelogs工具,它是Apache自帶的一個切割工具
- -l引數,目的是以當前系統時間為基準。如果不指定 -l ,那麼就會指定 UTC時間 的格式去切割日誌
- 在中國應該是 CST,在美國是 UTC ,兩者時區不同,相差幾個小時
- 定義日誌的名稱,因為是切割的,所以根據時間日期讓它自動變,就需要加一個變數%Y%m%d
- %Y,表示 年
- %m,表示 月
- %d,表示 日
七、靜態元素過期時間
- 瀏覽器訪問網站,獲取的圖片、css等靜態元素會儲存在本地電腦快取資料夾裡,方便下次再此訪問的時候提高訪問速度。我們也可以在伺服器端設定這些靜態元素的過期時間,可以減網站的頻寬壓力。不設定過期時間時,當伺服器更改時也依然回去讀取快取,所以需要為這些快取設定一個過期時間
- 在apache子配置檔案/usr/local/apache2.4/conf/extra/httpd-vhosts.conf裡設定:是通過expires模組實現的。
- 修改apapche配置檔案,開啟expires模組,並檢視expire
[[email protected] ~]# vim /usr/local/apache2.4/conf/httpd.conf
搜尋 /expire ,找到該行的配置檔案,並去除的註釋符 # 號
LoadModule expires_module modules/mod_expires.so
然後儲存退出
[[email protected] ~]# /usr/local/apache2.4/bin/apachectl -M |grep expire
expires_module (shared)
[[email protected] ~]#
- 開啟虛擬主機配置檔案vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf,並新增配置檔案
- 需要新增的配置檔案
- 這裡有所有的圖片定義成一天
- 所有的 css 和 js 都定義成兩小時
- 其他的沒有任何的快取
<IfModule mod_expires.c>
ExpiresActive on //開啟該功能的開關
ExpiresByType image/gif "access plus 1 days" //定義Type型別,這裡是一天
ExpiresByType image/jpeg "access plus 24 hours" //定義Type型別,這裡是24小時
ExpiresByType image/png "access plus 24 hours" //定義Type型別
ExpiresByType text/css "now plus 2 hour" //定義Type型別,兩小時
ExpiresByType application/x-javascript "now plus 2 hours" // 定義Type型別
ExpiresByType application/javascript "now plus 2 hours" //定義Type型別
ExpiresByType application/x-shockwave-flash "now plus 2 hours" //定義Type型別
ExpiresDefault "now plus 0 min" //定義Type型別
</IfModule>
- 遊覽器,開發者工具中可以檢視
- 按ctrl+F5可以強制把瀏覽器本地的快取清空
- linux下curl也可以檢視設定的過期時間。
[[email protected] 111.com]# curl -x127.0.0.1:80 111.com/11.png -I
HTTP/1.1 200 OK
Date: Thu, 21 Dec 2017 22:42:28 GMT //當前時間
Server: Apache/2.4.29 (Unix) PHP/5.6.30
Last-Modified: Thu, 21 Dec 2017 14:40:05 GMT
ETag: "20aa-560daacfdbb40"
Accept-Ranges: bytes
Content-Length: 8362
Cache-Control: max-age=86400 //快取的時間
Expires: Fri, 22 Dec 2017 22:42:28 GMT //過期時間
Content-Type: image/png
[[email protected] 111.com]#