(四)Apache和PHP結合

配置http支持PHP

  • http的主配置文件爲/usr/local/apache2.4/conf/httpd.conf

這裏須要修改配置文件中的4處,分別爲:
ServerName
Require all denied
AddType application/x-httpd-php .php
DirectoryIndex index.html index.phpphp

步驟 :
修改ServerNamehtml

  • 示例: 運行下面的命令時出現疑似錯誤的東西,其實它是個警告,那麼改怎麼去除呢
[root@centos001 ~]# /usr/local/apache2.4/bin/apachectl restart
AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using fe80::20c:29ff:fe34:4a63. Set the 'ServerName' directive globally to suppress this message

解決方法:編輯這個文件,而後重啓就沒有了
進入配置文件後搜索ServerNamelinux

#進入配置文件
[root@centos001 ~]# vim /usr/local/apache2.4/conf/httpd.conf
#搜索
/ServerName

  • 錯誤1:視屏中遇到的錯誤,取消掉註釋後重啓服務,仍是有問題

    解決方法:出現錯誤的緣由是加載了兩個php模塊 註釋掉一個就能夠了

修改Require all deniedapache

爲何要修改?修改的目的是,容許全部請求,若是不設置該行,則咱們訪問的時候會報403錯誤。
修改內容在第6步vim

  • 示例: 打開瀏覽器鏈接咱們虛擬機的ip,
    錯誤a

    解決方法:
    1.先用cmd鏈接咱們的ip 測試連通性

    2.鏈接80端口,下圖是正常的,由於咱們的虛擬機沒有開啓80端口,因此鏈接失敗
    centos

    錯誤b: cmd中使用telnet報錯

    解決方法:
    緣由:pc端的80端口關閉了
    打開控制面板==>>程序和功能==>>啓用關閉windos功能==>>勾選Telnet客戶端

    3.開啓虛擬機上的80端口瀏覽器

# 檢查80端口是否開啓
[root@centos001 ~]# iptables -nvL
#開啓80端口
[root@centos001 ~]# iptables -I INPUT -p tcp --dport 80 -j ACCEPT

4.用cmd從新鏈接虛擬機80端口,檢查

5.用瀏覽器鏈接虛擬機ip

6.修改配置文件服務器

#打開配置文件
[root@centos001 ~]# vim /usr/local/apache2.4/conf/httpd.conf
#修改成
Require all granted

命令補充 :
/usr/local/apache2.4/bin/apachectl -t //測試修改完配置文件後的語法是否規範
/usr/local/apache2.4/bin/apachectl start //啓動服務
/usr/local/apache2.4/bin/apachectl graceful//從新加載配置文件,並不會重啓服務php7

增長配置文件AddType application/x-httpd-php .phpapp

若是不增長這行,你的PHP沒法解析

#打開配置文件
vim /usr/local/apache2.4/conf/httpd.conf
#找到位置粘貼
 AddType application/x-httpd-php .php

增長DirectoryIndex index.html index.php

增長一個索引頁

測試是否能正確解析PHP

測試

1.編寫一個測試腳本

#建立一個叫1.php的文件
[root@centos001 ~]# vi /usr/local/apache2.4/htdocs/1.php
#寫入以下信息,保存退出
<?php
phpinfo(); //這個函數 能吧php的相關信息打印出來
?>

2.打開瀏覽器,在虛擬機ip後面加上文件名/1.ph

排錯:

當沒法正確解析的時候,咱們該如何排錯呢?

方法:
這時候咱們須要檢查Apache的配置文件
1.檢查php模塊是否加載

[root@centos001 ~]# /usr/local/apache2.4/bin/apachectl -M

.若是沒有加載怎麼辦? 檢查一下是否有這個文件

[root@centos001 ~]# ls /usr/local/apache2.4/modules/libphp7.so 
/usr/local/apache2.4/modules/libphp7.so

.若是有這個文件可是沒有加載,咱們就應該到配置文件中去註釋並加載出來

[root@centos001 ~]# vim /usr/local/apache2.4/conf/httpd.conf


2.檢查配置文件是否有寫或者寫錯沒有

/usr/local/apache2.4/bin/apachectl -t //測試修改完配置文件後的語法是否規範

3.有沒有加index.php索引頁

輸入網站地址後面通常都默認自動添加這個


Apache默認虛擬主機

