[toc]
Apache和PHP結合 Apache默認虛擬主機
11.14 ~11.5 配置Apcahe(httpd)支持PHP
1.Apache(httpd)的主配置文件:/usr/local/apache2.4/conf/httpd.conf,編輯該文件
[root@xavi ~]# vim /usr/local/apache2.4/conf/httpd.conf
2.修改配置文件前,爲何要修改ServerName
[root@xavi ~]# /usr/local/apache2.4/bin/apachectl restart
AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using fe80::1d7a:ffe8:8235:a2a5. Set the 'ServerName' directive globally to suppress this message
httpd not running, trying to start
/usr/local/apache2.4/bin/apachectl: 行 79: 2759 段錯誤 (吐核)$HTTPD -k $ARGV
2.1 把ServerName www.example.com:80前的#去除
fg返回上一條命令
修改它的目的是,允許所有請求,否則我們訪問時回報403錯誤。
[root@xavi ~]# fg
vim /usr/local/apache2.4/conf/httpd.conf
2.2 再次啓動/usr/local/apache2.4/bin/apachectl restart,失敗是因爲有兩個
[root@xavi ~]# /usr/local/apache2.4/bin/apachectl restart
httpd not running, trying to start
/usr/local/apache2.4/bin/apachectl: 行 79: 2827 段錯誤 (吐核)$HTTPD -k $ARGV
回到vim /usr/local/apache2.4/conf/httpd.conf,找到79行,把句首加上#,但是任然報錯,想起文檔最後啓用了兩個PHP,應該禁止一個
2.3 先關閉httpd,然後vim修改,再啓動,否則報錯:httpd not running, trying to start
[root@xavi ~]# /usr/local/apache2.4/bin/apachectl restart
httpd not running, trying to start
3.啓動httpd,查看是否啓動成功:netstat -lnp |grep httpd,記住httpd三部曲:關閉-編輯-啓動
[root@xavi ~]# /usr/local/apache2.4/bin/apachectl stop
[root@xavi ~]# vim /usr/local/apache2.4/conf/httpd.conf
[root@xavi ~]# /usr/local/apache2.4/bin/apachectl start
以下說明已經啓動成功
[root@xavi ~]# netstat -lnp |grep httpd
tcp6 0 0 :::80 :::* LISTEN 3163/httpd
4. 修改denied
4.1爲什麼要修改,修改前,無法訪問虛擬機IP,
4.2 排查這個IP地址是否ping通
4.3 在看看80端口是否通,結果沒有telent
- 找到telent
此處暫停,不成功,有可能和之前課程裏的iptables設置有關係。
分析,在查看iptables端口時沒有出現80端口,修改一下iptable規則iptables -I INPUT -p tcp --dport 80 -j ACCEPT
[root@xavi htdocs]# iptables -I INPUT -p tcp --dport 80 -j ACCEPT
[root@xavi htdocs]# iptables -nvL
Chain INPUT (policy ACCEPT 82 packets, 15752 bytes)
pkts bytes target prot opt in out source destination
0 0 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:80
0 0 ACCEPT udp -- virbr0 * 0.0.0.0/0 0.0.0.0/0 udp dpt:53
0 0 ACCEPT tcp -- virbr0 * 0.0.0.0/0 0.0.0.0/0 tcp dpt:53
0 0 ACCEPT udp -- virbr0 * 0.0.0.0/0 0.0.0.0/0 udp dpt:67
0 0 ACCEPT tcp -- virbr0 * 0.0.0.0/0 0.0.0.0/0 tcp dpt:67
Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
0 0 ACCEPT all -- * virbr0 0.0.0.0/0 192.168.122.0/24 ctstate RELATED,ESTABLISHED
0 0 ACCEPT all -- virbr0 * 192.168.122.0/24 0.0.0.0/0
0 0 ACCEPT all -- virbr0 virbr0 0.0.0.0/0 0.0.0.0/0
0 0 REJECT all -- * virbr0 0.0.0.0/0 0.0.0.0/0 reject-with icmp-port-unreachable
0 0 REJECT all -- virbr0 * 0.0.0.0/0 0.0.0.0/0 reject-with icmp-port-unreachable
Chain OUTPUT (policy ACCEPT 83 packets, 16131 bytes)
pkts bytes target prot opt in out source destination
0 0 ACCEPT udp -- * virbr0 0.0.0.0/0 0.0.0.0/0 udp dpt:68
/usr/local/apache2.4/bin/apachectl start這句啓動httpd80是關鍵
4-. 修改denied爲granted,允許所有請求,防止訪問時報403錯誤。
<Directory />
AllowOverride none
Require all denied
</Directory>
<Directory />
AllowOverride none
Require all granted
</Directory>
5.增加:AddType application/x-httpd-php .php,增加和php相關的配置,可以解析的php
AddType application/x-compress .Z
AddType application/x-gzip .gz .tgz
AddType application/x-httpd-php .php
6.修改爲DirectoryIndex index.html index.php 訪問網址時不需輸入
<IfModule dir_module>
DirectoryIndex index.html
</IfModule>
<IfModule dir_module>
DirectoryIndex index.html index.php
</IfModule>
測試LAMP是否成功
1. 測試httptd配置文件是否正確:/usr/local/apache2.4/bin/apachectl -t
[root@xavi ~]# /usr/local/apache2.4/bin/apachectl -t
Syntax OK
正確的則顯示爲 “Syntax OK”,否則繼續檢查修改httpd配置文件。
1.2如果修改完成後,重新加載:/usr/local/apache2.4/bin/apachectl graceful
2.測試是否正確解析PHP
編寫一個測試腳本,如下:
[root@xavi ~]# vim /usr/local/apache2.4/htdocs/test.php //寫入如下內容
<?php
phpinfo(); //打印php的所有函數
?>
2.1 註釋掉 #AddType application/x-httpd-php .php,然後檢查編輯有無錯誤,然後重新加載,解析失敗
[root@xavi ~]# vim /usr/local/apache2.4/conf/httpd.conf
[root@xavi ~]# /usr/local/apache2.4/bin/apachectl -t
Syntax OK
[root@xavi ~]# /usr/local/apache2.4/bin/apachectl graceful
只能顯示源代碼了,無法解析
2.4 出現源代碼是,要從apache配置文件入手檢查
第一項: /usr/local/apache2.4/bin/apachectl -M,看有沒有php5_module (shared)這個模塊
第二項:[root@xavi ~]# ls /usr/local/apache2.4/modules/libphp5.so
/usr/local/apache2.4/modules/libphp5.so
第三項,文件存在但在httpd配置中沒有loadmoudle也是不行的
第四項:AddType application/x-httpd-php .php
3. index.php
很多php架構的網站其網址後綴都有index.php
3.1之前it works的由來:解析了index.html
[root@xavi ~]# ls /usr/local/apache2.4/htdocs/
index.html test.php
用php7做測試
1.修改httpd配置文件 vim /usr/local/apache2.4/conf/httpd.conf
2.檢查語法錯誤,重新加載配置
[root@xavi ~]# /usr/local/apache2.4/bin/apachectl -t
Syntax OK
[root@xavi ~]# /usr/local/apache2.4/bin/apachectl graceful
11.6 設置httpd默認虛擬主機
一臺服務器可以訪問多個網站,每個網站都是一個虛擬主機 概念:域名(主機名)、DNS、解析域名、hosts 任何一個域名解析到這臺機器,都可以訪問的虛擬主機就是默認虛擬主機
1.Windows下的hosts作用
hosts文件是一個沒有擴展名的系統文件,它的主要作用是能加快域名解析,還可以屏蔽網站等。 windows的hosts
1.1 windows xp/2003/vista/2008/7/8用戶HOSTS文件是在“c:\windows\system32\drivers\etc,
注意這個文件一定是在系統盤,如果你的系統在D盤請自行修改前面的盤符。如下圖所示
在hosts下增加一下代碼
1.2 用windows下的cmd下,ping剛纔輸入的IP和網址,都可以ping通
把剛纔編輯的ip和網站都用#號註釋掉,ping網址時顯示的是公網的ip地址,而不是剛纔虛擬試驗機的ip
1.3 保存之前在hosts的編輯內容(IP和網址),打開瀏覽器,輸入網址,顯示itworks
這裏需要注意的是打開httpd服務:
[root@xavi ~]# /usr/local/apache2.4/bin/apachectl start
同樣也可訪問test.php
2.編輯httpd配置文件
[root@xavi ~]# vim /usr/local/apache2.4/conf/httpd.conf
2.1在文件內容中搜索/extra,找到虛擬主機配置文件,然後把註釋符去掉
今天再重新看筆記的時候發現到這裏錯了:昨天的報錯就有httpd-vhosts,原來自己把#去除行選錯了,選錯httpd-manual.conf文件了
AH00526: Syntax error on line 36 of /usr/local/apache2.4/conf/extra/httpd-manual.conf:
3. 編輯虛擬主機配置文件/usr/local/apache2.4/conf/extra/httpd-vhosts.conf
[root@xavi ~]# vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf
將其內容編輯爲:
<VirtualHost *:80> //每個VirtualHost代表一個主機,一個主機代表一個網站
#ServerAdmin [email protected] //定義管理員的郵箱,作用不大可以刪除
DocumentRoot "/data/wwwroot/abc.com" //指定網站的根目錄在哪
ServerName abcd.com //定義網站名稱,只能寫一個
ServerAlias www.abcd.com www.123.com //設置網站別名,支持多個網站
ErrorLog "logs/abcd.com-error_log" //錯誤日誌,保存和虛擬主機網站一樣的名字方便讀取
CustomLog "logs/abcd.com-error_log" common
</VirtualHost>
3.1 虛擬主機生效後,原Apache配置文件中的默認主機(www.example.com 192.168.)就會失效。
<VirtualHost *:80>
DocumentRoot "/data/wwwroot/abcd.com"
ServerName abcd.com
ServerAlias www.abcd.com www.123.com
ErrorLog "logs/abcd.com-error_log"
CustomLog "logs/abcd.com-access_log" common
</VirtualHost>
<VirtualHost *:80>
DocumentRoot "/data/wwwroot/xavi.com"
ServerName xavi.com
iServerAlias www.example.com
ErrorLog "logs/xavi.com-error_log"
CustomLog "logs/xavi.com-access_log" common
</VirtualHost>
檢查錯誤:
[root@xavi ~]# /usr/local/apache2.4/bin/apachectl -t
Syntax OK
3.2 創建和虛擬主機對應的站點根目錄
[root@xavi ~]# mkdir /data/wwwroot/
[root@xavi ~]# mkdir /data/wwwroot/abcd.com
[root@xavi ~]# mkdir /data/wwwroot/xavi.com
3.3在對應的站點根目錄下創建index.php,vim
[root@xavi ~]# vim /data/wwwroot/abcd.com/index.php
<?php
echo "abcd.com";
php?>
也可簡單編輯php代碼,不加結尾
[root@xavi ~]# vim /data/wwwroot/abcd.com/index.php
[root@xavi ~]# vim /data/wwwroot/xavi.com/index.php
<?php
echo "xavi.com";
[root@xavi ~]# /usr/local/apache2.4/bin/apachectl -t
Syntax OK
3.4 重新加載,注意此時要開http服務
[root@xavi ~]# /usr/local/apache2.4/bin/apachectl graceful
httpd not running, trying to start
3.5 打開httptd端口服務/usr/local/apache2.4/bin/apachectl start,重新加載
[root@xavi ~]# /usr/local/apache2.4/bin/apachectl start
httpd (pid 7427) already running
[root@xavi ~]# /usr/local/apache2.4/bin/apachectl graceful
4. curl命令curl -x192.168.72.130:80 abcd.com
4.1 403報錯!!!
[root@xavi ~]# curl -x192.168.72.130:80 abcd.com
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>403 Forbidden</title>
</head><body>
<h1>Forbidden</h1>
<p>You don't have permission to access /
on this server.<br />
</p>
</body></html>
想了很久,網上也沒找打答案,想起403錯誤在上一章節提起過,查知道自己在httpd配置測試時該了一個地方,如下圖:
4.2 修改httpd.conf並測試虛擬主機
[root@xavi ~]# /usr/local/apache2.4/bin/apachectl stop
[root@xavi ~]# vim /usr/local/apache2.4/conf/httpd.conf
[root@xavi ~]# /usr/local/apache2.4/bin/apachectl start
[root@xavi ~]# /usr/local/apache2.4/bin/apachectl -t
Syntax OK
[root@xavi ~]# /usr/local/apache2.4/bin/apachectl graceful
[root@xavi ~]# curl -x192.168.72.130:80 abcd.com
this is a test[root@xavi ~]#
設置的虛擬主機配置中有兩個,主從配置:設置server name時沒有加www,所以訪問的地址不在設定範圍的都會默認訪問到第一個虛擬機設置中
[root@xavi ~]# /usr/local/apache2.4/bin/apachectl stop
[root@xavi ~]# vim /usr/local/apache2.4/conf/httpd.conf
[root@xavi ~]# /usr/local/apache2.4/bin/apachectl start
[root@xavi ~]# /usr/local/apache2.4/bin/apachectl -t
Syntax OK
[root@xavi ~]# /usr/local/apache2.4/bin/apachectl graceful
[root@xavi ~]# curl -x192.168.72.130:80 abcd.com
this is a test[root@xavi ~]#
注意: 虛擬主機生效後,即Virtual hosts生效,原Apache配置文件中的默認主機(www.example.com 192.168.72.130)就會失效