linux的Apache(http)與PHP的結合配置及Apache默認虛擬主機

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前面的#號刪除。php

找到以下內容更改:html

<Directory />
    AllowOverride none
    Require all denied
</Directory>

修改以下:linux

<Directory />
    AllowOverride none
    Require all granted
</Directory>

示例以下:web

linux的Apache(http)與PHP的結合配置及Apache默認虛擬主機

修改目的:是容許全部請求訪問,若是不設置該行,則咱們訪問的時候會報403錯誤。apache

修改二:爲了支持PHP,須要增長一行與PHP相關的配置

找到以下內容:vim

AddType application/x-gzip /gz .tgz

在該行下面添加一行:瀏覽器

AddType application/x-httpd-php .php

示例以下:
linux的Apache(http)與PHP的結合配置及Apache默認虛擬主機服務器

修改三:打開一個網站

找到以下內容:app

<IfModule dir_module>
    DirectoryIndex index.html
</IfModule>

將該行修改成:curl

<IfModule dir_module>
    DirectoryIndex index.html index.php
</IfModule>

示例以下:

linux的Apache(http)與PHP的結合配置及Apache默認虛擬主機

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的信息。

解析報錯:

linux的Apache(http)與PHP的結合配置及Apache默認虛擬主機

解決思路:
檢查php不能解析的緣由:

  1. 查看Apache有沒有加載php模塊 /usr/local/apache2.4/bin/apachectl -M , 若是沒有加載就查看有沒有這個文件,若是沒有這個文件就加載不了.
    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

linux的Apache(http)與PHP的結合配置及Apache默認虛擬主機

再次驗證:解析成功

linux的Apache(http)與PHP的結合配置及Apache默認虛擬主機


Apache(httpd)默認虛擬主機

一臺服務器能夠訪問多個網站,每一個網站都是一個虛擬主機,概念:域名(主機名)、DNS、解析域名、hosts。任何一個域名解析到這臺機器,均可以訪問的虛擬主機就是默認虛擬主機。

  1. 修改Apache的配置文件:

編輯配置文件,搜索httpd-vhost,去掉#號,而後保存配置文件:

[root@gary-tao ~]# vim /usr/local/apache2.4/conf/httpd.conf

示例以下:

linux的Apache(http)與PHP的結合配置及Apache默認虛擬主機

2.修改虛擬主機配置文件:

編輯虛擬主機配置文件:

[root@gary-tao ~]# vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf

備註:

  1. 每一個VirtualHost *:80 表明一個主機,一個主機就是一個網站,虛擬主機配置文件能夠定義多個VirtualHost。

  2. 在虛擬主機裏有一個默認虛擬主機(第一段VirtualHost ),就是不管任何域名解析到這個IP上都會訪問這個虛擬主機。當搜索全部配置段,你發現訪問的域名沒有在配置裏面出現,那它就會默認走虛擬主機的配置。

配置文件原文:

<VirtualHost *:80>
    ServerAdmin webmaster@dummy-host.example.com
    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 webmaster@dummy-host2.example.com
    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上它都會去訪問這個默認虛擬主機。
相關文章
相關標籤/搜索