Apache默認虛擬主機
一臺服務器能夠訪問多個網站,每一個網站都是一個虛擬主機
任何一個域名解析到這臺機器,均可以訪問的虛擬主機就是默認虛擬主機
這裏安裝的apache版本爲2.4,安裝目錄爲/usr/local/apache2.4/,Apache的主配置文件爲javascript
/usr/local/apache2.4/conf/httpd.conf
apache網站的根目錄默認在/usr/loca/apache2.4/htdocs下,這個是由apache的主配置文件httpd.conf定義的,能夠自行修改,打開apache的主配置文件httpd.conf搜索DocumentRoot字段,能夠看到php
DocumentRoot "/usr/local/apache2.4/htdocs"
主機域名在httpd.conf裏面由ServerName字段定義,默認是註釋掉的,打開它,也能夠自定義域名css
ServerName www.example.com:80
可是,這樣就有一個問題,一個配置了LAMP的linux服務器,只能跑一個網站。
要想跑多個網站,只能關閉主配置文件下的主機域名和網站文件後,作多個虛擬主機,而多個虛擬主機中的第一個被默認爲默認虛擬主機。html
在主配置文件下打開虛擬主機配置文件,主配置文件就失效了java
在主配置文件下找到如下字段,把Include conf/extra/httpd-vhosts.conf註釋去掉,打開虛擬主機配置文件linux
[root@localhost ~]# vim /usr/local/apache2.4/conf/httpd.conf # Virtual hosts Include conf/extra/httpd-vhosts.conf
打開後主配置文件失效,咱們能夠在虛擬主機配置文件裏面定義多個主機
虛擬主機配置文件(/usr/local/apache2.4/conf/extra/httpd-vhosts.conf )
打開虛擬主機配置文件就能配置多個網站域名web
[root@localhost ~]# vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf <VirtualHost *:80> ServerAdmin webmaster@dummy-host.example.com DocumentRoot "/usr/local/apache2.4/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> <VirtualHost *:80> ServerAdmin webmaster@dummy-host2.example.com DocumentRoot "/usr/local/apache2.4/docs/dummy-host2.example.com" ServerName dummy-host2.example.com ErrorLog "logs/dummy-host2.example.com-error_log" CustomLog "logs/dummy-host2.example.com-access_log" common </VirtualHost>
每個VirtualHost都表示一個虛擬主機,每個虛擬主機都對應一個域名算法
對虛擬主機配置文件作配置:apache
<VirtualHost *:80> ServerAdmin webmaster@dummy-host.example.com //管理員的郵箱 DocumentRoot "/usr/local/apache2.4/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>
定義一個網站的主要的兩個參數DocumentRoot,ServerNamevim
寫虛擬主機配置文件:
<VirtualHost *:80> DocumentRoot "/data/www/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/www/111.com" ServerName 111.com ServerAlias www.111.com www.222.com ErrorLog "logs/111.com-error_log" CustomLog "logs/111.com-access_log" common </VirtualHost>
建立目錄
[root@localhost ~]# mkdir /data/www/ [root@localhost ~]# mkdir /data/www/abc.com [root@localhost ~]# mkdir /data/www/111.com
編寫索引面的內容
[root@localhost ~]# vim /data/www/abc.com/index.php <?php echo "abc.com"; ?> [root@localhost ~]# vim /data/www/111.com/index.php <?php echo "111.com"; ?>
檢查配置文件有沒有出錯
[root@localhost ~]# /usr/local/apache2.4/bin/apachectl -t Syntax OK
從新加載配置文件
[root@localhost ~]# /usr/local/apache2.4/bin/apachectl graceful
用curl命令測試
-x 指定代理IP地址
[root@localhost ~]# curl -x192.168.66.131:80 abc.com abc.com [root@localhost ~]# curl -x192.168.66.131:80 111.com 111.com
在配置以前先要了解htpasswd
命令描述
htpasswd命令是Apache的Web服務器內置工具,用於建立和更新儲存用戶名、域和用戶基本認證的密碼文件。
命令語法
htpasswd [option] [參數]
命令選項
-c:=create,建立一個加密文件 -n:不更新加密文件,只將更新後的用戶名密碼顯示在屏幕上 -m:使用MD5算法對密碼進行加密(默認) -d:使用CRYPT算法對密碼進行加密 -p:不對密碼進行加密,即明文密碼 -s:使用SHA算法對密碼進行加密 -b:在命令行一併輸入用戶名和密碼,而不是根據提示輸入密碼 -D:刪除指定用戶
需求,針對網站的某個目錄作用戶驗證:
1,編輯虛擬主機配置文件
[root@localhost ~]# vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf <VirtualHost *:80> DocumentRoot "/data/www/111.com" ServerName 111.com ServerAlias www.111.com www.222.com <Directory /data/www/111.com> //指定認證的目錄 AllowOverride AuthConfig //這個至關於打開認證的開關 AuthName "111.com user auth" //自定義認證的名字,做用不大 AuthType Basic //認證的類型,通常爲Basic AuthUserFile /data/.htpasswd //指定密碼文件所在位置 require valid-user //指定須要認證的用戶爲所有可用用戶 </Directory> ErrorLog "logs/111.com-error_logo" CustomLog "logs/111.com-access_log" common </VirtualHost>
說明:在配置的時候最好把說明去除,以防報錯
2,用apache自帶的htpasswd命令建立「httpd-vhosts.conf」中指定的密碼文件
[root@localhost ~]# /usr/local/apache2.4/bin/htpasswd -c -m /data/.htpasswd luo New password: Re-type new password: Adding password for user luo [root@localhost ~]# cat /data/.htpasswd luo:$apr1$Z/ftoVQB$r6HudDUUmv4StGfSmOyYM/
說明:在「/data/.htpasswd」爲用戶luo建立一個使用MD5算法加密的密碼文件。
3,從新加載
[root@localhost ~]# /usr/local/apache2.4/bin/apachectl -t Syntax OK [root@localhost ~]# /usr/local/apache2.4/bin/apachectl graceful
4,測試
使用curl進行測試
[root@localhost ~]# curl -x192.168.66.131:80 111.com HTTP/1.1 401 Authorization Required //說明:由於生成了密碼,因此在不指定用戶名和密碼的狀況下會報401錯誤 Date: Thu, 28 Jun 2018 14:48:52 GMT Server: Apache/2.4.27 (Unix) DAV/2 PHP/5.6.30 WWW-Authenticate: Basic realm="111.com user auth" Content-Type: text/html; charset=UTF-8 [root@localhost ~]# curl -x192.168.66.131:80 -luo:luo 111.com -I //使用-u指定用戶名和密碼再次輸入 HTTP/1.1 200 OK Date: Thu, 28 Jun 2018 14:50:21 GMT Server: Apache/2.4.27 (Unix) PHP/5.6.30 X-Powered-By: PHP/5.6.30 Content-Type: text/html; charset=UTF-8
說明:輸入用戶名和密碼以後便可訪問。
需求:針對單個文件進行認證,更改以下
[root@localhost ~]# vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf <VirtualHost *:80> DocumentRoot "/data/wwwr/111.com" ServerName 111.com ServerAlias www.111.com www.222.com <FilesMatch admin.php> //針對admin.php文件進行認證 AllowOverride AuthConfig AuthName "111.com user auth" AuthType Basic AuthUserFile /data/.htpasswd require valid-user </FilesMatch> ErrorLog "logs/111.com-error_logo" CustomLog "logs/111.com-access_log" common </VirtualHost>
域名跳轉分類及區別
種類
301表示永久跳轉;302表示臨時跳轉
區別
使用效果不一樣
302跳轉是暫時的跳轉,搜索引擎會抓取新的內容而保留舊的網址。由於服務器返回302代碼,搜索引擎認爲新的網址只是暫時的。
301重定向是永久的重定向,搜索引擎在抓取新內容的同時也將舊的網址替換爲重定向以後的網址。
SEO使用方式不一樣 在搜索引擎優化中302跳轉被衆多黑帽SEO優化人員追求,對網站進行惡意302跳轉至非用戶目標訪問網站,所以搜索引擎對於網站的302跳轉一般是比較不友好,因此要慎用302跳轉!
SEO
SEO(Search Engine
Optimization)搜索引擎優化,在瞭解搜索引擎天然排名機制的基礎上,對網站進行內部及外部的調整優化,改進網站在搜索引擎中的關鍵詞天然排名,得到更多流量,從而達成網站銷售及品牌建設的預期目標。
具體步驟以下
需求,把111.com域名跳轉到www.222.com,配置以下:
1,先檢查httpd有沒有加載rewrite_module模塊,若無該模塊,須要編輯配置文件httpd.conf,刪除rewrite_module (shared) 前面的#
[root@localhost ~]# /usr/local/apache2.4/bin/apachectl -M|grep -i rewrite rewrite_module (shared)
2,編輯虛擬主機配置文件
[root@localhost ~]# vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf <VirtualHost *:80> DocumentRoot "/data/www/111.com" ServerName 111.com ServerAlias www.111.com <IfModule mod_rewrite.c> //須要mod_rewrite模塊支持 RewriteEngine on //打開rewrite功能 RewriteCond %{HTTP_HOST} !^www.222.com$ //定義rewrite的條件,若是主機名(域名)不是111.com RewriteRule ^/(.*)$ http://www.222.com/$1 [R=301,L] //定義rewrite規則,當知足上面的條件時,跳轉到www.222.com,301表示永久跳轉;302表示臨時跳轉。 </IfModule> ErrorLog "logs/111.com-error_logo" CustomLog "logs/111.com-access_log" common </VirtualHost>
注:把說明去掉
3,從新加載並檢查系統配置
[root@localhost ~]# /usr/local/apache2.4/bin/apachectl -t Syntax OK [root@localhost ~]# /usr/local/apache2.4/bin/apachectl graceful
4,測試
[root@localhost ~]# curl -x192.168.66.131:80 111.com -I HTTP/1.1 301 Moved Permanently Date: Thu, 28 Jun 2018 08:48:07 GMT Server: Apache/2.4.33 (Unix) PHP/5.6.30 Location: http://www.222.com/ Content-Type: text/html; charset=iso-8859-1
能夠看到已經跳轉111.com已經跳轉到了www.222.com
apache的日誌默認是在安裝目錄的logs目錄下
[root@localhost ~]# ls /usr/local/apache2.4/logs/ access_log error_log httpd.pid
能夠看到有訪問日誌、錯誤日誌、pid
訪問日誌記錄用戶的每個請求,在主配置文件httpd.conf定義了兩種日誌格式,combined和common兩種格式,默認使用common格式
[root@localhost ~]vim /usr/local/apache2.4/conf/httpd.conf //搜索LogFormat LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined LogFormat "%h %l %u %t \"%r\" %>s %b" common
具體的解析爲:
%h 客戶端IP %l 使用identd時纔會有信息,通常狀況下都是- %u 遠程用戶(從驗證獲取到的) %t 收到請求時的時間 %r 請求的首行 %s 服務器端返回的狀態碼 %b 除HTTP頭之外的返回的字節數 %{Referer}i 從那個頁面連接跳轉到的此頁面 %{User-agent}i 用戶的User-Agent
把虛擬主機配置中定義訪問日誌和格式
改爲以下:
<VirtualHost *:80>
DocumentRoot "/data/111"
ServerName www.111.com
ServerAlias 111.com
CustomLog "logs/111.com-access_log" combined
</VirtualHost>
從新加載配置文件 -t,graceful
[root@localhost ~]# /usr/local/apache2.4/bin/apachectl -t Syntax OK [root@localhost ~]# /usr/local/apache2.4/bin/apachectl graceful
用curl訪問下,再查看下日誌
[root@localhost ~]# curl -x192.168.66.131:80 -I 111.com HTTP/1.1 200 OK Date: Thu, 28 Jun 2018 09:24:49 GMT Server: Apache/2.4.33 (Unix) PHP/5.6.30 X-Powered-By: PHP/5.6.30 Content-Type: text/html; charset=GBK [root@localhost ~]# tail /usr/local/apache2.4/logs/111.-access_log 192.168.66.131 - - [28/Jun/2018:17:24:49 +0800] "HEAD HTTP://111.com/ HTTP/1.1" 200 - "-" "curl/7.29.0
網站大多爲靜態網頁,網頁內部的圖片、css文件等一樣有其網址連接,若是不設置,這些無效的信息也將被存入訪問日誌中,會致使訪問日誌文件大小快速增長,佔用大量存儲空間。咱們能夠經過設置不記錄某些文件來減小無效信息,節省內存資源。
步驟以下,編輯虛擬主機配置文件,增長下面的信息:
[root@localhost ~]# vi /usr/local/apache2.4/conf/extra/httpd-vhosts.conf <VirtualHost *:80> DocumentRoot "/data/111" ServerName www.111.com ServerAlias 111.com 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 CustomLog "logs/111.com-access_log" combined env=!img </VirtualHost>
從新加載配置文件 -t, graceful
[root@localhost ~]# /usr/local/apache2.4/bin/apachectl -t Syntax OK [root@localhost ~]# /usr/local/apache2.4/bin/apachectl graceful
建立images目錄,並在這目錄下上傳一個圖片
[root@localhost ~]# mkdir /data/111/images [root@localhost ~]# ll !$ ll /data/111/images total 76 -rw-r--r-- 1 root root 76730 Jun 28 17:38 123.jpg
用curl訪問這個圖片,再查看日誌
[root@localhost ~]# curl -x192.168.66.131:80 -I 111.com/images/123.jpg HTTP/1.1 200 OK Date: Thu, 28 Jun 2018 09:40:28 GMT Server: Apache/2.4.33 (Unix) PHP/5.6.30 Last-Modified: Thu, 28 Jun 2018 09:38:32 GMT ETag: "12bba-56fb07e9a7dc4" Accept-Ranges: bytes Content-Length: 76730 Content-Type: image/jpeg [root@localhost ~]tail /usr/local/apache2.4/logs/111.com-access_log
能夠看到並無記錄日誌
日誌一直記錄總有一天會把整個磁盤佔滿,因此有必要讓它自動切割,並刪除老的日誌文件,使用apache自帶的rotatelogs命令能夠作日誌切割
把虛擬主機配置文件改爲以下:
<VirtualHost :80>
DocumentRoot "/data/111"
ServerName www.111.com
ServerAlias 111.com
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
CustomLog "|/usr/local/apache2.4/bin/rotatelogs -l logs/111.com-access_%Y%m%d.log 86400" combined env=!img
</VirtualHost>
從新加載配置文件 -t, graceful
[root@localhost ~]# /usr/local/apache2.4/bin/apachectl -t Syntax OK [root@localhost ~]# /usr/local/apache2.4/bin/apachectl graceful
用curl測試並查看日誌有沒有切割
[root@localhost ~]# curl -x192.168.66.131:80 -I 111.com HTTP/1.1 200 OK Date: Thu, 28 Jun 2018 09:45:23 GMT Server: Apache/2.4.33 (Unix) PHP/5.6.30 X-Powered-By: PHP/5.6.30 Content-Type: text/html; charset=GBK [root@localhost ~]# ls /usr/local/apache2.4/logs/ 111.-access_log 111.com-access_log error_log 111.com-access_20180628.log access_log httpd.pid
能夠看到有個帶日期的日誌,說明日誌已經作了切割
瀏覽器訪問網站的圖片時會把靜態的文件緩存在本地電腦裏,這樣下次再訪問時就不用去遠程下載了
在虛擬主機增長配置
<IfModule mod_expires.c> ExpiresActive on //打開該功能的開關 ExpiresByType image/gif "access plus 1 days" ExpiresByType image/jpeg "access plus 24 hours" ExpiresByType image/png "access plus 24 hours" ExpiresByType text/css "now plus 2 hour" ExpiresByType application/x-javascript "now plus 2 hours" ExpiresByType application/javascript "now plus 2 hours" ExpiresByType application/x-shockwave-flash "now plus 2 hours" ExpiresDefault "now plus 0 min" </IfModule>
須要expires_module
curl測試,看cache-control: max-age
擴展
apache虛擬主機開啓php的短標籤 http://ask.apelearn.com/question/5370
apache日誌記錄代理IP以及真實客戶端IP http://ask.apelearn.com/question/960
apache只記錄指定URI的日誌 http://ask.apelearn.com/question/981
apache日誌記錄客戶端請求的域名 http://ask.apelearn.com/question/1037
apache 日誌切割問題 http://ask.apelearn.com/question/566