介紹

  • 先來介紹「虛擬主機」:早起的linux服務器上,一個服務器只能運行一個網站,依舊是說只能跑一個網站。可是隨着技術的發展, 一個服務器能跑多個域名了。這裏的服務器就叫作主機,早期一個主機對應一個站點。如今一個主機能跑多個站點,因此就有了虛擬主機的概念。在一臺服務器上虛擬出多個主機,這樣就實現了一臺服務器上跑多個站點。
    服務器上能有多高虛擬機,每一個虛擬機都會定義一個域名(也能是多個),只要吧這個域名解析指向這個服務器,就能訪問這個站點了。
  • 什麼叫解析指向?
    咱們訪問一個網站,須要在瀏覽器裏面輸入域名,而後就能訪問到網站內容。這個過程是須要遠程服務器通訊的,網站內容就是從服務器上讀取到的。而這個服務器是由你訪問的域名來決定在哪裏的,而域名之因此能決定服務器在哪裏,就是由於這個域名作了解析指向。域名解析服務器ip地址,這個行爲室友dns服務器決定的。 假如你訪問的域名指向了你的服務器,而你又在這臺服務器上作了配置標記了這個域名,這個域名就能被正常訪問。
  • 什麼是默認虛擬主機?任何一個域名指向這臺服務,只要沒有對應的虛擬主機,就會由這個默認虛擬主機來處理。任何一個域名解析到這臺機器,均可以訪問的虛擬主機就是默認虛擬主機

示例

爲了更清除的認識一下,咱們先來作個實驗

  • 在windos下寫hosts

windos下的hosts有什麼用呢? 答:能夠定義一個ip、一個域名,而後讓這個域名指向到這個ip去 1.找到hosts所在目錄,並用記事本打開
2.打開後 添加

3.用cmd測試一下

虛擬主機管理

1.編輯配置文件httpd.conf(這個文件是httpd服務的主配置文件)

vim /usr/local/apache2.4/conf/httpd.conf //搜索httpd-vhost,去掉#

2.更改虛擬主機配置文件

#進入配置文件
[root@centos001 ~]# vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf
#更改後的配置文件內容
<VirtualHost *:80> //一段這樣開頭的就是一個虛擬主機
    DocumentRoot "/data/wwroot/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/wwroot/111.com"	
    ServerAlias www.example.com
    ServerName 111.com
    ErrorLog "logs/111.com-error_log"
    CustomLog "logs/111.com-access_log" common
</VirtualHost>

3.添加虛擬主機相應目錄

[root@centos001 ~]# mkdir /data/wwroot/
[root@centos001 ~]# mkdir /data/wwroot/abc.com
[root@centos001 ~]# mkdir /data/wwroot/111.com

4.在相應目錄建立PHP文件

[root@centos001 ~]# vim /data/wwroot/abc.com/index.php
#文件內容以下
<?php
echo "abc.com";
#另外一個虛擬機的
[root@centos001 ~]# vim /data/wwroot/111.com/index.php
<?php
echo "111.com";
#檢查讀寫
[root@centos001 ~]# /usr/local/apache2.4/bin/apachectl -t
Syntax OK
#重啓服務
[root@centos001 ~]# /usr/local/apache2.4/bin/apachectl graceful

虛擬主機測試

1.若是不在虛擬機中進行本地域名配置(hosts),在進行ping命令測試虛擬主機域名時會訪問到外網

[root@centos001 ~]# ping abc.com
PING abc.com (199.181.132.250) 56(84) bytes of data.
64 bytes from 199.181.132.250 (199.181.132.250): icmp_seq=1 ttl=128 time=252 ms

2.curl -x命令
curl -x 指定訪問端口

此時訪問全部未定義的域名都會將訪問地址指向到默認虛擬主機,由於已經自定義添加了虛擬主機,因此此時的默認虛擬主機爲配置文件「httpd-vhosts.conf」中的第一個虛擬主機(在此爲abc.com)

[root@centos001 ~]# curl -x192.168.10.120:80 abc.com
abc.com[root@centos001 ~]# curl -x192.168.10.120:80 abcf.com
abc.com[root@centos001 ~]# curl -x192.168.10.120:80 www.example.com
111.com[root@centos001 ~]# curl -x192.168.10.120:80 111.com
相關文章
相關標籤/搜索