一、雖然apache和php安裝完成,可是它們要結合到一塊兒纔可使用:以下:php
1:要修改httpd的主配置文件: /usr/local/apache2.4/conf/httpd.conf #修改完成後須要重啓服務:有四處須要修改:html
[root@localhost_002 ~]# vim /usr/local/apapche2.4/conf/httpd.conf ServerName www.example.com:80 #第一處把#號去掉: <Directory /> AllowOverride none Require all denied #第二處須要把denied修改成granted # Require all granted </Directory> AddType application/x-compress .Z AddType application/x-gzip .gz .tgz AddType application/x-httpd-php .php #第三處新增這一行,用於支持php的語法: <IfModule dir_module> DirectoryIndex index.html index.php #第四處新增index.php索引頁: </IfModule>
2:檢查配置文件須要是否正確: /usr/local/apapche2.4/bin/apache -t apache
[root@localhost_002 ~]# /usr/local/apapche2.4/bin/apachectl -t Syntax OK
3:重啓服務,即便配置文件有問題,也不會把進程殺掉: /usr/local/apapche2.4/apache gracefulvim
[root@localhost_002 ~]# /usr/local/apapche2.4/bin/apachectl graceful
註釋:在httpd.conf的配置文件裏有兩個部分須要修改granted才能夠,會影響虛擬主機或者訪問爲403Forbidden了:瀏覽器
<Directory /> AllowOverride none Require all granted #從denied修改成granted: </Directory> # Note that from this point forward you must specifically allow # particular features to be enabled - so if something's not working as AllowOverride None # Controls who can get stuff from this server. Require all granted #此處也要修改denied爲granted: </Directory>
註釋:有時候重啓apapche時會有如下提示,則是須要安裝以下操做:bash
[root@localhost_002 ~]# /usr/local/apapche2.4/bin/apachectl restart AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using 192.168.149.130. Set the 'ServerName' directive globally to suppress this message [root@localhost_002 ~]# vim /usr/local/apapche2.4/conf/ extra/ httpd.conf httpd.conf.bak magic mime.types original/ [root@localhost_002 ~]# vim /usr/local/apapche2.4/conf/httpd.conf [root@localhost_002 ~]# grep -i 'servername' /usr/local/apapche2.4/conf/httpd.conf ServerName www.example.com:80 #須要把這一行的#號去掉才能夠:
二、apahce結合php:如上,咱們在httpd的配置文件裏定義了index.php,讓支持php的語法:app
測試:須要在默認頁/usr/local/apapche2.4/htdoc/目錄下:寫入一個1.php,內容以下:dom
[root@localhost_002 ~]# cd /usr/local/apapche2.4/htdocs/1.php <? phpinfo(); ?> </div></body></html>[root@localhost_002 htdocs]# curl -I 192.168.149.130/1.php HTTP/1.1 200 OK
註釋:它同/usr/local/php/etc/php -i顯示的信息會是同一個內容的:curl
爲何默認頁面會顯示/usr/local/apache/htdocs/,由於在httpd中有定義默認根目錄的位置:ide
[root@localhost_002 htdocs]# grep 'htdocs' /usr/local/apapche2.4/conf/httpd.conf DocumentRoot "/usr/local/apapche2.4/htdocs" <Directory "/usr/local/apapche2.4/htdocs"> #定義了網站的根目錄的位置在/usr/local/apache2.4/htdocs:
二、默認虛擬主機:是指apache的一個服務下面跑了多個網站,其實在httpd.conf裏有一個默認虛擬主機www.example.com:80,而且一個虛擬主機只能定義一個servername,此時咱們經過任何一個綁定該虛擬機ip的域名進行訪問都會調轉到改默認主機,也會讓多個域名都指向到那一個htdocs目錄,不方便管理:一臺服務是器能夠跑多個域名,也爲了方便管理,須要對虛擬主機管理:
圖例:咱們能夠修改編輯本地的hosts的文件,並指定多個域名,而後默認訪問的仍是指向了www.example.com這個網站:
本地hosts所在目錄: C:\Windows\System32\drivers\etc\hosts #由於解析會優先解析本地hosts文件:
#112.80.255.214 730.nuomi.n.shifen.com #123.125.114.5 www.hao123.com 192.168.149.130 www.123.com www.abc.com #此爲須要指向的域名:
而後在瀏覽器裏訪問時,仍是會調轉到www.exaple.com那個頁面:
配置虛擬主機:
註釋:一旦虛擬主機生效了,默認主機www.example.com就失效了:
1:修改配置文件: /usr/local/apapche2.4/conf/httpd.conf #打開虛擬主機配置文件入口: conf/extra/httpd-vhost.conf
[root@localhost_002 htdocs]# vim /usr/local/apapche2.4/conf/httpd.conf #Include conf/extra/httpd-info.conf #Virtual hosts Include conf/extra/httpd-vhosts.conf #把#號去掉:打開虛擬主機配置:
2:修改二級虛擬主機配置文件: /usr/local/apapche2.4/conf/extra/httpd-vhost.conf
註釋:這個文件裏面能夠定義多個虛擬主機,該配置下每一段"< VirtualHost *:80 >"能夠是一個虛擬主機:用來跑一個網站:
[root@localhost_002 apapche2.4]# vim conf/extra/httpd-vhosts.conf
3:咱們分別編輯第一個網站和第二個網站,內容以下: /usr/local/apapche2.4/conf/extra/httpd-vhost.conf
[root@localhost_002 apapche2.4]# vim conf/extra/httpd-vhosts.conf cat conf/extra/httpd-vhosts.conf # Virtual Hosts #第一個網站: <VirtualHost *:80> ServerAdmin yuanhh@forebix.com #管理員的郵箱: DocumentRoot "/data/wwwroot/abc.com" ###網站根目錄:----核心文件之一: ServerName abc.com #網站域名(只能定義一個),核心文件之二: ServerAlias www.abc.com www.123.com #網站別名(能夠有多個): ErrorLog "logs/abc.com-error_log" #網站訪問日記(格式在主配置文件httpd.conf中定義) CustomLog "logs/abc.com-access_log" common #網站錯誤訪問日記: </VirtualHost> 第二個網站: <VirtualHost *:80> ServerAdmin yuanhh@forebix.com #管理員的郵箱: DocumentRoot "/data/wwwroot/111.com" ###網站根目錄:----核心文件之一: ServerName 111.com #網站域名(只能定義一個),核心文件之二: ServerAlias www.example.com #網站別名(能夠有多個): ErrorLog "logs/111.com-error_log" #網站訪問日記(格式在主配置文件httpd.conf中定義) CustomLog "logs/111.com-access_log" common #網站訪問日記(格式在主配置文件httpd.conf中定義) </VirtualHost>
如上圖例:此時咱們定義了兩個網站:網站的核心參數以下:
DocumentRoot:網站根目錄:
ServerName:網站域名: ServierAlias:網站別名:
ErrorLog:訪問日記: CustomLog:訪問錯誤的日記:
4:建立相應的虛擬主機目錄: /data/wwwroot/abc.com(第一個主機) /data/wwwroot/111.com(第二個主機)
[root@localhost_002 apapche2.4]# mkdir /data/wwwroot/ #建立目錄 [root@localhost_002 apapche2.4]# mkdir /data/wwwroot/abc.com #建立第一個虛擬主機目錄: [root@localhost_002 apapche2.4]# mkdir /data/wwwroot/111.com #建立第二個虛擬主機目錄: #定義第一個主機的網站內容: [root@localhost_002 apapche2.4]# cd /data/wwwroot/abc.com/ #進入第一個虛擬主機目錄,待寫入相關配置: [root@localhost_002 abc.com]# vim index.php #寫入第一個虛擬主機的測試腳本: <?php echo "abc.com"; #頂一個第二個主機的網站內容: [root@localhost_002 wwwroot]# cd /data/wwwroot/111.com/ #進入第一個虛擬主機目錄,待寫入相關配置: [root@localhost_002 111.com]# vim index.php #寫入第一個虛擬主機的測試腳本: <?php echo "abc.com"; [root@localhost_002 111.com]# /usr/local/apapche2.4/bin/apachectl -t #檢查是否有錯誤: Syntax OK [root@localhost_002 111.com]# /usr/local/apapche2.4/bin/apachectl graceful #重啓服務:
5:網站建立完成,此時須要在本地/etc/hosts,或者用curl命令來測試:
curl -x192.168.149.130:80 www.abc.om #以本機的80端口去訪問www.abc.com
[root@localhost_002 ~]# curl -x192.168.149.130:80 abc.com abc.com[root@localhost_002 ~]# curl -x192.168.149.130:80 www.abc.com abc.com[root@localhost_002 ~]#
註釋:此時訪問全部未定義的域名都會將訪問地址只指向到默認虛擬主機,而由於咱們已經開啓虛擬主機配置文件(主配置文件會失效),因此此時的默認虛擬主機爲配置文件conf/extra/httpd-vhosts.conf的第一個虛擬主機(在此爲abc.com),效果以下:
[root@localhost_002 ~]# curl -x192.168.149.130:80 www.abcde.com abc.com[root@localhost_002 ~]# curl -x 192.168.149.130:80 www.aaaaaa.com abc.com[root@localhost_002 ~]#
默認虛擬主機:不管你訪問什麼域名,只有是解析到這個IP上,都會訪問這個網站對應的虛擬主機配置:配置裏的的第一個主機:
而此時訪問www.example.com會訪問到第二個虛擬主機,而不是主配置文件了,由於在虛擬配置文件第二個虛擬主機有定義的:
因此有兩點須要注意下:
一、一旦打開了虛擬主機配置文件(httpd-vhosts),去掉註釋,則主配置文件則會失效了(servername documentroot):
二、每一個虛擬主機配置文件裏,每個VirtualHost都表明一個虛擬主機,第一個VirtualHost都表明一個虛擬主機:
三、默認虛擬主機,不管任何域名,解析到這個IP上,只要在虛擬主機裏沒有定義,都會訪問這個域名: