1. 程式人生 > >4.12任務 apache結合php以及apache默認虛擬主機

4.12任務 apache結合php以及apache默認虛擬主機

apache php apache虛擬主機

apache和php結合
雖然我們現在已經安裝好了apache,mysql,php。但是我們還沒有讓他們結合起來,雖然apache調用了php作為它的一個模塊,但我們還不知道他是否能解析php。這時我們還需要去編輯一下httpd的配置文件。
它的配置文件是/usr/local/apache的全名名字/conf/httpd.conf

[root@linletao-001 ~]# vim /usr/local/apache2.4/conf/httpd.conf
在這裏我們需要編輯幾個地方
1.ServerName
在我們重啟httpd的時候經常會遇到一下提示
[root@linletao-001 ~]# /usr/local/apache2.4/bin/apachectl restart

AH00558: httpd: Could not reliably determine the server‘s fully qualified domain name, using fe80::df71:e49:bd9a:8b3. Set the ‘ServerName‘ directive globally to suppress this message
乍一看上去是一個報錯,但其實是一個警告,看著很別扭,我們想要刪掉他。我們可以搜索
ServerName,然後將#ServerName www.example.com:80前面的“#”號刪掉就可以。
完成後我們重啟httpd,然後出現了另一個錯誤提示
[root@linletao-001 ~]# /usr/local/apache2.4/bin/apachectl start
/usr/local/apache2.4/bin/apachectl: 行 79: 1399 段錯誤 $HTTPD -k $ARGV
這是因為我們剛才在這裏添加了兩個php,我們只要在其中一個前面加一個“#”號註釋掉就可以。
LoadModule php5_module modules/libphp5.so
#LoadModule php7_module modules/libphp7.so
然後我們重啟httpd,就不會出現提示了。

2.Require all denied改成,如果不改這一行,我們是訪問不到linux的ip的,他會提示我們檢查服務器和防火墻,如果我們遇到這樣的問題,首先應該查看我們的ip是否暢通。然後我們查看80端口是否暢通。先進入windows中的DOS模式,查看80端口是否打開,如果進入DOS後沒有可以查找的命令,我們就進圖windows的控制面板,進入程序,然後點擊程序與功能,然後點擊打開或關閉windows功能,點擊telnet前面的方塊,就安裝上了telnet客戶端,然後在DOS中輸入telnet+IP地址+端口號查看,只要DOS界面無任何顯示,就證明我們的80端口通了。如果不通,它則顯示一直在連接。我們也可以用iptabs -nvL去查看80端口的是否打開。

[root@linletao-001 ~]# iptables -nvL
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
2614 228K ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED
1 60 ACCEPT icmp -- 0.0.0.0/0 0.0.0.0/0
0 0 ACCEPT all -- lo 0.0.0.0/0 0.0.0.0/0
1 52 ACCEPT tcp --
0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:22
2370 2330K REJECT all --
* 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
0 0 REJECT all -- 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited

Chain OUTPUT (policy ACCEPT 2143 packets, 336K bytes)
pkts bytes target prot opt in out source destination
結果是沒有打開,我們可以先用一條命令去打開80端口。
iptables -I INPUT -p tcp --dport 80 -j ACCEPT
然後去windows的瀏覽器去輸入我們虛擬機的ip,這時候就可以連通了。

有時候我們的瀏覽器連通了,卻顯示403,這是因為在我們的配置文件中有一個
Require all denied,我們要將denied改為granted,配置文件中有兩處,都要改。
我們改完配置首先要去檢查一下它的語法,比如我們要檢查apache的配置文件語法,就可以這樣輸入
/usr/local/apache2.4/bin/apachectl -t //-t就是測試語法的參數
[root@linletao-001 ~]# /usr/local/apache2.4/bin/apachectl -t
Syntax OK(出現這個提示,則證明語法正確)
然後重新加載配置文件,在文件的結尾處加graceful,重新加載。

3.增加一行和php相關的配置
AddType application/x-httpd-php .php
首先我們搜索ADDType
然後在AddType application/x-compress .Z和AddType application/x-gzip .gz .tgz的下面加一行,AddType application/x-httpd-php .php,這樣就可以解析php了。

4.增加一個索引頁
先進入配置文件進行編輯,然後找到# DirectoryIndex: sets the file that Apache will serve if a directory,
然後將它替換掉以前的文件,DirectoryIndex index.html index.php

然後我們驗證一下apache是否可以驗證php,先寫一個測試的腳本
vim /usr/local/apache2.4/htodcs/1.php
內容如下
<?php
phpinfo();
?>
然後我們再瀏覽器中輸入我們的ip後面接/1.php,如果出現頁面,則證明成功,但是如果出現了源代碼,則證明我們apache的配置文件出錯了。一旦出錯,我們需要檢查一下一個方面。
1.查看加載模塊有沒有加載php
/usr/local/apache2.4/bin/httpd -M
但是如果沒發現有php模塊,我們則要查看一下有沒有libphp5.so這個文件。
2.查找libphp5.so文件
[root@linletao-001 htdocs]# ls /usr/local/apache2.4/modules/libphp5.so
/usr/local/apache2.4/modules/libphp5.so
如果有,但是沒有加載,我們就要去配置文件中有沒有加載它
LoadModule php5_module modules/libphp5.so
如果有加載,我們還要去看他有沒有AddType application/x-httpd-php .php
3.查找AddType application/x-httpd-php .php
這裏一定要註意一下,在最後的.php前一定要加一個空格,不加空格的話語法檢查會報錯。
檢查完這幾步我們就可以解析我們的php了。
我們檢查修改完配置文件後一定要做一個語法檢測,然後再進行graceful加載,否則網站會出錯。

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和 ServerName。serveralias可以寫多個,但ServerName只能寫一個。

修改完後我們去創建對應的目錄
[root@linletao-001 ~]# mkdir /data/wwwroot/
[root@linletao-001 ~]# mkdir /data/wwwroot/123.com
[root@linletao-001 ~]# mkdir /data/wwwroot/111.com
可根據網站名具體修改

然後在對應的站點根目錄下創建一個index.php
[root@linletao-001 ~]# vim /data/wwwroot/123.com/index.php
然後在vim中編輯
<?php
echo "123.com";
然後保存退出。

[root@linletao-001 ~]# vim /data/wwwroot/111.com/index.php
<?php
echo "111.com";
保存退出

然後檢查語法是否有錯
[root@linletao-001 ~]# /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到外網,
[root@linletao-001 ~]# 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
[root@linletao-001 ~]# curl -x192.168.1.106:80 www.llt.com
123.com[root@linletao-001 ~]# curl -x192.168.1.106:80 www.789.com
123.com[root@linletao-001 ~]# curl -x192.168.1.106:80 www.123.com
123.com[root@linletao-001 ~]# curl -x192.168.1.106:80 www.1111.com
123.com[root@linletao-001 ~]# 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都有一個對應的ServerName和DocumentRoot,每一個virtualhost都有一個站點,每一個站點都代表一個虛擬主機。
3.在虛擬主機上有一個比較特殊的,叫虛擬默認主機,默認虛擬主機就是無論什麽域名解析到這個ip上,它都會去訪問這個默認虛擬主機。

4.12任務 apache結合php以及apache默認虛擬主機