第1章 Apache虛擬主機的部署
Apr(可移植運行庫)主要實現為上層的應用提供一個可以跨多操作系統底層的接口庫。
Apr接口庫使用的目的是對應其他的服務的接口(api(程序接口))來使用,比如說php、tomcat、nginx。
Pcre是一個perl庫,是一個正則表達式庫,兼容perl的所有正則表達式,匹配字符使用的正則表達式,主要用於文本處理。
在一台服務器上發布多個網站,也稱為部署多個虛擬主機,虛擬主機的部署方法:
1. 單IP多個端口
2. 多ip單端口
3. 單個ip單個端口不同域名(應用廣泛)
啟動apache警告
沒有開啟80端口的域名監聽,解決方法:
Echo “ServerName localhost:80” >> /usr/local/apache/conf/httpd.conf
代表開啟監聽本地域名localhost
其中基於同一端口不同域名的方式在企業中得到廣泛的使用和應用,如下為基於一個端口不同域名,在一台Apache WEB服務器上部署多個網站,步驟如下:
(1) 創建虛擬主機配置文件httpd-vhosts.conf,該文件默認已存在,只需去掉httpd.conf配置文件中#號即可,如圖10-3所示:
# Virtual hosts
Include conf/extra/httpd-vhosts.conf
#引用vhosts文件
<VirtualHost *:80>
DocumentRoot "/usr/local/apache/htdocs/jf1"
ServerName www.jf1.com
ServerAlias www.jf100.com www.jf1000.com www.jf10000.com
ErrorLog "logs/jf1.com-error_log"
CustomLog "logs/jf1.com-access_log" common
</VirtualHost>
<VirtualHost *:80>
DocumentRoot "/usr/local/apache/htdocs/jf2"
ServerName www.jf2.com
ErrorLog "logs/jf2.example.com-error_log"
CustomLog "logs/jf2.example.com-access_log" common
</VirtualHost>
配置hosts文件
Windows:C:\Windows\System32\drivers\etc
Linux /etc/hosts的配置文件
Hosts文件的作用是配置本地解析域名的,假設本地主機要訪問域名,Windows瀏覽器(首先訪問緩存數據)或者Linux工具首先訪問本地hosts,hosts文件里面寫了ip和域名對應解析關系。
Httpd-vhosts.conf參數詳解:
NameVirtualHost *:80 開啟虛擬主機,並且監聽本地所有網卡接口的80端口; <VirtualHost *:80> 虛擬主機配置起始; ServerAdmin support@jfedu.net 管理員郵箱; DocumentRoot "/usr/local/apache2/htdocs/jf1" 該虛擬主機發布目錄; ServerName www.jf1.com 虛擬主機完整域名; ErrorLog "logs/www.jf1.com_error_log" 錯誤日志路徑及文件名; CustomLog "logs/www.jf1.com_access_log" common 訪問日志路徑及文件名; </VirtualHost> 虛擬主機配置結束。 設置項目的默認訪問目錄 <Directory "/test/jf1"> Options Indexes MultiViews Options這個子句用來說明一些主要的設置,目前可以使用的設置有Indexes,Includes,FollowSymLinks,ExecCGI,MultiView,當然還有兩個最簡單的選擇就是None和All。 None是禁止所有選擇,而All 允許上面的所有Options。一般我們主要關心的是Indexes 和FollowSymLinks。Indexes 是設定是否允許在目錄下面沒有index.html 的時候顯示目錄,而FollowSymLinks 決定是否可以通過符號連接跨越DocumentRoot。 AllowOverride None AllowOverride 定義是否允許各個目錄用目錄中的.htaccess(后面解釋)覆蓋這里設定的Options。它的選擇有Options,FileInfo,AuthConfig,Limit 或者它們的組合,當然還有None 和All。 Order allow,deny 它有兩種用法,即Order allow,deny 或者Order deny,allow。簡單地說,它用來設置是先執行deny 還是先執行allow,例如,Order deny,allow 意味着先看deny 行,再看allow 行,這樣如果deny from all 再allow from 202.112.58.0/24 后來的allow子句就會超越deny 而對202.112.58.x 打開訪問。 Allow from all 這兩個選項和Order 一起使用,Allow 允許某個地址來的連接請求,Deny 則禁止這個請求,例如在Order deny,allow 的情況下,Deny from all,Allow from 192.168.12.0/24 表示只有192.168.12.x 的用戶可以訪問這個目錄。 DirectoryIndex index.html 配置默認的網頁后綴 </Directory> |
(2) 創建www.jf1.com及www.jf2.com發布目錄,重啟apache服務,並分別創建index.html頁面:
mkdir -p /usr/local/apache2/htdocs/{jf1,jf2}/ /usr/local/apache2/bin/apachectl restart echo "<h1> www.jf1.com Pages</h1>" >/usr/local/apache2/htdocs/jf1/index.html echo "<h1> www.jf2.com Pages</h1>" >/usr/local/apache2/htdocs/jf2/index.html |
(3) Windows客戶端設置Hosts映射,將www.jf1.com、www.jf2.com與192.168.111.131 IP進行映射綁定,映射的目的將域名跟IP進行綁定,在瀏覽器可以輸入域名,不需要輸入IP地址,綁定方法是在“C:\Windows\System32\drivers\etc”文件夾中,使用記事本編輯hosts文件,加入如下代碼,如圖10-4所示:
192.168.111.131 www.jf1.com 192.168.111.131 www.jf2.com |
圖10-4 Windows主機Hosts配置
(4) 瀏覽器訪問www.jf1.com、www.jf2.com如圖10-5(a)、10-5(b)所示,至此Apache基於多域名虛擬主機配置完畢,如果還需添加虛擬主機,直接拷貝其中一個虛擬主機配置、修改WEB發布目錄即可:
圖10-5(a) www.jf1.com網站返回內容
圖10-5(b) www.jf2.com網站返回內容
Apache配置文件詳解
Apache的配置文件是Apache WEB難點,讀者需要掌握配置文件中每個參數的含義,才能理解並在日常運維中去解決Apache遇到的故障,如下為Apache配置文件詳解:
1)Global Environment---全局環境配置,決定Apache服務器的全局參數
2)Main server configuration---主服務配置,相當於是Apache中的默認Web站點,如果我們的服務器中只有一個站點,那么就只需在這里配置就可以了。
3)Virtual Hosts---虛擬主機,虛擬主機不能與Main Server主服務器共存,當啟用了虛擬主機之后,Main Server就不能使用了
ServerTokens OS 顯示服務器的版本和操作系統內核版本;在出現錯誤頁的時候是否顯示服務器操作系統的名稱,ServerTokens Prod為不顯示
ServerRoot "/usr/local/apache2/" Apache主配置目錄;服務啟動之后自動將目錄改變為當前目錄,在后面使用到的所有相對路徑都是想對這個目錄下
PidFile run/httpd.pid PidFile進程文件;這是系統識別一個進程的方法,系統中httpd進程可以有多個,但這個PID對應的進程是其他的父進程
Timeout 60 不論接收或發送,當持續連接等待超過60秒則該次連接就中斷;服務器與客戶端斷開的時間
KeepAlive Off 關閉持續性的連接;(因為每次連接都得三次握手,如果是訪問量不大,建議打開此項,如果網站訪問量比較大關閉此項比較好),修改為:KeepAlive On 表示允許程序性聯機
MaxKeepAliveRequests 100 當KeepAlive設置為On的時候,該數值可以決定此次連接能夠傳輸的最大傳輸數量;
KeepAliveTimeout 65 當KeepAlive設置為On的時候,該連接在最后一次傳輸后等待延遲的秒數;
<IfModule prefork.c> Prefork MPM引擎配置段;
StartServers 8 默認啟動Apache工作進程數;開始服務時啟動8個進程,最小空閑5個進程,最多空閑20個進程。
MinSpareServers 5 最小空閑進程數;
MaxSpareServers 20 最大空閑進程數;
ServerLimit 4096 Apache服務器最多進程數;服務器允許配置進程數的上限
MaxClients 4096 每秒支持的最大客戶端並發;限制同一時刻客戶端的最大連接請求數量超過的要進入等候隊列。
MaxRequestsPerChild 4000 每個進程能處理的最大請求數;每個進程生存期內允許服務的最大請求數量,0表示永不結束
</IfModule>
<IfModule worker.c> Worker MPM引擎配置段;
StartServers 8 默認啟動Apache工作進程數;
MaxClients 4000 每秒支持的最大客戶端並發;
MinSpareThreads 25 最小空閑線程數;
MaxSpareThreads 75 最小空閑線程數;
ThreadLimit 每個子進程可能配置的線程上限
ThreadsPerChild 75 每個進程啟動的線程數;
MaxRequestsPerChild 0 每個進程能處理的最大請求數,0表示無限制;
</IfModule>
為Apache配置線程訪問,即每對WEB服務訪問啟動一個線程,這樣對內存占用率比較小。
ServerLimit服務器允許配置進程數的上限。
ThreadLimit每個子進程可能配置的線程上限
StartServers啟動兩個httpd進程,
MaxClients同時最多能發起250個訪問,超過的要進入隊列等待,其大小有ServerLimit和ThreadsPerChild的乘積決定
ThreadsPerChild每個子進程生存期間常駐執行線程數,子線程建立之后將不再增加
MaxRequestsPerChild每個進程啟動的最大線程數,如達到限制數時進程將結束,如置為0則子線程永不結束
LoadModule mod_version.so 靜態加載apache相關模塊;
ServerAdmin support@jfedu.net 管理員郵箱,網站異常,錯誤信息會發生至該郵箱;
Listen 80 監聽的端口,如有多塊網卡,默認監聽所有網卡
123 150 LoadModule auth_basic_module modules/mod_auth_basic.so
......
201 LoadModule version_module modules/mod_version.so 啟動時加載的模塊 mod_access已經更名為mod_authz_host
Include conf.d/*.conf 加載的配置文件
DocumentRoot "/usr/local/apache2/htdocs/" Apache網站默認發布目錄;
User apache
Group apache 啟動服務后轉換的身份,在啟動服務時通常以root身份,然后轉換身份,這樣增加系統安全
ServerName www.example.com:80 默認是不需要指定的,服務器通過名字解析過程來獲得自己的名字,但如果解析有問題(如反向解析不正確),或者沒有DNS名字,也可以在這里指定IP地址,當這項不正確的時候服務器不能正常啟動。前面啟動Apache時候提示正在啟動 httpd:httpd: apr_sockaddr_info_get() failed forjustin httpd: Could not reliably determine the server's fully qualified domain name, using 127.0.0.1forServerName,解決方法就是啟動該項把www.example.com:80修改為自己的域名或者直接修改為localhost
<Directory "/data/webapps/www1"> 設置/data/webapps/www1目錄權限;
AllowOverride All
Options -Indexes FollowSymLinks
Order allow,deny
Allow from all
</Directory>
AllowOverride 設置為None時,目錄中.htaccess 文件將被完全忽略,當指令設置為All時,.htaccess文件生效;.htaccess文件(或者"分布式配置文件")提供了針對目錄改變配置的文件, 以作用於此目錄及其所有子目錄。作為用戶,所能使用的命令受到限制。
Options -Indexes FollowSymLinks 禁止瀏覽目錄,去掉”-“,表示瀏覽目錄,常用於下載站點;
Order allow,deny 默認情況下禁止所有客戶機訪問;
Order deny,allow 默認情況下允許所有客戶機訪問;
Allow from all 允許所有客戶機訪問。
DirectoryIndex index.html index.html.var 指定所要訪問的主頁的默認主頁名字,默認首頁文件名為index.html
AccessFileName .htaccess 定義每個目錄下的訪問控制文件名,缺省為.htaccess
TypesConfig /etc/mime.types 用於設置保存有不同MIME類型數據的文件名
DefaultType text/plain 默認的網頁的類型
ErrorLog logs/error_log 錯誤日志存放的位置
LogLevel warn Apache日志的級別
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
LogFormat "%h %l %u %t \"%r\" %>s %b" common
LogFormat "%{Referer}i -> %U" referer
LogFormat "%{User-agent}i" agent 定義了日志的格式,並用不同的代號表示
第1章 Apache虛擬主機的部署
Apr(可移植運行庫)主要實現為上層的應用提供一個可以跨多操作系統底層的接口庫。
Apr接口庫使用的目的是對應其他的服務的接口(api(程序接口))來使用,比如說php、tomcat、nginx。
Pcre是一個perl庫,是一個正則表達式庫,兼容perl的所有正則表達式,匹配字符使用的正則表達式,主要用於文本處理。
在一台服務器上發布多個網站,也稱為部署多個虛擬主機,虛擬主機的部署方法:
1. 單IP多個端口
2. 多ip單端口
3. 單個ip單個端口不同域名(應用廣泛)
啟動apache警告
沒有開啟80端口的域名監聽,解決方法:
Echo “ServerName localhost:80” >> /usr/local/apache/conf/httpd.conf
代表開啟監聽本地域名localhost
其中基於同一端口不同域名的方式在企業中得到廣泛的使用和應用,如下為基於一個端口不同域名,在一台Apache WEB服務器上部署多個網站,步驟如下:
(1) 創建虛擬主機配置文件httpd-vhosts.conf,該文件默認已存在,只需去掉httpd.conf配置文件中#號即可,如圖10-3所示:
# Virtual hosts
Include conf/extra/httpd-vhosts.conf
#引用vhosts文件
<VirtualHost *:80>
DocumentRoot "/usr/local/apache/htdocs/jf1"
ServerName www.jf1.com
ServerAlias www.jf100.com www.jf1000.com www.jf10000.com
ErrorLog "logs/jf1.com-error_log"
CustomLog "logs/jf1.com-access_log" common
</VirtualHost>
<VirtualHost *:80>
DocumentRoot "/usr/local/apache/htdocs/jf2"
ServerName www.jf2.com
ErrorLog "logs/jf2.example.com-error_log"
CustomLog "logs/jf2.example.com-access_log" common
</VirtualHost>
配置hosts文件
Windows:C:\Windows\System32\drivers\etc
Linux /etc/hosts的配置文件
Hosts文件的作用是配置本地解析域名的,假設本地主機要訪問域名,Windows瀏覽器(首先訪問緩存數據)或者Linux工具首先訪問本地hosts,hosts文件里面寫了ip和域名對應解析關系。
Httpd-vhosts.conf參數詳解:
NameVirtualHost *:80 開啟虛擬主機,並且監聽本地所有網卡接口的80端口; <VirtualHost *:80> 虛擬主機配置起始; ServerAdmin support@jfedu.net 管理員郵箱; DocumentRoot "/usr/local/apache2/htdocs/jf1" 該虛擬主機發布目錄; ServerName www.jf1.com 虛擬主機完整域名; ErrorLog "logs/www.jf1.com_error_log" 錯誤日志路徑及文件名; CustomLog "logs/www.jf1.com_access_log" common 訪問日志路徑及文件名; </VirtualHost> 虛擬主機配置結束。 設置項目的默認訪問目錄 <Directory "/test/jf1"> Options Indexes MultiViews Options這個子句用來說明一些主要的設置,目前可以使用的設置有Indexes,Includes,FollowSymLinks,ExecCGI,MultiView,當然還有兩個最簡單的選擇就是None和All。 None是禁止所有選擇,而All 允許上面的所有Options。一般我們主要關心的是Indexes 和FollowSymLinks。Indexes 是設定是否允許在目錄下面沒有index.html 的時候顯示目錄,而FollowSymLinks 決定是否可以通過符號連接跨越DocumentRoot。 AllowOverride None AllowOverride 定義是否允許各個目錄用目錄中的.htaccess(后面解釋)覆蓋這里設定的Options。它的選擇有Options,FileInfo,AuthConfig,Limit 或者它們的組合,當然還有None 和All。 Order allow,deny 它有兩種用法,即Order allow,deny 或者Order deny,allow。簡單地說,它用來設置是先執行deny 還是先執行allow,例如,Order deny,allow 意味着先看deny 行,再看allow 行,這樣如果deny from all 再allow from 202.112.58.0/24 后來的allow子句就會超越deny 而對202.112.58.x 打開訪問。 Allow from all 這兩個選項和Order 一起使用,Allow 允許某個地址來的連接請求,Deny 則禁止這個請求,例如在Order deny,allow 的情況下,Deny from all,Allow from 192.168.12.0/24 表示只有192.168.12.x 的用戶可以訪問這個目錄。 DirectoryIndex index.html 配置默認的網頁后綴 </Directory> |
(2) 創建www.jf1.com及www.jf2.com發布目錄,重啟apache服務,並分別創建index.html頁面:
mkdir -p /usr/local/apache2/htdocs/{jf1,jf2}/ /usr/local/apache2/bin/apachectl restart echo "<h1> www.jf1.com Pages</h1>" >/usr/local/apache2/htdocs/jf1/index.html echo "<h1> www.jf2.com Pages</h1>" >/usr/local/apache2/htdocs/jf2/index.html |
(3) Windows客戶端設置Hosts映射,將www.jf1.com、www.jf2.com與192.168.111.131 IP進行映射綁定,映射的目的將域名跟IP進行綁定,在瀏覽器可以輸入域名,不需要輸入IP地址,綁定方法是在“C:\Windows\System32\drivers\etc”文件夾中,使用記事本編輯hosts文件,加入如下代碼,如圖10-4所示:
192.168.111.131 www.jf1.com 192.168.111.131 www.jf2.com |
圖10-4 Windows主機Hosts配置
(4) 瀏覽器訪問www.jf1.com、www.jf2.com如圖10-5(a)、10-5(b)所示,至此Apache基於多域名虛擬主機配置完畢,如果還需添加虛擬主機,直接拷貝其中一個虛擬主機配置、修改WEB發布目錄即可:
圖10-5(a) www.jf1.com網站返回內容
圖10-5(b) www.jf2.com網站返回內容
Apache配置文件詳解
Apache的配置文件是Apache WEB難點,讀者需要掌握配置文件中每個參數的含義,才能理解並在日常運維中去解決Apache遇到的故障,如下為Apache配置文件詳解:
1)Global Environment---全局環境配置,決定Apache服務器的全局參數
2)Main server configuration---主服務配置,相當於是Apache中的默認Web站點,如果我們的服務器中只有一個站點,那么就只需在這里配置就可以了。
3)Virtual Hosts---虛擬主機,虛擬主機不能與Main Server主服務器共存,當啟用了虛擬主機之后,Main Server就不能使用了
ServerTokens OS 顯示服務器的版本和操作系統內核版本;在出現錯誤頁的時候是否顯示服務器操作系統的名稱,ServerTokens Prod為不顯示
ServerRoot "/usr/local/apache2/" Apache主配置目錄;服務啟動之后自動將目錄改變為當前目錄,在后面使用到的所有相對路徑都是想對這個目錄下
PidFile run/httpd.pid PidFile進程文件;這是系統識別一個進程的方法,系統中httpd進程可以有多個,但這個PID對應的進程是其他的父進程
Timeout 60 不論接收或發送,當持續連接等待超過60秒則該次連接就中斷;服務器與客戶端斷開的時間
KeepAlive Off 關閉持續性的連接;(因為每次連接都得三次握手,如果是訪問量不大,建議打開此項,如果網站訪問量比較大關閉此項比較好),修改為:KeepAlive On 表示允許程序性聯機
MaxKeepAliveRequests 100 當KeepAlive設置為On的時候,該數值可以決定此次連接能夠傳輸的最大傳輸數量;
KeepAliveTimeout 65 當KeepAlive設置為On的時候,該連接在最后一次傳輸后等待延遲的秒數;
<IfModule prefork.c> Prefork MPM引擎配置段;
StartServers 8 默認啟動Apache工作進程數;開始服務時啟動8個進程,最小空閑5個進程,最多空閑20個進程。
MinSpareServers 5 最小空閑進程數;
MaxSpareServers 20 最大空閑進程數;
ServerLimit 4096 Apache服務器最多進程數;服務器允許配置進程數的上限
MaxClients 4096 每秒支持的最大客戶端並發;限制同一時刻客戶端的最大連接請求數量超過的要進入等候隊列。
MaxRequestsPerChild 4000 每個進程能處理的最大請求數;每個進程生存期內允許服務的最大請求數量,0表示永不結束
</IfModule>
<IfModule worker.c> Worker MPM引擎配置段;
StartServers 8 默認啟動Apache工作進程數;
MaxClients 4000 每秒支持的最大客戶端並發;
MinSpareThreads 25 最小空閑線程數;
MaxSpareThreads 75 最小空閑線程數;
ThreadLimit 每個子進程可能配置的線程上限
ThreadsPerChild 75 每個進程啟動的線程數;
MaxRequestsPerChild 0 每個進程能處理的最大請求數,0表示無限制;
</IfModule>
為Apache配置線程訪問,即每對WEB服務訪問啟動一個線程,這樣對內存占用率比較小。
ServerLimit服務器允許配置進程數的上限。
ThreadLimit每個子進程可能配置的線程上限
StartServers啟動兩個httpd進程,
MaxClients同時最多能發起250個訪問,超過的要進入隊列等待,其大小有ServerLimit和ThreadsPerChild的乘積決定
ThreadsPerChild每個子進程生存期間常駐執行線程數,子線程建立之后將不再增加
MaxRequestsPerChild每個進程啟動的最大線程數,如達到限制數時進程將結束,如置為0則子線程永不結束
LoadModule mod_version.so 靜態加載apache相關模塊;
ServerAdmin support@jfedu.net 管理員郵箱,網站異常,錯誤信息會發生至該郵箱;
Listen 80 監聽的端口,如有多塊網卡,默認監聽所有網卡
123 150 LoadModule auth_basic_module modules/mod_auth_basic.so
......
201 LoadModule version_module modules/mod_version.so 啟動時加載的模塊 mod_access已經更名為mod_authz_host
Include conf.d/*.conf 加載的配置文件
DocumentRoot "/usr/local/apache2/htdocs/" Apache網站默認發布目錄;
User apache
Group apache 啟動服務后轉換的身份,在啟動服務時通常以root身份,然后轉換身份,這樣增加系統安全
ServerName www.example.com:80 默認是不需要指定的,服務器通過名字解析過程來獲得自己的名字,但如果解析有問題(如反向解析不正確),或者沒有DNS名字,也可以在這里指定IP地址,當這項不正確的時候服務器不能正常啟動。前面啟動Apache時候提示正在啟動 httpd:httpd: apr_sockaddr_info_get() failed forjustin httpd: Could not reliably determine the server's fully qualified domain name, using 127.0.0.1forServerName,解決方法就是啟動該項把www.example.com:80修改為自己的域名或者直接修改為localhost
<Directory "/data/webapps/www1"> 設置/data/webapps/www1目錄權限;
AllowOverride All
Options -Indexes FollowSymLinks
Order allow,deny
Allow from all
</Directory>
AllowOverride 設置為None時,目錄中.htaccess 文件將被完全忽略,當指令設置為All時,.htaccess文件生效;.htaccess文件(或者"分布式配置文件")提供了針對目錄改變配置的文件, 以作用於此目錄及其所有子目錄。作為用戶,所能使用的命令受到限制。
Options -Indexes FollowSymLinks 禁止瀏覽目錄,去掉”-“,表示瀏覽目錄,常用於下載站點;
Order allow,deny 默認情況下禁止所有客戶機訪問;
Order deny,allow 默認情況下允許所有客戶機訪問;
Allow from all 允許所有客戶機訪問。
DirectoryIndex index.html index.html.var 指定所要訪問的主頁的默認主頁名字,默認首頁文件名為index.html
AccessFileName .htaccess 定義每個目錄下的訪問控制文件名,缺省為.htaccess
TypesConfig /etc/mime.types 用於設置保存有不同MIME類型數據的文件名
DefaultType text/plain 默認的網頁的類型
ErrorLog logs/error_log 錯誤日志存放的位置
LogLevel warn Apache日志的級別
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
LogFormat "%h %l %u %t \"%r\" %>s %b" common
LogFormat "%{Referer}i -> %U" referer
LogFormat "%{User-agent}i" agent 定義了日志的格式,並用不同的代號表示