Apache和PHP結合 Apache預設虛擬主機
[toc]
Apache和PHP結合 Apache預設虛擬主機
11.14 ~11.5 配置Apcahe(httpd)支援PHP
1.Apache(httpd)的主配置檔案:/usr/local/apache2.4/conf/httpd.conf,編輯該檔案
[[email protected] ~]# vim /usr/local/apache2.4/conf/httpd.conf
2.修改配置檔案前,為何要修改ServerName
[[email protected] ~]# /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錯誤。
[[email protected] ~]# fg
vim /usr/local/apache2.4/conf/httpd.conf
2.2 再次啟動/usr/local/apache2.4/bin/apachectl restart,失敗是因為有兩個
[[email protected] ~]# /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
[[email protected] ~]# /usr/local/apache2.4/bin/apachectl restart
httpd not running, trying to start
3.啟動httpd,檢視是否啟動成功:netstat -lnp |grep httpd,記住httpd三部曲:關閉-編輯-啟動
[[email protected] ~]# /usr/local/apache2.4/bin/apachectl stop
[[email protected] ~]# vim /usr/local/apache2.4/conf/httpd.conf
[[email protected] ~]# /usr/local/apache2.4/bin/apachectl start
以下說明已經啟動成功
[[email protected] ~]# 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
[[email protected] htdocs]# iptables -I INPUT -p tcp --dport 80 -j ACCEPT
[[email protected] 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
[[email protected] ~]# /usr/local/apache2.4/bin/apachectl -t
Syntax OK
正確的則顯示為 “Syntax OK”,否則繼續檢查修改httpd配置檔案。
1.2如果修改完成後,重新載入:/usr/local/apache2.4/bin/apachectl graceful
2.測試是否正確解析PHP
編寫一個測試指令碼,如下:
[[email protected] ~]# vim /usr/local/apache2.4/htdocs/test.php //寫入如下內容
<?php
phpinfo(); //列印php的所有函式
?>
2.1 註釋掉 #AddType application/x-httpd-php .php,然後檢查編輯有無錯誤,然後重新載入,解析失敗
[[email protected] ~]# vim /usr/local/apache2.4/conf/httpd.conf
[[email protected] ~]# /usr/local/apache2.4/bin/apachectl -t
Syntax OK
[[email protected] ~]# /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
[[email protected] ~]# ls /usr/local/apache2.4/htdocs/
index.html test.php
用php7做測試
1.修改httpd配置檔案 vim /usr/local/apache2.4/conf/httpd.conf
2.檢查語法錯誤,重新載入配置
[[email protected] ~]# /usr/local/apache2.4/bin/apachectl -t
Syntax OK
[[email protected] ~]# /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服務:
[[email protected] ~]# /usr/local/apache2.4/bin/apachectl start
同樣也可訪問test.php
2.編輯httpd配置檔案
[[email protected] ~]# 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
[[email protected] ~]# 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>
檢查錯誤:
[[email protected] ~]# /usr/local/apache2.4/bin/apachectl -t
Syntax OK
3.2 建立和虛擬主機對應的站點根目錄
[[email protected] ~]# mkdir /data/wwwroot/
[[email protected] ~]# mkdir /data/wwwroot/abcd.com
[[email protected] ~]# mkdir /data/wwwroot/xavi.com
3.3在對應的站點根目錄下建立index.php,vim
[[email protected] ~]# vim /data/wwwroot/abcd.com/index.php
<?php
echo "abcd.com";
php?>
也可簡單編輯php程式碼,不加結尾
[[email protected] ~]# vim /data/wwwroot/abcd.com/index.php
[[email protected] ~]# vim /data/wwwroot/xavi.com/index.php
<?php
echo "xavi.com";
[[email protected] ~]# /usr/local/apache2.4/bin/apachectl -t
Syntax OK
3.4 重新載入,注意此時要開http服務
[[email protected] ~]# /usr/local/apache2.4/bin/apachectl graceful
httpd not running, trying to start
3.5 開啟httptd埠服務/usr/local/apache2.4/bin/apachectl start,重新載入
[[email protected] ~]# /usr/local/apache2.4/bin/apachectl start
httpd (pid 7427) already running
[[email protected] ~]# /usr/local/apache2.4/bin/apachectl graceful
4. curl命令curl -x192.168.72.130:80 abcd.com
4.1 403報錯!!!
[[email protected] ~]# 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並測試虛擬主機
[[email protected] ~]# /usr/local/apache2.4/bin/apachectl stop
[[email protected] ~]# vim /usr/local/apache2.4/conf/httpd.conf
[[email protected] ~]# /usr/local/apache2.4/bin/apachectl start
[[email protected] ~]# /usr/local/apache2.4/bin/apachectl -t
Syntax OK
[[email protected] ~]# /usr/local/apache2.4/bin/apachectl graceful
[[email protected] ~]# curl -x192.168.72.130:80 abcd.com
this is a test[[email protected] ~]#
設定的虛擬主機配置中有兩個,主從配置:設定server name時沒有加www,所以訪問的地址不在設定範圍的都會預設訪問到第一個虛擬機器設定中
[[email protected] ~]# /usr/local/apache2.4/bin/apachectl stop
[[email protected] ~]# vim /usr/local/apache2.4/conf/httpd.conf
[[email protected] ~]# /usr/local/apache2.4/bin/apachectl start
[[email protected] ~]# /usr/local/apache2.4/bin/apachectl -t
Syntax OK
[[email protected] ~]# /usr/local/apache2.4/bin/apachectl graceful
[[email protected] ~]# curl -x192.168.72.130:80 abcd.com
this is a test[[email protected] ~]#
注意: 虛擬主機生效後,即Virtual hosts生效,原Apache配置檔案中的預設主機(www.example.com 192.168.72.130)就會失效