Apache和PHP結合
配置httpd支持php
1. 修改配置文件:
[root@gary-tao php-7.1.6]# vim /usr/local/apache2.4/conf/httpd.conf
修改一:
修改httpd的主配置文件/usr/local/apache2.4/conf/httpd.conf,搜索ServerName,把#ServerName www.example.com:80前面的#號刪除。
找到如下內容更改:
<Directory />
AllowOverride none
Require all denied
</Directory>
修改如下:
<Directory />
AllowOverride none
Require all granted
</Directory>
示例如下:
修改目的:是允許所有請求訪問,如果不設置該行,則我們訪問的時候會報403錯誤。
修改二:爲了支持PHP,需要增加一行與PHP相關的配置
找到如下內容:
AddType application/x-gzip /gz .tgz
在該行下面添加一行:
AddType application/x-httpd-php .php
示例如下:
修改三:打開一個網站
找到如下內容:
<IfModule dir_module>
DirectoryIndex index.html
</IfModule>
將該行修改爲:
<IfModule dir_module>
DirectoryIndex index.html index.php
</IfModule>
示例如下:
2. 臨時開關80端口命令:
[root@gary-tao php-7.1.6]# iptables -I INPUT -p tcp --dport 80 -j ACCEPT //添加規則
[root@gary-tao php-7.1.6]# iptables -D INPUT -p tcp --dport 80 -j ACCEPT //刪除規則
3. 測試配置文件是否正確
重新加載配置命令:
[root@gary-tao php-7.1.6]# /usr/local/apache2.4/bin/apachectl -t //檢查配置語法是否正確,正常顯示“Syntax OK”
Syntax OK
[root@gary-tao php-7.1.6]# /usr/local/apache2.4/bin/apachectl graceful //重新加載服務,報錯也不會重啓服務
4. 測試編輯一個PHP腳本:
[root@gary-tao src]# vim /usr/local/apache2.4/htdocs/test.php //增加如下內容
<?php
phpinfo();
?>
驗證:用瀏覽器打開網址:172.16.110.100/test.php 會在瀏覽器中顯示php的信息。
解析報錯:
解決思路:
檢查php不能解析的原因:
查看Apache有沒有加載php模塊 /usr/local/apache2.4/bin/apachectl -M , 如果沒有加載就1.查看有沒有這個文件,如果沒有這個文件就加載不了.
ls /usr/local/apache2.4/modules/libphp5.so;
2.如果有這個文件但並沒有顯示,就檢查配置文件裏vim /usr/local/apache2.4/conf/httpd.conf,有沒有加載libphp5.so的配置;
3.檢查配置文件裏有沒有加這一行:AddType application/x-httpd-php .php,記得在.php前要加空格;
4.檢查配置文件裏有沒有加index.php;
結果:發現以上配置都正常,最後發現是index.html用root用戶建的文件,apache權限不夠。注:index.html默認權限是644。
解決方法:
更改文件權限;chmod 755 /usr/local/apache2.4/htdocs/index.html
再次驗證:解析成功
Apache默認虛擬主機
一臺服務器可以訪問多個網站,每個網站都是一個虛擬主機,概念:域名(主機名)、DNS、解析域名、hosts。任何一個域名解析到這臺機器,都可以訪問的虛擬主機就是默認虛擬主機。
1.修改Apache的配置文件:
編輯配置文件,搜索httpd-vhost,去掉#號,然後保存配置文件:
[root@gary-tao ~]# vim /usr/local/apache2.4/conf/httpd.conf
示例如下:
2.修改虛擬主機配置文件:
編輯虛擬主機配置文件:
[root@gary-tao ~]# vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf
備註:
1.每個VirtualHost *:80 代表一個主機,一個主機就是一個網站,虛擬主機配置文件可以定義多個VirtualHost。
2.在虛擬主機裏有一個默認虛擬主機(第一段VirtualHost ),就是無論任何域名解析到這個IP上都會訪問這個虛擬主機。當搜索所有配置段,你發現訪問的域名沒有在配置裏面出現,那它就會默認走虛擬主機的配置。
配置文件原文:
<VirtualHost *:80>
ServerAdmin [email protected]
DocumentRoot "/usr/local/apache2.4/docs/dummy-host.example.com"
ServerName dummy-host.example.com
ServerAlias www.dummy-host.example.com
ErrorLog "logs/dummy-host.example.com-error_log"
CustomLog "logs/dummy-host.example.com-access_log" common
</VirtualHost>
<VirtualHost *:80>
ServerAdmin [email protected]
DocumentRoot "/usr/local/apache2.4/docs/dummy-host2.example.com"
ServerName dummy-host2.example.com
ErrorLog "logs/dummy-host2.example.com-error_log"
CustomLog "logs/dummy-host2.example.com-access_log" common
</VirtualHost>
修改後:
<VirtualHost *:80>
DocumentRoot "/data/wwwroot/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/wwwroot/111.com"
ServerName 111.com
ServerAlias www.example.com
ErrorLog "logs/111.com-error_log"
CustomLog "logs/111.com-access_log" common
</VirtualHost>
內容定義說明:
ServerAdmin:指定管理員郵箱,這個沒有什麼實質作用。
DocumentRoot:爲該虛擬主機站點的根目錄,網站的程序就放在這個目錄下面。
ServerName:爲網站的域名,不支持寫多個
ServerAlias:爲網站的第二域名,只有alias可以寫多個域名,用空格分隔。
Errorlog:爲站點的錯誤日誌
Customlog:爲站點的訪問日誌。
3.更改完成配置文件後需要在/data目錄下創建對應的目錄文件:
[root@gary-tao ~]# mkdir /data/wwwroot/
[root@gary-tao ~]# mkdir /data/wwwroot/abc.com
[root@gary-tao ~]# mkdir /data/wwwroot/111.com
4.在對應的站點根目錄下定義一個index.php文件:
[root@gary-tao ~]# vim /data/wwwroot/abc.com/index.php
定義內容如下:
<?php
echo "abc.com";
?>
[root@gary-tao ~]# vim /data/wwwroot/111.com/index.php
定義內容如下:
<?php
echo "111.com";
?>
5.檢查配置文件語法是否正確:
[root@gary-tao ~]# /usr/local/apache2.4/bin/apachectl -t
Syntax OK
6.重新加載配置文件:
[root@gary-tao ~]# /usr/local/apache2.4/bin/apachectl graceful
7.如果想訪問abc.com在本機的機器上,可以編輯vim /etc/hosts文件使用curl -x命令,示例如下:
[root@gary-tao ~]# curl -x172.16.111.100:80 abc.com
abc.com[root@gary-tao ~]# curl -x172.16.111.100:80 abcd.com
abc.com[root@gary-tao ~]# curl -x172.16.111.100:80 abcde.com //無論我們有沒有配置域名abcd.com或其它域名,它都會訪問到abc.com,因爲abc.com是默認的虛擬主機。
abc.com[root@gary-tao ~]# curl -x172.16.111.100:80 www.example.com
“111com”[root@gary-tao ~]#
重點:
1.在主配置文件中打開了虛擬主機配置文件Vhosts.conf,那主配置其它配置文件DoucmentRoot與ServerName都失效。
2.虛擬主機配置文件一旦打開,它裏面可以定義很多個VirtualHos,每一個VirtualHos裏面都可以定義DoucmentRoot與ServerName,ServerName可以寫多個,每個VirtualHos都代表一個站點,都是一個虛擬主機。在虛擬主機裏面有一個比較特殊的,就是默認虛擬主機,所謂默認虛擬主機,就是無論任何域名解析到這個IP上它都會去訪問這個默認虛擬主機。